@@ -373,6 +373,7 @@ def test_read_oddinputs(self):
373373 self .assertRaises (csv .Error , self ._read_test ,
374374 ['"ab"c' ], None , strict = 1 )
375375 self ._read_test (['"ab"c' ], [['abc' ]], doublequote = 0 )
376+ self ._read_test ([",,," ], [["" , "" , "" , "" ]])
376377
377378 self .assertRaises (csv .Error , self ._read_test ,
378379 [b'abc' ], None )
@@ -423,6 +424,10 @@ def test_read_escape(self):
423424 self ._read_test (['a,\0 b,c' ], [['a' , 'b' , 'c' ]], escapechar = '\0 ' )
424425 self ._read_test (['a,\\ b,c' ], [['a' , '\\ b' , 'c' ]], escapechar = None )
425426 self ._read_test (['a,\\ b,c' ], [['a' , '\\ b' , 'c' ]])
427+ # '"abc\" with escapechar='\' -> ESCAPE_IN_QUOTED_FIELD + EOL -> '\n' appended
428+ self ._read_test (['"abc\\ ' ], [["abc\n " ]], escapechar = "\\ " )
429+ with self .assertRaises (csv .Error ):
430+ self ._read_test (['"abc\\ ' ], None , escapechar = "\\ " , strict = True )
426431
427432 def test_read_quoting (self ):
428433 self ._read_test (['1,",3,",5' ], [['1' , ',3,' , '5' ]])
@@ -513,6 +518,31 @@ def test_read_linenum(self):
513518 self .assertRaises (StopIteration , next , r )
514519 self .assertEqual (r .line_num , 3 )
515520
521+ def test_read_linenum_multiline_record (self ):
522+ r = csv .reader (['"a' , 'b",c' , "d,e" ])
523+ self .assertEqual (next (r ), ["ab" , "c" ])
524+ self .assertEqual (r .line_num , 2 )
525+ self .assertEqual (next (r ), ["d" , "e" ])
526+ self .assertEqual (r .line_num , 3 )
527+ with self .assertRaises (StopIteration ):
528+ next (r )
529+ self .assertEqual (r .line_num , 3 )
530+
531+ def test_read_with_unicode_delimiter_and_quotechar (self ):
532+ self ._read_test (["αλβλγ" ], [["α" , "β" , "γ" ]], delimiter = "λ" )
533+ self ._read_test (
534+ ["אαאλאβאλאγא" ], [["α" , "β" , "γ" ]], delimiter = "λ" , quotechar = "א"
535+ )
536+
537+ # non-BMP
538+ delim , quote = "😂" , "😺"
539+ self ._read_test (
540+ [f"{ quote } a{ quote } { delim } { quote } b{ quote } " ],
541+ [["a" , "b" ]],
542+ delimiter = delim ,
543+ quotechar = quote ,
544+ )
545+
516546 def test_roundtrip_quoteed_newlines (self ):
517547 rows = [
518548 ['\n a' , 'b\n c' , 'd\n ' ],
0 commit comments