[Python-checkins] cpython (merge 3.4 -> default): Check that failed writerow() doesn't produce change a file.

serhiy.storchaka python-checkins at python.org
Wed Mar 25 18:17:37 CET 2015


https://hg.python.org/cpython/rev/0bbf121c48c6
changeset:   95206:0bbf121c48c6
parent:      95203:16e6515c9476
parent:      95205:9be2405385ec
user:        Serhiy Storchaka <storchaka at gmail.com>
date:        Wed Mar 25 19:16:54 2015 +0200
summary:
  Check that failed writerow() doesn't produce change a file.

files:
  Lib/test/test_csv.py |  30 ++++++++++++++++--------------
  1 files changed, 16 insertions(+), 14 deletions(-)


diff --git a/Lib/test/test_csv.py b/Lib/test/test_csv.py
--- a/Lib/test/test_csv.py
+++ b/Lib/test/test_csv.py
@@ -124,12 +124,19 @@
             self.assertEqual(fileobj.read(),
                              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):
-        self.assertRaises(csv.Error, self._write_test, None, '')
+        self._write_error_test(csv.Error, None)
         self._write_test((), '')
         self._write_test([None], '""')
-        self.assertRaises(csv.Error, self._write_test,
-                          [None], None, quoting = csv.QUOTE_NONE)
+        self._write_error_test(csv.Error, [None], quoting = csv.QUOTE_NONE)
         # Check that exceptions are passed up the chain
         class BadList:
             def __len__(self):
@@ -137,11 +144,11 @@
             def __getitem__(self, i):
                 if i > 2:
                     raise OSError
-        self.assertRaises(OSError, self._write_test, BadList(), '')
+        self._write_error_test(OSError, BadList())
         class BadItem:
             def __str__(self):
                 raise OSError
-        self.assertRaises(OSError, self._write_test, [BadItem()], '')
+        self._write_error_test(OSError, [BadItem()])
 
     def test_write_bigfield(self):
         # This exercises the buffer realloc functionality
@@ -151,10 +158,8 @@
 
     def test_write_quoting(self):
         self._write_test(['a',1,'p,q'], 'a,1,"p,q"')
-        self.assertRaises(csv.Error,
-                          self._write_test,
-                          ['a',1,'p,q'], 'a,1,p,q',
-                          quoting = csv.QUOTE_NONE)
+        self._write_error_test(csv.Error, ['a',1,'p,q'],
+                               quoting = csv.QUOTE_NONE)
         self._write_test(['a',1,'p,q'], 'a,1,"p,q"',
                          quoting = csv.QUOTE_MINIMAL)
         self._write_test(['a',1,'p,q'], '"a",1,"p,q"',
@@ -167,10 +172,8 @@
     def test_write_escape(self):
         self._write_test(['a',1,'p,q'], 'a,1,"p,q"',
                          escapechar='\\')
-        self.assertRaises(csv.Error,
-                          self._write_test,
-                          ['a',1,'p,"q"'], 'a,1,"p,\\"q\\""',
-                          escapechar=None, doublequote=False)
+        self._write_error_test(csv.Error, ['a',1,'p,"q"'],
+                               escapechar=None, doublequote=False)
         self._write_test(['a',1,'p,"q"'], 'a,1,"p,\\"q\\""',
                          escapechar='\\', doublequote = False)
         self._write_test(['"'], '""""',
@@ -1073,7 +1076,6 @@
             self.assertEqual(fileobj.read(), expected)
 
 
-
 def test_main():
     mod = sys.modules[__name__]
     support.run_unittest(

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list