[Python-checkins] python/nondist/sandbox/csv/test test_csv.py,1.16,1.17

andrewmcnamara@users.sourceforge.net andrewmcnamara@users.sourceforge.net
Tue, 04 Feb 2003 19:21:42 -0800


Update of /cvsroot/python/python/nondist/sandbox/csv/test
In directory sc8-pr-cvs1:/tmp/cvs-serv25230/test

Modified Files:
	test_csv.py 
Log Message:
Added a bunch of tests to get better coverage of the underlying _csv module.


Index: test_csv.py
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/csv/test/test_csv.py,v
retrieving revision 1.16
retrieving revision 1.17
diff -C2 -d -r1.16 -r1.17
*** test_csv.py	5 Feb 2003 02:22:10 -0000	1.16
--- test_csv.py	5 Feb 2003 03:21:39 -0000	1.17
***************
*** 6,9 ****
--- 6,125 ----
  from StringIO import StringIO
  import csv
+ import _csv
+ 
+ class Test_Csv(unittest.TestCase):
+     """
+     Test the underlying C csv parser in ways that are not appropriate 
+     from the high level interface.
+     """
+     def test_init(self):
+         "test that the module returns a parser"
+         parser = _csv.parser()
+         self.failUnless(hasattr(parser, 'parse'))
+ 
+     def test_parameter_validation(self):
+         self.assertRaises(TypeError, _csv.parser, FlibbleWort = 0)
+         self.assertRaises(ValueError, _csv.parser, quoting = -1)
+         self.assertRaises(ValueError, _csv.parser, quoting = csv.QUOTE_NONE + 1)
+         self.assertRaises(TypeError, _csv.parser, delimiter = None)
+         self.assertRaises(TypeError, _csv.parser, skipinitialspace = None)
+ 
+     def test_parameter(self):
+         parser = _csv.parser(delimiter = "\t")
+         self.assertEqual(parser.delimiter, "\t")
+ 
+         parser = _csv.parser(quotechar = "'")
+         self.assertEqual(parser.quotechar, "'")
+ 
+         parser = _csv.parser(quoting = csv.QUOTE_NONE)
+         self.assertEqual(parser.quotechar, None)
+ 
+         parser = _csv.parser(quotechar=None,quoting=csv.QUOTE_ALL)
+         self.assertEqual(parser.quoting, csv.QUOTE_NONE)
+ 
+     def test_attr_validation(self):
+         parser = _csv.parser()
+         self.assertRaises(AttributeError, delattr, parser, 'quoting')
+         self.assertRaises(TypeError, setattr, parser, 'quoting', -1)
+         self.assertRaises(TypeError, setattr, parser, 'quoting', 
+                           csv.QUOTE_NONE + 1)
+         self.assertRaises(TypeError, setattr, parser, 'quotechar', 0)
+         self.assertRaises(TypeError, setattr, parser, 'escapechar', 0)
+         parser.quotechar=None
+         self.assertRaises(TypeError, setattr, parser, 'quoting', 1)
+         self.assertRaises(TypeError, setattr, parser, 'lineterminator', None)
+ 
+     def test_setattr(self):
+         parser = _csv.parser()
+         parser.delimiter = "\t"
+         self.assertEqual(parser.delimiter, "\t")
+ 
+         parser = _csv.parser()
+         parser.quotechar = "'"
+         self.assertEqual(parser.quotechar, "'")
+ 
+         parser = _csv.parser()
+         parser.quoting = csv.QUOTE_NONE
+         self.assertEqual(parser.quotechar, None)
+ 
+     def test_join_bigfield(self):
+         # This exercises the buffer realloc functionality
+         parser = _csv.parser()
+         bigstring = 'X' * 50000
+         result = parser.join([bigstring,bigstring])
+         self.assertEqual(result, '%s,%s%s' % \
+                          (bigstring, bigstring, parser.lineterminator))
+ 
+     def test_join_quoting(self):
+         parser = _csv.parser()
+         self.assertEqual(parser.join(['a','1','p,q']), 'a,1,"p,q"\r\n')
+         parser = _csv.parser(quoting = csv.QUOTE_NONE)
+         self.assertRaises(_csv.Error, parser.join, ['a','1','p,q'])
+         parser = _csv.parser(quoting = csv.QUOTE_MINIMAL)
+         self.assertEqual(parser.join(['a','1','p,q']), 'a,1,"p,q"\r\n')
+         parser = _csv.parser(quoting = csv.QUOTE_NONNUMERIC)
+         self.assertEqual(parser.join(['a','1','p,q']), '"a",1,"p,q"\r\n')
+         parser = _csv.parser(quoting = csv.QUOTE_ALL)
+         self.assertEqual(parser.join(['a','1','p,q']), '"a","1","p,q"\r\n')
+ 
+     def test_join_escape(self):
+         parser = _csv.parser(escapechar='\\')
+         self.assertEqual(parser.join(['a','1','p,q']), 'a,1,"p,q"\r\n')
+         parser.doublequote = 0
+ # FAIL - need to fix
+ #        self.assertEqual(parser.join(['a','1','p,"q"']), 'a,1,"p,\\"q"\r\n')
+         parser.quotechar = None
+         self.assertEqual(parser.join(['a','1','p,q']), 'a,1,p\\,q\r\n')
+ 
+     def test_parse(self):
+         parser = _csv.parser()
+         self.assertRaises(TypeError, parser.parse, None)
+         self.assertEqual(parser.parse(''), [])
+ 
+     def test_parse_eol(self):
+         parser = _csv.parser()
+         self.assertEqual(parser.parse('a,b'), ['a','b'])
+         self.assertEqual(parser.parse('a,b\n'), ['a','b'])
+         self.assertEqual(parser.parse('a,b\r\n'), ['a','b'])
+         self.assertEqual(parser.parse('a,b\r'), ['a','b'])
+         self.assertRaises(csv.Error, parser.parse, 'a,b\rc,d')
+         self.assertRaises(csv.Error, parser.parse, 'a,b\nc,d')
+         self.assertRaises(csv.Error, parser.parse, 'a,b\r\nc,d')
+ 
+     def test_parse_escape(self):
+         parser = _csv.parser(escapechar='\\')
+         self.assertEqual(parser.parse('a,\\b,c'), ['a', '\\b', 'c'])
+         self.assertEqual(parser.parse('a,b\\,c'), ['a', 'b,c'])
+         self.assertEqual(parser.parse('a,"b\\,c"'), ['a', 'b,c'])
+         self.assertEqual(parser.parse('a,"b,\\c"'), ['a', 'b,\\c'])
+         self.assertEqual(parser.parse('a,"b,c\\""'), ['a', 'b,c"'])
+         self.assertEqual(parser.parse('a,"b,c"\\'), ['a', 'b,c\\'])
+ 
+     def test_parse_bigfield(self):
+         # This exercises the buffer realloc functionality
+         parser = _csv.parser()
+         bigstring = 'X' * 50000
+         bigline = '%s,%s%s' % (bigstring, bigstring, parser.lineterminator)
+         self.assertEqual(parser.parse(bigline), [bigstring, bigstring])
  
  class TestCsvBase(unittest.TestCase):