Ignore:
Timestamp:
Mar 19, 2014, 11:31:01 PM (11 years ago)
Author:
dmik
Message:

python: Merge vendor 2.7.6 to trunk.

Location:
python/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • python/trunk

  • python/trunk/Lib/test/test_csv.py

    r2 r391  
    1010import csv
    1111import gc
     12import io
    1213from test import test_support
    1314
     
    167168        self._write_test(['a',1,'p,q'], '"a","1","p,q"',
    168169                         quoting = csv.QUOTE_ALL)
     170        self._write_test(['a\nb',1], '"a\nb","1"',
     171                         quoting = csv.QUOTE_ALL)
    169172
    170173    def test_write_escape(self):
     
    205208            os.unlink(name)
    206209
     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
    207222    def _read_test(self, input, expect, **kwargs):
    208223        reader = csv.reader(input, **kwargs)
     
    229244        self.assertRaises(csv.Error, self._read_test, ['a,b\r\nc,d'], [])
    230245
     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
    231255    def test_read_escape(self):
    232256        self._read_test(['a,\\b,c'], [['a', 'b', 'c']], escapechar='\\')
     
    246270        self._read_test([',3,"5",7.3, 9'], [['', 3, '5', 7.3, 9]],
    247271                        quoting=csv.QUOTE_NONNUMERIC)
     272        self._read_test(['"a\nb", 7'], [['a\nb', ' 7']])
    248273        self.assertRaises(ValueError, self._read_test,
    249274                          ['abc,3'], [[]],
     
    282307            self.assertRaises(StopIteration, r.next)
    283308            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)
    284324
    285325class TestDialectRegistry(unittest.TestCase):
     
    308348        expected_dialects.sort()
    309349        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)
    317354
    318355    def test_register_kwargs(self):
    319356        name = 'fedcba'
    320357        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)))
    326361
    327362    def test_incomplete_dialect(self):
     
    578613    def test_write_simple_dict(self):
    579614        fd, name = tempfile.mkstemp()
    580         fileobj = os.fdopen(fd, "w+b")
     615        fileobj = io.open(fd, 'w+b')
    581616        try:
    582617            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")
    583621            writer.writerow({"f1": 10, "f3": "abc"})
    584622            fileobj.seek(0)
     623            fileobj.readline() # header
    585624            self.assertEqual(fileobj.read(), "10,,abc\r\n")
    586625        finally:
     
    767806            writer = csv.writer(fileobj, dialect="excel")
    768807            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"
    770809            fileobj.seek(0)
    771810            self.assertEqual(fileobj.read(), expected)
     
    783822            writer = csv.writer(fileobj, dialect="excel")
    784823            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"
    786825            fileobj.seek(0)
    787826            self.assertEqual(fileobj.read(), expected)
     
    874913'Shark City':'Glendale Heights':'IL':'12/28/02':'Prezence'
    875914'Tommy''s Place':'Blue Island':'IL':'12/28/02':'Blue Sunday/White Crow'
    876 'Stonecutters Seafood and Chop House':'Lemont':'IL':'12/19/02':'Week Back'
     915'Stonecutters ''Seafood'' and Chop House':'Lemont':'IL':'12/19/02':'Week Back'
    877916"""
    878     header = '''\
     917    header1 = '''\
    879918"venue","city","state","date","performers"
    880919'''
     
    895934    sample7 = "'a'|'b'|'c'\r\n'd'|e|f\r\n"
    896935
     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 = """\
     942Harry's+ Arlington Heights+ IL+ 2/1/03+ Kimi Hayes
     943Shark City+ Glendale Heights+ IL+ 12/28/02+ Prezence
     944Tommy's Place+ Blue Island+ IL+ 12/28/02+ Blue Sunday/White Crow
     945Stonecutters 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
    897954    def test_has_header(self):
    898955        sniffer = csv.Sniffer()
    899956        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)
    901965
    902966    def test_sniff(self):
     
    918982        # I think that any character could have been 'guessed' as the
    919983        # delimiter, depending on dictionary order
    920         self.assert_(dialect.delimiter in self.sample3)
     984        self.assertIn(dialect.delimiter, self.sample3)
    921985        dialect = sniffer.sniff(self.sample3, delimiters="?,")
    922986        self.assertEqual(dialect.delimiter, "?")
     
    932996        self.assertEqual(dialect.delimiter, "|")
    933997        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)
    9341016
    9351017if not hasattr(sys, "gettotalrefcount"):
Note: See TracChangeset for help on using the changeset viewer.