summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_configparser.py
diff options
context:
space:
mode:
authorŁukasz Langa <lukasz@langa.pl>2013-06-23 17:10:25 (GMT)
committerŁukasz Langa <lukasz@langa.pl>2013-06-23 17:10:25 (GMT)
commitf9b4eb4d04609c6cb0f56edfd1ca3d15b349eadf (patch)
tree466679166b1990be6532af06fd4e55d4b839214e /Lib/test/test_configparser.py
parent36a7e4f74a7fdf193f0fd0fab8ace602bca490a5 (diff)
downloadcpython-f9b4eb4d04609c6cb0f56edfd1ca3d15b349eadf.zip
cpython-f9b4eb4d04609c6cb0f56edfd1ca3d15b349eadf.tar.gz
cpython-f9b4eb4d04609c6cb0f56edfd1ca3d15b349eadf.tar.bz2
Fixed issue #18260: configparser TypeError on source name specified as bytes
Diffstat (limited to 'Lib/test/test_configparser.py')
-rw-r--r--Lib/test/test_configparser.py74
1 files changed, 63 insertions, 11 deletions
diff --git a/Lib/test/test_configparser.py b/Lib/test/test_configparser.py
index fc56550..29e7ed9 100644
--- a/Lib/test/test_configparser.py
+++ b/Lib/test/test_configparser.py
@@ -626,15 +626,15 @@ boolean {0[0]} NO
oops{equals}this won't
""".format(equals=self.delimiters[0])), source='<foo-bar>')
e = cm.exception
- self.assertEqual(str(e), "While reading from <foo-bar> [line 5]: "
- "section 'Foo' already exists")
+ self.assertEqual(str(e), "While reading from '<foo-bar>' "
+ "[line 5]: section 'Foo' already exists")
self.assertEqual(e.args, ("Foo", '<foo-bar>', 5))
with self.assertRaises(configparser.DuplicateOptionError) as cm:
cf.read_dict({'Bar': {'opt': 'val', 'OPT': 'is really `opt`'}})
e = cm.exception
- self.assertEqual(str(e), "While reading from <dict>: option 'opt' "
- "in section 'Bar' already exists")
+ self.assertEqual(str(e), "While reading from '<dict>': option "
+ "'opt' in section 'Bar' already exists")
self.assertEqual(e.args, ("Bar", "opt", "<dict>", None))
def test_write(self):
@@ -1419,13 +1419,18 @@ def readline_generator(f):
class ReadFileTestCase(unittest.TestCase):
def test_file(self):
- file_path = support.findfile("cfgparser.1")
- parser = configparser.ConfigParser()
- with open(file_path) as f:
- parser.read_file(f)
- self.assertIn("Foo Bar", parser)
- self.assertIn("foo", parser["Foo Bar"])
- self.assertEqual(parser["Foo Bar"]["foo"], "newbar")
+ file_paths = [support.findfile("cfgparser.1")]
+ try:
+ file_paths.append(file_paths[0].encode('utf8'))
+ except UnicodeEncodeError:
+ pass # unfortunately we can't test bytes on this path
+ for file_path in file_paths:
+ parser = configparser.ConfigParser()
+ with open(file_path) as f:
+ parser.read_file(f)
+ self.assertIn("Foo Bar", parser)
+ self.assertIn("foo", parser["Foo Bar"])
+ self.assertEqual(parser["Foo Bar"]["foo"], "newbar")
def test_iterable(self):
lines = textwrap.dedent("""
@@ -1447,6 +1452,53 @@ class ReadFileTestCase(unittest.TestCase):
self.assertIn("foo", parser["Foo Bar"])
self.assertEqual(parser["Foo Bar"]["foo"], "newbar")
+ def test_source_as_bytes(self):
+ """Issue #18260."""
+ lines = textwrap.dedent("""
+ [badbad]
+ [badbad]""").strip().split('\n')
+ parser = configparser.ConfigParser()
+ with self.assertRaises(configparser.DuplicateSectionError) as dse:
+ parser.read_file(lines, source=b"badbad")
+ self.assertEqual(
+ str(dse.exception),
+ "While reading from b'badbad' [line 2]: section 'badbad' "
+ "already exists"
+ )
+ lines = textwrap.dedent("""
+ [badbad]
+ bad = bad
+ bad = bad""").strip().split('\n')
+ parser = configparser.ConfigParser()
+ with self.assertRaises(configparser.DuplicateOptionError) as dse:
+ parser.read_file(lines, source=b"badbad")
+ self.assertEqual(
+ str(dse.exception),
+ "While reading from b'badbad' [line 3]: option 'bad' in section "
+ "'badbad' already exists"
+ )
+ lines = textwrap.dedent("""
+ [badbad]
+ = bad""").strip().split('\n')
+ parser = configparser.ConfigParser()
+ with self.assertRaises(configparser.ParsingError) as dse:
+ parser.read_file(lines, source=b"badbad")
+ self.assertEqual(
+ str(dse.exception),
+ "Source contains parsing errors: b'badbad'\n\t[line 2]: '= bad'"
+ )
+ lines = textwrap.dedent("""
+ [badbad
+ bad = bad""").strip().split('\n')
+ parser = configparser.ConfigParser()
+ with self.assertRaises(configparser.MissingSectionHeaderError) as dse:
+ parser.read_file(lines, source=b"badbad")
+ self.assertEqual(
+ str(dse.exception),
+ "File contains no section headers.\nfile: b'badbad', line: 1\n"
+ "'[badbad'"
+ )
+
class CoverageOneHundredTestCase(unittest.TestCase):
"""Covers edge cases in the codebase."""