[Python-checkins] python/dist/src/Lib/test test_csv.py,1.11,1.12

montanaro at users.sourceforge.net montanaro at users.sourceforge.net
Sat Jun 5 13:03:22 EDT 2004


Update of /cvsroot/python/python/dist/src/Lib/test
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31297

Modified Files:
	test_csv.py 
Log Message:
Rewrote to use temporary files instead of StringIO objects in most places.
Goal is to work in the direction of universal newline support.


Index: test_csv.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_csv.py,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** test_csv.py	3 Oct 2003 14:03:01 -0000	1.11
--- test_csv.py	5 Jun 2004 17:03:20 -0000	1.12
***************
*** 4,9 ****
--- 4,11 ----
  
  import sys
+ import os
  import unittest
  from StringIO import StringIO
+ import tempfile
  import csv
  import gc
***************
*** 56,64 ****
  
      def _write_test(self, fields, expect, **kwargs):
!         fileobj = StringIO()
!         writer = csv.writer(fileobj, **kwargs)
!         writer.writerow(fields)
!         self.assertEqual(fileobj.getvalue(),
!                          expect + writer.dialect.lineterminator)
  
      def test_write_arg_valid(self):
--- 58,72 ----
  
      def _write_test(self, fields, expect, **kwargs):
!         fd, name = tempfile.mkstemp()
!         fileobj = os.fdopen(fd, "w+b")
!         try:
!             writer = csv.writer(fileobj, **kwargs)
!             writer.writerow(fields)
!             fileobj.seek(0)
!             self.assertEqual(fileobj.read(),
!                              expect + writer.dialect.lineterminator)
!         finally:
!             fileobj.close()
!             os.unlink(name)
  
      def test_write_arg_valid(self):
***************
*** 115,124 ****
          writer = csv.writer(BrokenFile())
          self.assertRaises(IOError, writer.writerows, [['a']])
!         fileobj = StringIO()
!         writer = csv.writer(fileobj)
!         self.assertRaises(TypeError, writer.writerows, None)
!         writer.writerows([['a','b'],['c','d']])
!         self.assertEqual(fileobj.getvalue(), "a,b\r\nc,d\r\n")
! 
      def _read_test(self, input, expect, **kwargs):
          reader = csv.reader(input, **kwargs)
--- 123,138 ----
          writer = csv.writer(BrokenFile())
          self.assertRaises(IOError, writer.writerows, [['a']])
!         fd, name = tempfile.mkstemp()
!         fileobj = os.fdopen(fd, "w+b")
!         try:
!             writer = csv.writer(fileobj)
!             self.assertRaises(TypeError, writer.writerows, None)
!             writer.writerows([['a','b'],['c','d']])
!             fileobj.seek(0)
!             self.assertEqual(fileobj.read(), "a,b\r\nc,d\r\n")
!         finally:
!             fileobj.close()
!             os.unlink(name)
!             
      def _read_test(self, input, expect, **kwargs):
          reader = csv.reader(input, **kwargs)
***************
*** 202,210 ****
              escapechar = "\\"
  
!         s = StringIO("abc def\nc1ccccc1 benzene\n")
!         rdr = csv.reader(s, dialect=space())
!         self.assertEqual(rdr.next(), ["abc", "def"])
!         self.assertEqual(rdr.next(), ["c1ccccc1", "benzene"])
! 
      def test_dialect_apply(self):
          class testA(csv.excel):
--- 216,231 ----
              escapechar = "\\"
  
!         fd, name = tempfile.mkstemp()
!         fileobj = os.fdopen(fd, "w+b")
!         try:
!             fileobj.write("abc def\nc1ccccc1 benzene\n")
!             fileobj.seek(0)
!             rdr = csv.reader(fileobj, dialect=space())
!             self.assertEqual(rdr.next(), ["abc", "def"])
!             self.assertEqual(rdr.next(), ["c1ccccc1", "benzene"])
!         finally:
!             fileobj.close()
!             os.unlink(name)
!             
      def test_dialect_apply(self):
          class testA(csv.excel):
***************
*** 217,244 ****
          csv.register_dialect('testC', testC)
          try:
!             fileobj = StringIO()
!             writer = csv.writer(fileobj)
!             writer.writerow([1,2,3])
!             self.assertEqual(fileobj.getvalue(), "1,2,3\r\n")
  
!             fileobj = StringIO()
!             writer = csv.writer(fileobj, testA)
!             writer.writerow([1,2,3])
!             self.assertEqual(fileobj.getvalue(), "1\t2\t3\r\n")
  
!             fileobj = StringIO()
!             writer = csv.writer(fileobj, dialect=testB())
!             writer.writerow([1,2,3])
!             self.assertEqual(fileobj.getvalue(), "1:2:3\r\n")
  
!             fileobj = StringIO()
!             writer = csv.writer(fileobj, dialect='testC')
!             writer.writerow([1,2,3])
!             self.assertEqual(fileobj.getvalue(), "1|2|3\r\n")
  
-             fileobj = StringIO()
-             writer = csv.writer(fileobj, dialect=testA, delimiter=';')
-             writer.writerow([1,2,3])
-             self.assertEqual(fileobj.getvalue(), "1;2;3\r\n")
          finally:
              csv.unregister_dialect('testC')
--- 238,296 ----
          csv.register_dialect('testC', testC)
          try:
!             fd, name = tempfile.mkstemp()
!             fileobj = os.fdopen(fd, "w+b")
!             try:
!                 writer = csv.writer(fileobj)
!                 writer.writerow([1,2,3])
!                 fileobj.seek(0)
!                 self.assertEqual(fileobj.read(), "1,2,3\r\n")
!             finally:
!                 fileobj.close()
!                 os.unlink(name)
!                 
!             fd, name = tempfile.mkstemp()
!             fileobj = os.fdopen(fd, "w+b")
!             try:
!                 writer = csv.writer(fileobj, testA)
!                 writer.writerow([1,2,3])
!                 fileobj.seek(0)
!                 self.assertEqual(fileobj.read(), "1\t2\t3\r\n")
!             finally:
!                 fileobj.close()
!                 os.unlink(name)
  
!             fd, name = tempfile.mkstemp()
!             fileobj = os.fdopen(fd, "w+b")
!             try:
!                 writer = csv.writer(fileobj, dialect=testB())
!                 writer.writerow([1,2,3])
!                 fileobj.seek(0)
!                 self.assertEqual(fileobj.read(), "1:2:3\r\n")
!             finally:
!                 fileobj.close()
!                 os.unlink(name)
  
!             fd, name = tempfile.mkstemp()
!             fileobj = os.fdopen(fd, "w+b")
!             try:
!                 writer = csv.writer(fileobj, dialect='testC')
!                 writer.writerow([1,2,3])
!                 fileobj.seek(0)
!                 self.assertEqual(fileobj.read(), "1|2|3\r\n")
!             finally:
!                 fileobj.close()
!                 os.unlink(name)
  
!             fd, name = tempfile.mkstemp()
!             fileobj = os.fdopen(fd, "w+b")
!             try:
!                 writer = csv.writer(fileobj, dialect=testA, delimiter=';')
!                 writer.writerow([1,2,3])
!                 fileobj.seek(0)
!                 self.assertEqual(fileobj.read(), "1;2;3\r\n")
!             finally:
!                 fileobj.close()
!                 os.unlink(name)
  
          finally:
              csv.unregister_dialect('testC')
***************
*** 254,266 ****
  class TestCsvBase(unittest.TestCase):
      def readerAssertEqual(self, input, expected_result):
!         reader = csv.reader(StringIO(input), dialect = self.dialect)
!         fields = list(reader)
!         self.assertEqual(fields, expected_result)
  
      def writerAssertEqual(self, input, expected_result):
!         fileobj = StringIO()
!         writer = csv.writer(fileobj, dialect = self.dialect)
!         writer.writerows(input)
!         self.assertEqual(fileobj.getvalue(), expected_result)
  
  class TestDialectExcel(TestCsvBase):
--- 306,332 ----
  class TestCsvBase(unittest.TestCase):
      def readerAssertEqual(self, input, expected_result):
!         fd, name = tempfile.mkstemp()
!         fileobj = os.fdopen(fd, "w+b")
!         try:
!             fileobj.write(input)
!             fileobj.seek(0)
!             reader = csv.reader(fileobj, dialect = self.dialect)
!             fields = list(reader)
!             self.assertEqual(fields, expected_result)
!         finally:
!             fileobj.close()
!             os.unlink(name)
  
      def writerAssertEqual(self, input, expected_result):
!         fd, name = tempfile.mkstemp()
!         fileobj = os.fdopen(fd, "w+b")
!         try:
!             writer = csv.writer(fileobj, dialect = self.dialect)
!             writer.writerows(input)
!             fileobj.seek(0)
!             self.assertEqual(fileobj.read(), expected_result)
!         finally:
!             fileobj.close()
!             os.unlink(name)
  
  class TestDialectExcel(TestCsvBase):
***************
*** 387,394 ****
      ### "short" means there are fewer elements in the row than fieldnames
      def test_write_simple_dict(self):
!         fileobj = StringIO()
!         writer = csv.DictWriter(fileobj, fieldnames = ["f1", "f2", "f3"])
!         writer.writerow({"f1": 10, "f3": "abc"})
!         self.assertEqual(fileobj.getvalue(), "10,,abc\r\n")
  
      def test_write_no_fields(self):
--- 453,466 ----
      ### "short" means there are fewer elements in the row than fieldnames
      def test_write_simple_dict(self):
!         fd, name = tempfile.mkstemp()
!         fileobj = os.fdopen(fd, "w+b")
!         try:
!             writer = csv.DictWriter(fileobj, fieldnames = ["f1", "f2", "f3"])
!             writer.writerow({"f1": 10, "f3": "abc"})
!             fileobj.seek(0)
!             self.assertEqual(fileobj.read(), "10,,abc\r\n")
!         finally:
!             fileobj.close()
!             os.unlink(name)
  
      def test_write_no_fields(self):
***************
*** 397,435 ****
  
      def test_read_dict_fields(self):
!         reader = csv.DictReader(StringIO("1,2,abc\r\n"),
!                                 fieldnames=["f1", "f2", "f3"])
!         self.assertEqual(reader.next(), {"f1": '1', "f2": '2', "f3": 'abc'})
  
      def test_read_dict_no_fieldnames(self):
!         reader = csv.DictReader(StringIO("f1,f2,f3\r\n1,2,abc\r\n"))
!         self.assertEqual(reader.next(), {"f1": '1', "f2": '2', "f3": 'abc'})
  
      def test_read_long(self):
!         reader = csv.DictReader(StringIO("1,2,abc,4,5,6\r\n"),
!                                 fieldnames=["f1", "f2"])
!         self.assertEqual(reader.next(), {"f1": '1', "f2": '2',
!                                          None: ["abc", "4", "5", "6"]})
  
      def test_read_long_with_rest(self):
!         reader = csv.DictReader(StringIO("1,2,abc,4,5,6\r\n"),
!                                 fieldnames=["f1", "f2"], restkey="_rest")
!         self.assertEqual(reader.next(), {"f1": '1', "f2": '2',
!                                          "_rest": ["abc", "4", "5", "6"]})
  
      def test_read_long_with_rest_no_fieldnames(self):
!         reader = csv.DictReader(StringIO("f1,f2\r\n1,2,abc,4,5,6\r\n"),
!                                 restkey="_rest")
!         self.assertEqual(reader.next(), {"f1": '1', "f2": '2',
!                                          "_rest": ["abc", "4", "5", "6"]})
  
      def test_read_short(self):
!         reader = csv.DictReader(["1,2,abc,4,5,6\r\n","1,2,abc\r\n"],
!                                 fieldnames="1 2 3 4 5 6".split(),
!                                 restval="DEFAULT")
!         self.assertEqual(reader.next(), {"1": '1', "2": '2', "3": 'abc',
!                                          "4": '4', "5": '5', "6": '6'})
!         self.assertEqual(reader.next(), {"1": '1', "2": '2', "3": 'abc',
!                                          "4": 'DEFAULT', "5": 'DEFAULT',
!                                          "6": 'DEFAULT'})
  
      def test_read_multi(self):
--- 469,554 ----
  
      def test_read_dict_fields(self):
!         fd, name = tempfile.mkstemp()
!         fileobj = os.fdopen(fd, "w+b")
!         try:
!             fileobj.write("1,2,abc\r\n")
!             fileobj.seek(0)
!             reader = csv.DictReader(fileobj,
!                                     fieldnames=["f1", "f2", "f3"])
!             self.assertEqual(reader.next(), {"f1": '1', "f2": '2', "f3": 'abc'})
!         finally:
!             fileobj.close()
!             os.unlink(name)
  
      def test_read_dict_no_fieldnames(self):
!         fd, name = tempfile.mkstemp()
!         fileobj = os.fdopen(fd, "w+b")
!         try:
!             fileobj.write("f1,f2,f3\r\n1,2,abc\r\n")
!             fileobj.seek(0)
!             reader = csv.DictReader(fileobj)
!             self.assertEqual(reader.next(), {"f1": '1', "f2": '2', "f3": 'abc'})
!         finally:
!             fileobj.close()
!             os.unlink(name)
  
      def test_read_long(self):
!         fd, name = tempfile.mkstemp()
!         fileobj = os.fdopen(fd, "w+b")
!         try:
!             fileobj.write("1,2,abc,4,5,6\r\n")
!             fileobj.seek(0)
!             reader = csv.DictReader(fileobj,
!                                     fieldnames=["f1", "f2"])
!             self.assertEqual(reader.next(), {"f1": '1', "f2": '2',
!                                              None: ["abc", "4", "5", "6"]})
!         finally:
!             fileobj.close()
!             os.unlink(name)
  
      def test_read_long_with_rest(self):
!         fd, name = tempfile.mkstemp()
!         fileobj = os.fdopen(fd, "w+b")
!         try:
!             fileobj.write("1,2,abc,4,5,6\r\n")
!             fileobj.seek(0)
!             reader = csv.DictReader(fileobj,
!                                     fieldnames=["f1", "f2"], restkey="_rest")
!             self.assertEqual(reader.next(), {"f1": '1', "f2": '2',
!                                              "_rest": ["abc", "4", "5", "6"]})
!         finally:
!             fileobj.close()
!             os.unlink(name)
  
      def test_read_long_with_rest_no_fieldnames(self):
!         fd, name = tempfile.mkstemp()
!         fileobj = os.fdopen(fd, "w+b")
!         try:
!             fileobj.write("f1,f2\r\n1,2,abc,4,5,6\r\n")
!             fileobj.seek(0)
!             reader = csv.DictReader(fileobj, restkey="_rest")
!             self.assertEqual(reader.next(), {"f1": '1', "f2": '2',
!                                              "_rest": ["abc", "4", "5", "6"]})
!         finally:
!             fileobj.close()
!             os.unlink(name)
  
      def test_read_short(self):
!         fd, name = tempfile.mkstemp()
!         fileobj = os.fdopen(fd, "w+b")
!         try:
!             fileobj.write("1,2,abc,4,5,6\r\n1,2,abc\r\n")
!             fileobj.seek(0)
!             reader = csv.DictReader(fileobj,
!                                     fieldnames="1 2 3 4 5 6".split(),
!                                     restval="DEFAULT")
!             self.assertEqual(reader.next(), {"1": '1', "2": '2', "3": 'abc',
!                                              "4": '4', "5": '5', "6": '6'})
!             self.assertEqual(reader.next(), {"1": '1', "2": '2', "3": 'abc',
!                                              "4": 'DEFAULT', "5": 'DEFAULT',
!                                              "6": 'DEFAULT'})
!         finally:
!             fileobj.close()
!             os.unlink(name)
  
      def test_read_multi(self):
***************
*** 469,477 ****
          contents = [(20-i) for i in range(20)]
          a = array.array('i', contents)
!         fileobj = StringIO()
!         writer = csv.writer(fileobj, dialect="excel")
!         writer.writerow(a)
!         expected = ",".join([str(i) for i in a])+"\r\n"
!         self.assertEqual(fileobj.getvalue(), expected)
  
      def test_double_write(self):
--- 588,603 ----
          contents = [(20-i) for i in range(20)]
          a = array.array('i', contents)
! 
!         fd, name = tempfile.mkstemp()
!         fileobj = os.fdopen(fd, "w+b")
!         try:
!             writer = csv.writer(fileobj, dialect="excel")
!             writer.writerow(a)
!             expected = ",".join([str(i) for i in a])+"\r\n"
!             fileobj.seek(0)
!             self.assertEqual(fileobj.read(), expected)
!         finally:
!             fileobj.close()
!             os.unlink(name)
  
      def test_double_write(self):
***************
*** 479,487 ****
          contents = [(20-i)*0.1 for i in range(20)]
          a = array.array('d', contents)
!         fileobj = StringIO()
!         writer = csv.writer(fileobj, dialect="excel")
!         writer.writerow(a)
!         expected = ",".join([str(i) for i in a])+"\r\n"
!         self.assertEqual(fileobj.getvalue(), expected)
  
      def test_float_write(self):
--- 605,619 ----
          contents = [(20-i)*0.1 for i in range(20)]
          a = array.array('d', contents)
!         fd, name = tempfile.mkstemp()
!         fileobj = os.fdopen(fd, "w+b")
!         try:
!             writer = csv.writer(fileobj, dialect="excel")
!             writer.writerow(a)
!             expected = ",".join([str(i) for i in a])+"\r\n"
!             fileobj.seek(0)
!             self.assertEqual(fileobj.read(), expected)
!         finally:
!             fileobj.close()
!             os.unlink(name)
  
      def test_float_write(self):
***************
*** 489,506 ****
          contents = [(20-i)*0.1 for i in range(20)]
          a = array.array('f', contents)
!         fileobj = StringIO()
!         writer = csv.writer(fileobj, dialect="excel")
!         writer.writerow(a)
!         expected = ",".join([str(i) for i in a])+"\r\n"
!         self.assertEqual(fileobj.getvalue(), expected)
  
      def test_char_write(self):
          import array, string
          a = array.array('c', string.letters)
!         fileobj = StringIO()
!         writer = csv.writer(fileobj, dialect="excel")
!         writer.writerow(a)
!         expected = ",".join(a)+"\r\n"
!         self.assertEqual(fileobj.getvalue(), expected)
  
  class TestDialectValidity(unittest.TestCase):
--- 621,650 ----
          contents = [(20-i)*0.1 for i in range(20)]
          a = array.array('f', contents)
!         fd, name = tempfile.mkstemp()
!         fileobj = os.fdopen(fd, "w+b")
!         try:
!             writer = csv.writer(fileobj, dialect="excel")
!             writer.writerow(a)
!             expected = ",".join([str(i) for i in a])+"\r\n"
!             fileobj.seek(0)
!             self.assertEqual(fileobj.read(), expected)
!         finally:
!             fileobj.close()
!             os.unlink(name)
  
      def test_char_write(self):
          import array, string
          a = array.array('c', string.letters)
!         fd, name = tempfile.mkstemp()
!         fileobj = os.fdopen(fd, "w+b")
!         try:
!             writer = csv.writer(fileobj, dialect="excel")
!             writer.writerow(a)
!             expected = ",".join(a)+"\r\n"
!             fileobj.seek(0)
!             self.assertEqual(fileobj.read(), expected)
!         finally:
!             fileobj.close()
!             os.unlink(name)
  
  class TestDialectValidity(unittest.TestCase):
***************
*** 697,717 ****
  
  # commented out for now - csv module doesn't yet support Unicode
! if 0:
!     from StringIO import StringIO
!     import csv
! 
!     class TestUnicode(unittest.TestCase):
!         def test_unicode_read(self):
!             import codecs
!             f = codecs.EncodedFile(StringIO("Martin von Löwis,"
!                                             "Marc André Lemburg,"
!                                             "Guido van Rossum,"
!                                             "François Pinard\r\n"),
!                                    data_encoding='iso-8859-1')
!             reader = csv.reader(f)
!             self.assertEqual(list(reader), [[u"Martin von Löwis",
!                                              u"Marc André Lemburg",
!                                              u"Guido van Rossum",
!                                              u"François Pinardn"]])
  
  def test_main():
--- 841,857 ----
  
  # commented out for now - csv module doesn't yet support Unicode
! ## class TestUnicode(unittest.TestCase):
! ##     def test_unicode_read(self):
! ##         import codecs
! ##         f = codecs.EncodedFile(StringIO("Martin von Löwis,"
! ##                                         "Marc André Lemburg,"
! ##                                         "Guido van Rossum,"
! ##                                         "François Pinard\r\n"),
! ##                                data_encoding='iso-8859-1')
! ##         reader = csv.reader(f)
! ##         self.assertEqual(list(reader), [[u"Martin von Löwis",
! ##                                          u"Marc André Lemburg",
! ##                                          u"Guido van Rossum",
! ##                                          u"François Pinardn"]])
  
  def test_main():




More information about the Python-checkins mailing list