bpo-26407: Do not mask errors in csv. (GH-20536) · python/cpython@5606d55 (original) (raw)
`@@ -14,6 +14,12 @@
`
14
14
`from textwrap import dedent
`
15
15
`from collections import OrderedDict
`
16
16
``
``
17
+
``
18
`+
class BadIterable:
`
``
19
`+
def iter(self):
`
``
20
`+
raise OSError
`
``
21
+
``
22
+
17
23
`class Test_Csv(unittest.TestCase):
`
18
24
`"""
`
19
25
` Test the underlying C csv parser in ways that are not appropriate
`
`@@ -40,9 +46,15 @@ def _test_arg_valid(self, ctor, arg):
`
40
46
``
41
47
`def test_reader_arg_valid(self):
`
42
48
`self._test_arg_valid(csv.reader, [])
`
``
49
`+
self.assertRaises(OSError, csv.reader, BadIterable())
`
43
50
``
44
51
`def test_writer_arg_valid(self):
`
45
52
`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())
`
46
58
``
47
59
`def _test_default_attrs(self, ctor, *args):
`
48
60
`obj = ctor(*args)
`
`@@ -141,6 +153,7 @@ def test_write_arg_valid(self):
`
141
153
`self._write_test([None], '""')
`
142
154
`self._write_error_test(csv.Error, [None], quoting = csv.QUOTE_NONE)
`
143
155
`# Check that exceptions are passed up the chain
`
``
156
`+
self._write_error_test(OSError, BadIterable())
`
144
157
`class BadList:
`
145
158
`def len(self):
`
146
159
`return 10;
`
`@@ -230,6 +243,12 @@ def test_writerows_with_none(self):
`
230
243
`fileobj.seek(0)
`
231
244
`self.assertEqual(fileobj.read(), 'a\r\n""\r\n')
`
232
245
``
``
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
+
233
252
`@support.cpython_only
`
234
253
`def test_writerows_legacy_strings(self):
`
235
254
`import _testcapi
`
`@@ -334,7 +353,6 @@ def test_read_linenum(self):
`
334
353
`def test_roundtrip_quoteed_newlines(self):
`
335
354
`with TemporaryFile("w+", newline='') as fileobj:
`
336
355
`writer = csv.writer(fileobj)
`
337
``
`-
self.assertRaises(TypeError, writer.writerows, None)
`
338
356
`rows = [['a\nb','b'],['c','x\r\nd']]
`
339
357
`writer.writerows(rows)
`
340
358
`fileobj.seek(0)
`