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)

`