Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(10)

Side by Side Diff: Lib/test/test_csv.py

Issue 18829: csv produces confusing error message when passed a non-string delimiter
Patch Set: Created 6 years, 6 months ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Lib/csv.py ('k') | Modules/_csv.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (C) 2001,2002 Python Software Foundation 1 # Copyright (C) 2001,2002 Python Software Foundation
2 # csv package unit tests 2 # csv package unit tests
3 3
4 import io 4 import io
5 import sys 5 import sys
6 import os 6 import os
7 import unittest 7 import unittest
8 from io import StringIO 8 from io import StringIO
9 from tempfile import TemporaryFile 9 from tempfile import TemporaryFile
10 import csv 10 import csv
11 import gc 11 import gc
12 from test import support 12 from test import support
13 13
14 class Test_Csv(unittest.TestCase): 14 class Test_Csv(unittest.TestCase):
15 """ 15 """
16 Test the underlying C csv parser in ways that are not appropriate 16 Test the underlying C csv parser in ways that are not appropriate
17 from the high level interface. Further tests of this nature are done 17 from the high level interface. Further tests of this nature are done
18 in TestDialectRegistry. 18 in TestDialectRegistry.
19 """ 19 """
20 def _test_arg_valid(self, ctor, arg): 20 def _test_arg_valid(self, ctor, arg):
21 self.assertRaises(TypeError, ctor) 21 self.assertRaises(TypeError, ctor)
22 self.assertRaises(TypeError, ctor, None) 22 self.assertRaises(TypeError, ctor, None)
23 self.assertRaises(TypeError, ctor, arg, bad_attr = 0) 23 self.assertRaises(TypeError, ctor, arg, bad_attr = 0)
24 self.assertRaises(TypeError, ctor, arg, delimiter = 0) 24 self.assertRaises(TypeError, ctor, arg, delimiter = 0)
25 self.assertRaises(TypeError, ctor, arg, delimiter = 'XX') 25 self.assertRaises(ValueError, ctor, arg, delimiter = 'XX')
26 self.assertRaises(csv.Error, ctor, arg, 'foo') 26 self.assertRaises(csv.Error, ctor, arg, 'foo')
27 self.assertRaises(TypeError, ctor, arg, delimiter=None) 27 self.assertRaises(TypeError, ctor, arg, delimiter=None)
28 self.assertRaises(TypeError, ctor, arg, delimiter=1) 28 self.assertRaises(TypeError, ctor, arg, delimiter=1)
29 self.assertRaises(TypeError, ctor, arg, quotechar=1) 29 self.assertRaises(TypeError, ctor, arg, quotechar=1)
30 self.assertRaises(TypeError, ctor, arg, lineterminator=None) 30 self.assertRaises(TypeError, ctor, arg, lineterminator=None)
31 self.assertRaises(TypeError, ctor, arg, lineterminator=1) 31 self.assertRaises(TypeError, ctor, arg, lineterminator=1)
32 self.assertRaises(TypeError, ctor, arg, quoting=None) 32 self.assertRaises(TypeError, ctor, arg, quoting=None)
33 self.assertRaises(TypeError, ctor, arg, 33 self.assertRaises(TypeError, ctor, arg,
34 quoting=csv.QUOTE_ALL, quotechar='') 34 quoting=csv.QUOTE_ALL, quotechar='')
35 self.assertRaises(TypeError, ctor, arg, 35 self.assertRaises(TypeError, ctor, arg,
(...skipping 701 matching lines...) Expand 10 before | Expand all | Expand 10 after
737 class TestDialectValidity(unittest.TestCase): 737 class TestDialectValidity(unittest.TestCase):
738 def test_quoting(self): 738 def test_quoting(self):
739 class mydialect(csv.Dialect): 739 class mydialect(csv.Dialect):
740 delimiter = ";" 740 delimiter = ";"
741 escapechar = '\\' 741 escapechar = '\\'
742 doublequote = False 742 doublequote = False
743 skipinitialspace = True 743 skipinitialspace = True
744 lineterminator = '\r\n' 744 lineterminator = '\r\n'
745 quoting = csv.QUOTE_NONE 745 quoting = csv.QUOTE_NONE
746 d = mydialect() 746 d = mydialect()
747 self.assertEqual(d.quoting, csv.QUOTE_NONE)
747 748
748 mydialect.quoting = None 749 mydialect.quoting = None
749 self.assertRaises(csv.Error, mydialect) 750 self.assertRaises(csv.Error, mydialect)
750 751
751 mydialect.doublequote = True 752 mydialect.doublequote = True
752 mydialect.quoting = csv.QUOTE_ALL 753 mydialect.quoting = csv.QUOTE_ALL
753 mydialect.quotechar = '"' 754 mydialect.quotechar = '"'
754 d = mydialect() 755 d = mydialect()
756 self.assertEqual(d.quoting, csv.QUOTE_ALL)
757 self.assertEqual(d.quotechar, '"')
758 self.assertTrue(d.doublequote)
755 759
756 mydialect.quotechar = "''" 760 mydialect.quotechar = "''"
757 self.assertRaises(csv.Error, mydialect) 761 with self.assertRaises(csv.Error) as cm:
762 mydialect()
763 self.assertEqual(str(cm.exception),
764 '"quotechar" must be an 1-character string')
758 765
759 mydialect.quotechar = 4 766 mydialect.quotechar = 4
760 self.assertRaises(csv.Error, mydialect) 767 with self.assertRaises(csv.Error) as cm:
768 mydialect()
769 self.assertEqual(str(cm.exception),
770 '"quotechar" must be string, not int')
761 771
762 def test_delimiter(self): 772 def test_delimiter(self):
763 class mydialect(csv.Dialect): 773 class mydialect(csv.Dialect):
764 delimiter = ";" 774 delimiter = ";"
765 escapechar = '\\' 775 escapechar = '\\'
766 doublequote = False 776 doublequote = False
767 skipinitialspace = True 777 skipinitialspace = True
768 lineterminator = '\r\n' 778 lineterminator = '\r\n'
769 quoting = csv.QUOTE_NONE 779 quoting = csv.QUOTE_NONE
770 d = mydialect() 780 d = mydialect()
781 self.assertEqual(d.delimiter, ";")
771 782
772 mydialect.delimiter = ":::" 783 mydialect.delimiter = ":::"
773 self.assertRaises(csv.Error, mydialect) 784 with self.assertRaises(csv.Error) as cm:
785 mydialect()
786 self.assertEqual(str(cm.exception),
787 '"delimiter" must be an 1-character string')
788
789 mydialect.delimiter = b","
790 with self.assertRaises(csv.Error) as cm:
791 mydialect()
792 self.assertEqual(str(cm.exception),
793 '"delimiter" must be string, not bytes')
774 794
775 mydialect.delimiter = 4 795 mydialect.delimiter = 4
776 self.assertRaises(csv.Error, mydialect) 796 with self.assertRaises(csv.Error) as cm:
797 mydialect()
798 self.assertEqual(str(cm.exception),
799 '"delimiter" must be string, not int')
777 800
778 def test_lineterminator(self): 801 def test_lineterminator(self):
779 class mydialect(csv.Dialect): 802 class mydialect(csv.Dialect):
780 delimiter = ";" 803 delimiter = ";"
781 escapechar = '\\' 804 escapechar = '\\'
782 doublequote = False 805 doublequote = False
783 skipinitialspace = True 806 skipinitialspace = True
784 lineterminator = '\r\n' 807 lineterminator = '\r\n'
785 quoting = csv.QUOTE_NONE 808 quoting = csv.QUOTE_NONE
786 d = mydialect() 809 d = mydialect()
810 self.assertEqual(d.lineterminator, '\r\n')
787 811
788 mydialect.lineterminator = ":::" 812 mydialect.lineterminator = ":::"
789 d = mydialect() 813 d = mydialect()
814 self.assertEqual(d.lineterminator, ":::")
790 815
791 mydialect.lineterminator = 4 816 mydialect.lineterminator = 4
792 self.assertRaises(csv.Error, mydialect) 817 with self.assertRaises(csv.Error) as cm:
818 mydialect()
819 self.assertEqual(str(cm.exception),
820 '"lineterminator" must be a string')
793 821
794 822
795 class TestSniffer(unittest.TestCase): 823 class TestSniffer(unittest.TestCase):
796 sample1 = """\ 824 sample1 = """\
797 Harry's, Arlington Heights, IL, 2/1/03, Kimi Hayes 825 Harry's, Arlington Heights, IL, 2/1/03, Kimi Hayes
798 Shark City, Glendale Heights, IL, 12/28/02, Prezence 826 Shark City, Glendale Heights, IL, 12/28/02, Prezence
799 Tommy's Place, Blue Island, IL, 12/28/02, Blue Sunday/White Crow 827 Tommy's Place, Blue Island, IL, 12/28/02, Blue Sunday/White Crow
800 Stonecutters Seafood and Chop House, Lemont, IL, 12/19/02, Week Back 828 Stonecutters Seafood and Chop House, Lemont, IL, 12/19/02, Week Back
801 """ 829 """
802 sample2 = """\ 830 sample2 = """\
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
1006 1034
1007 1035
1008 def test_main(): 1036 def test_main():
1009 mod = sys.modules[__name__] 1037 mod = sys.modules[__name__]
1010 support.run_unittest( 1038 support.run_unittest(
1011 *[getattr(mod, name) for name in dir(mod) if name.startswith('Test')] 1039 *[getattr(mod, name) for name in dir(mod) if name.startswith('Test')]
1012 ) 1040 )
1013 1041
1014 if __name__ == '__main__': 1042 if __name__ == '__main__':
1015 test_main() 1043 test_main()
OLDNEW
« no previous file with comments | « Lib/csv.py ('k') | Modules/_csv.c » ('j') | no next file with comments »

RSS Feeds Recent Issues | This issue
This is Rietveld 894c83f36cb7+