mirror of
https://github.com/python/cpython.git
synced 2025-07-12 13:55:34 +00:00
Issue #18829: csv.Dialect() now checks type for delimiter, escapechar and
quotechar fields. Original patch by Vajrasky Kok.
This commit is contained in:
commit
cf58fb5e29
3 changed files with 50 additions and 6 deletions
|
@ -756,6 +756,7 @@ class TestDialectValidity(unittest.TestCase):
|
|||
lineterminator = '\r\n'
|
||||
quoting = csv.QUOTE_NONE
|
||||
d = mydialect()
|
||||
self.assertEqual(d.quoting, csv.QUOTE_NONE)
|
||||
|
||||
mydialect.quoting = None
|
||||
self.assertRaises(csv.Error, mydialect)
|
||||
|
@ -764,12 +765,21 @@ class TestDialectValidity(unittest.TestCase):
|
|||
mydialect.quoting = csv.QUOTE_ALL
|
||||
mydialect.quotechar = '"'
|
||||
d = mydialect()
|
||||
self.assertEqual(d.quoting, csv.QUOTE_ALL)
|
||||
self.assertEqual(d.quotechar, '"')
|
||||
self.assertTrue(d.doublequote)
|
||||
|
||||
mydialect.quotechar = "''"
|
||||
self.assertRaises(csv.Error, mydialect)
|
||||
with self.assertRaises(csv.Error) as cm:
|
||||
mydialect()
|
||||
self.assertEqual(str(cm.exception),
|
||||
'"quotechar" must be an 1-character string')
|
||||
|
||||
mydialect.quotechar = 4
|
||||
self.assertRaises(csv.Error, mydialect)
|
||||
with self.assertRaises(csv.Error) as cm:
|
||||
mydialect()
|
||||
self.assertEqual(str(cm.exception),
|
||||
'"quotechar" must be string, not int')
|
||||
|
||||
def test_delimiter(self):
|
||||
class mydialect(csv.Dialect):
|
||||
|
@ -780,12 +790,31 @@ class TestDialectValidity(unittest.TestCase):
|
|||
lineterminator = '\r\n'
|
||||
quoting = csv.QUOTE_NONE
|
||||
d = mydialect()
|
||||
self.assertEqual(d.delimiter, ";")
|
||||
|
||||
mydialect.delimiter = ":::"
|
||||
self.assertRaises(csv.Error, mydialect)
|
||||
with self.assertRaises(csv.Error) as cm:
|
||||
mydialect()
|
||||
self.assertEqual(str(cm.exception),
|
||||
'"delimiter" must be an 1-character string')
|
||||
|
||||
mydialect.delimiter = ""
|
||||
with self.assertRaises(csv.Error) as cm:
|
||||
mydialect()
|
||||
self.assertEqual(str(cm.exception),
|
||||
'"delimiter" must be an 1-character string')
|
||||
|
||||
mydialect.delimiter = b","
|
||||
with self.assertRaises(csv.Error) as cm:
|
||||
mydialect()
|
||||
self.assertEqual(str(cm.exception),
|
||||
'"delimiter" must be string, not bytes')
|
||||
|
||||
mydialect.delimiter = 4
|
||||
self.assertRaises(csv.Error, mydialect)
|
||||
with self.assertRaises(csv.Error) as cm:
|
||||
mydialect()
|
||||
self.assertEqual(str(cm.exception),
|
||||
'"delimiter" must be string, not int')
|
||||
|
||||
def test_lineterminator(self):
|
||||
class mydialect(csv.Dialect):
|
||||
|
@ -796,12 +825,17 @@ class TestDialectValidity(unittest.TestCase):
|
|||
lineterminator = '\r\n'
|
||||
quoting = csv.QUOTE_NONE
|
||||
d = mydialect()
|
||||
self.assertEqual(d.lineterminator, '\r\n')
|
||||
|
||||
mydialect.lineterminator = ":::"
|
||||
d = mydialect()
|
||||
self.assertEqual(d.lineterminator, ":::")
|
||||
|
||||
mydialect.lineterminator = 4
|
||||
self.assertRaises(csv.Error, mydialect)
|
||||
with self.assertRaises(csv.Error) as cm:
|
||||
mydialect()
|
||||
self.assertEqual(str(cm.exception),
|
||||
'"lineterminator" must be a string')
|
||||
|
||||
|
||||
class TestSniffer(unittest.TestCase):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue