[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):