1414from textwrap import dedent
1515from collections import OrderedDict
1616
17+
18+ class BadIterable :
19+ def __iter__ (self ):
20+ raise OSError
21+
22+
1723class Test_Csv (unittest .TestCase ):
1824 """
1925 Test the underlying C csv parser in ways that are not appropriate
@@ -40,9 +46,15 @@ def _test_arg_valid(self, ctor, arg):
4046
4147 def test_reader_arg_valid (self ):
4248 self ._test_arg_valid (csv .reader , [])
49+ self .assertRaises (OSError , csv .reader , BadIterable ())
4350
4451 def test_writer_arg_valid (self ):
4552 self ._test_arg_valid (csv .writer , StringIO ())
53+ class BadWriter :
54+ @property
55+ def write (self ):
56+ raise OSError
57+ self .assertRaises (OSError , csv .writer , BadWriter ())
4658
4759 def _test_default_attrs (self , ctor , * args ):
4860 obj = ctor (* args )
@@ -141,6 +153,7 @@ def test_write_arg_valid(self):
141153 self ._write_test ([None ], '""' )
142154 self ._write_error_test (csv .Error , [None ], quoting = csv .QUOTE_NONE )
143155 # Check that exceptions are passed up the chain
156+ self ._write_error_test (OSError , BadIterable ())
144157 class BadList :
145158 def __len__ (self ):
146159 return 10 ;
@@ -230,6 +243,12 @@ def test_writerows_with_none(self):
230243 fileobj .seek (0 )
231244 self .assertEqual (fileobj .read (), 'a\r \n ""\r \n ' )
232245
246+ def test_writerows_errors (self ):
247+ with TemporaryFile ("w+" , newline = '' ) as fileobj :
248+ writer = csv .writer (fileobj )
249+ self .assertRaises (TypeError , writer .writerows , None )
250+ self .assertRaises (OSError , writer .writerows , BadIterable ())
251+
233252 @support .cpython_only
234253 def test_writerows_legacy_strings (self ):
235254 import _testcapi
@@ -334,7 +353,6 @@ def test_read_linenum(self):
334353 def test_roundtrip_quoteed_newlines (self ):
335354 with TemporaryFile ("w+" , newline = '' ) as fileobj :
336355 writer = csv .writer (fileobj )
337- self .assertRaises (TypeError , writer .writerows , None )
338356 rows = [['a\n b' ,'b' ],['c' ,'x\r \n d' ]]
339357 writer .writerows (rows )
340358 fileobj .seek (0 )
0 commit comments