@@ -376,7 +376,7 @@ def test_parse_multiline_with_complete_comment(parser):
376376 assert statement .argv == ['multiline' , 'command' , 'is' , 'done' ]
377377 assert statement .terminator == ';'
378378
379- def test_parse_multiline_termninated_by_empty_line (parser ):
379+ def test_parse_multiline_terminated_by_empty_line (parser ):
380380 line = 'multiline command ends\n \n '
381381 statement = parser .parse (line )
382382 assert statement .multiline_command == 'multiline'
@@ -386,6 +386,23 @@ def test_parse_multiline_termninated_by_empty_line(parser):
386386 assert statement .argv == ['multiline' , 'command' , 'ends' ]
387387 assert statement .terminator == '\n '
388388
389+ @pytest .mark .parametrize ('line,terminator' ,[
390+ ('multiline command "with\n embedded newline";' , ';' ),
391+ ('multiline command "with\n embedded newline";;;' , ';' ),
392+ ('multiline command "with\n embedded newline";; ;;' , ';' ),
393+ ('multiline command "with\n embedded newline" &' , '&' ),
394+ ('multiline command "with\n embedded newline" & &' , '&' ),
395+ ('multiline command "with\n embedded newline"\n \n ' , '\n ' ),
396+ ])
397+ def test_parse_multiline_with_embedded_newline (parser , line , terminator ):
398+ statement = parser .parse (line )
399+ assert statement .multiline_command == 'multiline'
400+ assert statement .command == 'multiline'
401+ assert statement .args == 'command "with\n embedded newline"'
402+ assert statement == statement .args
403+ assert statement .argv == ['multiline' , 'command' , 'with\n embedded newline' ]
404+ assert statement .terminator == terminator
405+
389406def test_parse_multiline_ignores_terminators_in_comments (parser ):
390407 line = 'multiline command "with term; ends" now\n \n '
391408 statement = parser .parse (line )
@@ -584,6 +601,16 @@ def test_parse_command_only_none(parser, line):
584601 assert statement .args is None
585602 assert statement == ''
586603
604+ def test_parse_command_only_multiline (parser ):
605+ line = 'multiline with partially "open quotes and no terminator'
606+ statement = parser .parse_command_only (line )
607+ assert statement .command == 'multiline'
608+ assert statement .multiline_command == 'multiline'
609+ assert statement .args == 'with partially "open quotes and no terminator'
610+ assert statement == statement .args
611+ assert statement .command_and_args == line
612+
613+
587614def test_statement_initialization (parser ):
588615 string = 'alias'
589616 statement = cmd2 .Statement (string )
0 commit comments