@@ -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 )
0 commit comments