@@ -240,9 +240,11 @@ def test_write_lineterminator(self):
240240 writer = csv .writer (sio , lineterminator = lineterminator )
241241 writer .writerow (['a' , 'b' ])
242242 writer .writerow ([1 , 2 ])
243+ writer .writerow (['\r ' , '\n ' ])
243244 self .assertEqual (sio .getvalue (),
244245 f'a,b{ lineterminator } '
245- f'1,2{ lineterminator } ' )
246+ f'1,2{ lineterminator } '
247+ f'"\r ","\n "{ lineterminator } ' )
246248
247249 def test_write_iterable (self ):
248250 self ._write_test (iter (['a' , 1 , 'p,q' ]), 'a,1,"p,q"' )
@@ -469,22 +471,44 @@ def test_read_linenum(self):
469471 self .assertEqual (r .line_num , 3 )
470472
471473 def test_roundtrip_quoteed_newlines (self ):
472- with TemporaryFile ("w+" , encoding = "utf-8" , newline = '' ) as fileobj :
473- writer = csv .writer (fileobj )
474- rows = [['a\n b' ,'b' ],['c' ,'x\r \n d' ]]
475- writer .writerows (rows )
476- fileobj .seek (0 )
477- for i , row in enumerate (csv .reader (fileobj )):
478- self .assertEqual (row , rows [i ])
474+ rows = [
475+ ['\n a' , 'b\n c' , 'd\n ' ],
476+ ['\r e' , 'f\r g' , 'h\r ' ],
477+ ['\r \n i' , 'j\r \n k' , 'l\r \n ' ],
478+ ['\n \r m' , 'n\n \r o' , 'p\n \r ' ],
479+ ['\r \r q' , 'r\r \r s' , 't\r \r ' ],
480+ ['\n \n u' , 'v\n \n w' , 'x\n \n ' ],
481+ ]
482+ for lineterminator in '\r \n ' , '\n ' , '\r ' :
483+ with self .subTest (lineterminator = lineterminator ):
484+ with TemporaryFile ("w+" , encoding = "utf-8" , newline = '' ) as fileobj :
485+ writer = csv .writer (fileobj , lineterminator = lineterminator )
486+ writer .writerows (rows )
487+ fileobj .seek (0 )
488+ for i , row in enumerate (csv .reader (fileobj )):
489+ self .assertEqual (row , rows [i ])
479490
480491 def test_roundtrip_escaped_unquoted_newlines (self ):
481- with TemporaryFile ("w+" , encoding = "utf-8" , newline = '' ) as fileobj :
482- writer = csv .writer (fileobj ,quoting = csv .QUOTE_NONE ,escapechar = "\\ " )
483- rows = [['a\n b' ,'b' ],['c' ,'x\r \n d' ]]
484- writer .writerows (rows )
485- fileobj .seek (0 )
486- for i , row in enumerate (csv .reader (fileobj ,quoting = csv .QUOTE_NONE ,escapechar = "\\ " )):
487- self .assertEqual (row ,rows [i ])
492+ rows = [
493+ ['\n a' , 'b\n c' , 'd\n ' ],
494+ ['\r e' , 'f\r g' , 'h\r ' ],
495+ ['\r \n i' , 'j\r \n k' , 'l\r \n ' ],
496+ ['\n \r m' , 'n\n \r o' , 'p\n \r ' ],
497+ ['\r \r q' , 'r\r \r s' , 't\r \r ' ],
498+ ['\n \n u' , 'v\n \n w' , 'x\n \n ' ],
499+ ]
500+ for lineterminator in '\r \n ' , '\n ' , '\r ' :
501+ with self .subTest (lineterminator = lineterminator ):
502+ with TemporaryFile ("w+" , encoding = "utf-8" , newline = '' ) as fileobj :
503+ writer = csv .writer (fileobj , lineterminator = lineterminator ,
504+ quoting = csv .QUOTE_NONE , escapechar = "\\ " )
505+ writer .writerows (rows )
506+ fileobj .seek (0 )
507+ for i , row in enumerate (csv .reader (fileobj ,
508+ quoting = csv .QUOTE_NONE ,
509+ escapechar = "\\ " )):
510+ self .assertEqual (row , rows [i ])
511+
488512
489513class TestDialectRegistry (unittest .TestCase ):
490514 def test_registry_badargs (self ):
0 commit comments