Check that failed writerow() doesn't produce change a file.
This commit is contained in:
commit
7c316a181a
|
@ -124,12 +124,19 @@ class Test_Csv(unittest.TestCase):
|
||||||
self.assertEqual(fileobj.read(),
|
self.assertEqual(fileobj.read(),
|
||||||
expect + writer.dialect.lineterminator)
|
expect + writer.dialect.lineterminator)
|
||||||
|
|
||||||
|
def _write_error_test(self, exc, fields, **kwargs):
|
||||||
|
with TemporaryFile("w+", newline='') as fileobj:
|
||||||
|
writer = csv.writer(fileobj, **kwargs)
|
||||||
|
with self.assertRaises(exc):
|
||||||
|
writer.writerow(fields)
|
||||||
|
fileobj.seek(0)
|
||||||
|
self.assertEqual(fileobj.read(), '')
|
||||||
|
|
||||||
def test_write_arg_valid(self):
|
def test_write_arg_valid(self):
|
||||||
self.assertRaises(csv.Error, self._write_test, None, '')
|
self._write_error_test(csv.Error, None)
|
||||||
self._write_test((), '')
|
self._write_test((), '')
|
||||||
self._write_test([None], '""')
|
self._write_test([None], '""')
|
||||||
self.assertRaises(csv.Error, self._write_test,
|
self._write_error_test(csv.Error, [None], quoting = csv.QUOTE_NONE)
|
||||||
[None], None, quoting = csv.QUOTE_NONE)
|
|
||||||
# Check that exceptions are passed up the chain
|
# Check that exceptions are passed up the chain
|
||||||
class BadList:
|
class BadList:
|
||||||
def __len__(self):
|
def __len__(self):
|
||||||
|
@ -137,11 +144,11 @@ class Test_Csv(unittest.TestCase):
|
||||||
def __getitem__(self, i):
|
def __getitem__(self, i):
|
||||||
if i > 2:
|
if i > 2:
|
||||||
raise OSError
|
raise OSError
|
||||||
self.assertRaises(OSError, self._write_test, BadList(), '')
|
self._write_error_test(OSError, BadList())
|
||||||
class BadItem:
|
class BadItem:
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
raise OSError
|
raise OSError
|
||||||
self.assertRaises(OSError, self._write_test, [BadItem()], '')
|
self._write_error_test(OSError, [BadItem()])
|
||||||
|
|
||||||
def test_write_bigfield(self):
|
def test_write_bigfield(self):
|
||||||
# This exercises the buffer realloc functionality
|
# This exercises the buffer realloc functionality
|
||||||
|
@ -151,10 +158,8 @@ class Test_Csv(unittest.TestCase):
|
||||||
|
|
||||||
def test_write_quoting(self):
|
def test_write_quoting(self):
|
||||||
self._write_test(['a',1,'p,q'], 'a,1,"p,q"')
|
self._write_test(['a',1,'p,q'], 'a,1,"p,q"')
|
||||||
self.assertRaises(csv.Error,
|
self._write_error_test(csv.Error, ['a',1,'p,q'],
|
||||||
self._write_test,
|
quoting = csv.QUOTE_NONE)
|
||||||
['a',1,'p,q'], 'a,1,p,q',
|
|
||||||
quoting = csv.QUOTE_NONE)
|
|
||||||
self._write_test(['a',1,'p,q'], 'a,1,"p,q"',
|
self._write_test(['a',1,'p,q'], 'a,1,"p,q"',
|
||||||
quoting = csv.QUOTE_MINIMAL)
|
quoting = csv.QUOTE_MINIMAL)
|
||||||
self._write_test(['a',1,'p,q'], '"a",1,"p,q"',
|
self._write_test(['a',1,'p,q'], '"a",1,"p,q"',
|
||||||
|
@ -167,10 +172,8 @@ class Test_Csv(unittest.TestCase):
|
||||||
def test_write_escape(self):
|
def test_write_escape(self):
|
||||||
self._write_test(['a',1,'p,q'], 'a,1,"p,q"',
|
self._write_test(['a',1,'p,q'], 'a,1,"p,q"',
|
||||||
escapechar='\\')
|
escapechar='\\')
|
||||||
self.assertRaises(csv.Error,
|
self._write_error_test(csv.Error, ['a',1,'p,"q"'],
|
||||||
self._write_test,
|
escapechar=None, doublequote=False)
|
||||||
['a',1,'p,"q"'], 'a,1,"p,\\"q\\""',
|
|
||||||
escapechar=None, doublequote=False)
|
|
||||||
self._write_test(['a',1,'p,"q"'], 'a,1,"p,\\"q\\""',
|
self._write_test(['a',1,'p,"q"'], 'a,1,"p,\\"q\\""',
|
||||||
escapechar='\\', doublequote = False)
|
escapechar='\\', doublequote = False)
|
||||||
self._write_test(['"'], '""""',
|
self._write_test(['"'], '""""',
|
||||||
|
@ -1073,7 +1076,6 @@ class TestUnicode(unittest.TestCase):
|
||||||
self.assertEqual(fileobj.read(), expected)
|
self.assertEqual(fileobj.read(), expected)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def test_main():
|
def test_main():
|
||||||
mod = sys.modules[__name__]
|
mod = sys.modules[__name__]
|
||||||
support.run_unittest(
|
support.run_unittest(
|
||||||
|
|
Loading…
Reference in New Issue