Changeset 391 for python/trunk/Lib/test/test_csv.py
- Timestamp:
- Mar 19, 2014, 11:31:01 PM (11 years ago)
- Location:
- python/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
python/trunk
-
Property svn:mergeinfo
set to
/python/vendor/Python-2.7.6 merged eligible /python/vendor/current merged eligible
-
Property svn:mergeinfo
set to
-
python/trunk/Lib/test/test_csv.py
r2 r391 10 10 import csv 11 11 import gc 12 import io 12 13 from test import test_support 13 14 … … 167 168 self._write_test(['a',1,'p,q'], '"a","1","p,q"', 168 169 quoting = csv.QUOTE_ALL) 170 self._write_test(['a\nb',1], '"a\nb","1"', 171 quoting = csv.QUOTE_ALL) 169 172 170 173 def test_write_escape(self): … … 205 208 os.unlink(name) 206 209 210 def test_write_float(self): 211 # Issue 13573: loss of precision because csv.writer 212 # uses str() for floats instead of repr() 213 orig_row = [1.234567890123, 1.0/7.0, 'abc'] 214 f = StringIO() 215 c = csv.writer(f, quoting=csv.QUOTE_NONNUMERIC) 216 c.writerow(orig_row) 217 f.seek(0) 218 c = csv.reader(f, quoting=csv.QUOTE_NONNUMERIC) 219 new_row = next(c) 220 self.assertEqual(orig_row, new_row) 221 207 222 def _read_test(self, input, expect, **kwargs): 208 223 reader = csv.reader(input, **kwargs) … … 229 244 self.assertRaises(csv.Error, self._read_test, ['a,b\r\nc,d'], []) 230 245 246 def test_read_eof(self): 247 self._read_test(['a,"'], [['a', '']]) 248 self._read_test(['"a'], [['a']]) 249 self._read_test(['^'], [['\n']], escapechar='^') 250 self.assertRaises(csv.Error, self._read_test, ['a,"'], [], strict=True) 251 self.assertRaises(csv.Error, self._read_test, ['"a'], [], strict=True) 252 self.assertRaises(csv.Error, self._read_test, 253 ['^'], [], escapechar='^', strict=True) 254 231 255 def test_read_escape(self): 232 256 self._read_test(['a,\\b,c'], [['a', 'b', 'c']], escapechar='\\') … … 246 270 self._read_test([',3,"5",7.3, 9'], [['', 3, '5', 7.3, 9]], 247 271 quoting=csv.QUOTE_NONNUMERIC) 272 self._read_test(['"a\nb", 7'], [['a\nb', ' 7']]) 248 273 self.assertRaises(ValueError, self._read_test, 249 274 ['abc,3'], [[]], … … 282 307 self.assertRaises(StopIteration, r.next) 283 308 self.assertEqual(r.line_num, 3) 309 310 def test_roundtrip_quoteed_newlines(self): 311 fd, name = tempfile.mkstemp() 312 fileobj = os.fdopen(fd, "w+b") 313 try: 314 writer = csv.writer(fileobj) 315 self.assertRaises(TypeError, writer.writerows, None) 316 rows = [['a\nb','b'],['c','x\r\nd']] 317 writer.writerows(rows) 318 fileobj.seek(0) 319 for i, row in enumerate(csv.reader(fileobj)): 320 self.assertEqual(row, rows[i]) 321 finally: 322 fileobj.close() 323 os.unlink(name) 284 324 285 325 class TestDialectRegistry(unittest.TestCase): … … 308 348 expected_dialects.sort() 309 349 csv.register_dialect(name, myexceltsv) 310 try: 311 self.failUnless(csv.get_dialect(name).delimiter, '\t') 312 got_dialects = csv.list_dialects() 313 got_dialects.sort() 314 self.assertEqual(expected_dialects, got_dialects) 315 finally: 316 csv.unregister_dialect(name) 350 self.addCleanup(csv.unregister_dialect, name) 351 self.assertEqual(csv.get_dialect(name).delimiter, '\t') 352 got_dialects = sorted(csv.list_dialects()) 353 self.assertEqual(expected_dialects, got_dialects) 317 354 318 355 def test_register_kwargs(self): 319 356 name = 'fedcba' 320 357 csv.register_dialect(name, delimiter=';') 321 try: 322 self.failUnless(csv.get_dialect(name).delimiter, '\t') 323 self.failUnless(list(csv.reader('X;Y;Z', name)), ['X', 'Y', 'Z']) 324 finally: 325 csv.unregister_dialect(name) 358 self.addCleanup(csv.unregister_dialect, name) 359 self.assertEqual(csv.get_dialect(name).delimiter, ';') 360 self.assertEqual([['X', 'Y', 'Z']], list(csv.reader(['X;Y;Z'], name))) 326 361 327 362 def test_incomplete_dialect(self): … … 578 613 def test_write_simple_dict(self): 579 614 fd, name = tempfile.mkstemp() 580 fileobj = os.fdopen(fd, "w+b")615 fileobj = io.open(fd, 'w+b') 581 616 try: 582 617 writer = csv.DictWriter(fileobj, fieldnames = ["f1", "f2", "f3"]) 618 writer.writeheader() 619 fileobj.seek(0) 620 self.assertEqual(fileobj.readline(), "f1,f2,f3\r\n") 583 621 writer.writerow({"f1": 10, "f3": "abc"}) 584 622 fileobj.seek(0) 623 fileobj.readline() # header 585 624 self.assertEqual(fileobj.read(), "10,,abc\r\n") 586 625 finally: … … 767 806 writer = csv.writer(fileobj, dialect="excel") 768 807 writer.writerow(a) 769 expected = ",".join([ str(i) for i in a])+"\r\n"808 expected = ",".join([repr(i) for i in a])+"\r\n" 770 809 fileobj.seek(0) 771 810 self.assertEqual(fileobj.read(), expected) … … 783 822 writer = csv.writer(fileobj, dialect="excel") 784 823 writer.writerow(a) 785 expected = ",".join([ str(i) for i in a])+"\r\n"824 expected = ",".join([repr(i) for i in a])+"\r\n" 786 825 fileobj.seek(0) 787 826 self.assertEqual(fileobj.read(), expected) … … 874 913 'Shark City':'Glendale Heights':'IL':'12/28/02':'Prezence' 875 914 'Tommy''s Place':'Blue Island':'IL':'12/28/02':'Blue Sunday/White Crow' 876 'Stonecutters Seafoodand Chop House':'Lemont':'IL':'12/19/02':'Week Back'915 'Stonecutters ''Seafood'' and Chop House':'Lemont':'IL':'12/19/02':'Week Back' 877 916 """ 878 header = '''\917 header1 = '''\ 879 918 "venue","city","state","date","performers" 880 919 ''' … … 895 934 sample7 = "'a'|'b'|'c'\r\n'd'|e|f\r\n" 896 935 936 # Issue 18155: Use a delimiter that is a special char to regex: 937 938 header2 = '''\ 939 "venue"+"city"+"state"+"date"+"performers" 940 ''' 941 sample8 = """\ 942 Harry's+ Arlington Heights+ IL+ 2/1/03+ Kimi Hayes 943 Shark City+ Glendale Heights+ IL+ 12/28/02+ Prezence 944 Tommy's Place+ Blue Island+ IL+ 12/28/02+ Blue Sunday/White Crow 945 Stonecutters Seafood and Chop House+ Lemont+ IL+ 12/19/02+ Week Back 946 """ 947 sample9 = """\ 948 'Harry''s'+ Arlington Heights'+ 'IL'+ '2/1/03'+ 'Kimi Hayes' 949 'Shark City'+ Glendale Heights'+' IL'+ '12/28/02'+ 'Prezence' 950 'Tommy''s Place'+ Blue Island'+ 'IL'+ '12/28/02'+ 'Blue Sunday/White Crow' 951 'Stonecutters ''Seafood'' and Chop House'+ 'Lemont'+ 'IL'+ '12/19/02'+ 'Week Back' 952 """ 953 897 954 def test_has_header(self): 898 955 sniffer = csv.Sniffer() 899 956 self.assertEqual(sniffer.has_header(self.sample1), False) 900 self.assertEqual(sniffer.has_header(self.header+self.sample1), True) 957 self.assertEqual(sniffer.has_header(self.header1 + self.sample1), 958 True) 959 960 def test_has_header_regex_special_delimiter(self): 961 sniffer = csv.Sniffer() 962 self.assertEqual(sniffer.has_header(self.sample8), False) 963 self.assertEqual(sniffer.has_header(self.header2 + self.sample8), 964 True) 901 965 902 966 def test_sniff(self): … … 918 982 # I think that any character could have been 'guessed' as the 919 983 # delimiter, depending on dictionary order 920 self.assert _(dialect.delimiter inself.sample3)984 self.assertIn(dialect.delimiter, self.sample3) 921 985 dialect = sniffer.sniff(self.sample3, delimiters="?,") 922 986 self.assertEqual(dialect.delimiter, "?") … … 932 996 self.assertEqual(dialect.delimiter, "|") 933 997 self.assertEqual(dialect.quotechar, "'") 998 dialect = sniffer.sniff(self.sample8) 999 self.assertEqual(dialect.delimiter, '+') 1000 dialect = sniffer.sniff(self.sample9) 1001 self.assertEqual(dialect.delimiter, '+') 1002 self.assertEqual(dialect.quotechar, "'") 1003 1004 def test_doublequote(self): 1005 sniffer = csv.Sniffer() 1006 dialect = sniffer.sniff(self.header1) 1007 self.assertFalse(dialect.doublequote) 1008 dialect = sniffer.sniff(self.header2) 1009 self.assertFalse(dialect.doublequote) 1010 dialect = sniffer.sniff(self.sample2) 1011 self.assertTrue(dialect.doublequote) 1012 dialect = sniffer.sniff(self.sample8) 1013 self.assertFalse(dialect.doublequote) 1014 dialect = sniffer.sniff(self.sample9) 1015 self.assertTrue(dialect.doublequote) 934 1016 935 1017 if not hasattr(sys, "gettotalrefcount"):
Note:
See TracChangeset
for help on using the changeset viewer.