diff options
author | Fred Drake <fdrake@acm.org> | 2010-02-19 06:08:41 (GMT) |
---|---|---|
committer | Fred Drake <fdrake@acm.org> | 2010-02-19 06:08:41 (GMT) |
commit | 03c44a30a305f4506f03bf136065984464dd3af6 (patch) | |
tree | 6ed97dd9f5e7ead5fdc53d1aecec40584a507aad /Lib/test/test_cfgparser.py | |
parent | 2c2dc37e589cd7070d58258d626543a5ce3a474b (diff) | |
download | cpython-03c44a30a305f4506f03bf136065984464dd3af6.zip cpython-03c44a30a305f4506f03bf136065984464dd3af6.tar.gz cpython-03c44a30a305f4506f03bf136065984464dd3af6.tar.bz2 |
Merged revisions 78232 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r78232 | fred.drake | 2010-02-19 00:24:30 -0500 (Fri, 19 Feb 2010) | 3 lines
- apply patch from issue 7005
- add corresponding documentation
........
Diffstat (limited to 'Lib/test/test_cfgparser.py')
-rw-r--r-- | Lib/test/test_cfgparser.py | 77 |
1 files changed, 57 insertions, 20 deletions
diff --git a/Lib/test/test_cfgparser.py b/Lib/test/test_cfgparser.py index 6271d6f..6acab6b 100644 --- a/Lib/test/test_cfgparser.py +++ b/Lib/test/test_cfgparser.py @@ -6,6 +6,7 @@ import collections from test import support class SortedDict(collections.UserDict): + def items(self): return sorted(self.data.items()) @@ -20,12 +21,16 @@ class SortedDict(collections.UserDict): __iter__ = iterkeys def itervalues(self): return iter(self.values()) + class TestCaseBase(unittest.TestCase): + allow_no_value = False + def newconfig(self, defaults=None): if defaults is None: - self.cf = self.config_class() + self.cf = self.config_class(allow_no_value=self.allow_no_value) else: - self.cf = self.config_class(defaults) + self.cf = self.config_class(defaults, + allow_no_value=self.allow_no_value) return self.cf def fromstring(self, string, defaults=None): @@ -35,7 +40,7 @@ class TestCaseBase(unittest.TestCase): return cf def test_basic(self): - cf = self.fromstring( + config_string = ( "[Foo Bar]\n" "foo=bar\n" "[Spacey Bar]\n" @@ -55,17 +60,28 @@ class TestCaseBase(unittest.TestCase): "key with spaces : value\n" "another with spaces = splat!\n" ) + if self.allow_no_value: + config_string += ( + "[NoValue]\n" + "option-without-value\n" + ) + + cf = self.fromstring(config_string) L = cf.sections() L.sort() + E = [r'Commented Bar', + r'Foo Bar', + r'Internationalized Stuff', + r'Long Line', + r'Section\with$weird%characters[' '\t', + r'Spaces', + r'Spacey Bar', + ] + if self.allow_no_value: + E.append(r'NoValue') + E.sort() eq = self.assertEqual - eq(L, [r'Commented Bar', - r'Foo Bar', - r'Internationalized Stuff', - r'Long Line', - r'Section\with$weird%characters[' '\t', - r'Spaces', - r'Spacey Bar', - ]) + eq(L, E) # The use of spaces in the section names serves as a # regression test for SourceForge bug #583248: @@ -75,6 +91,8 @@ class TestCaseBase(unittest.TestCase): eq(cf.get('Commented Bar', 'foo'), 'bar') eq(cf.get('Spaces', 'key with spaces'), 'value') eq(cf.get('Spaces', 'another with spaces'), 'splat!') + if self.allow_no_value: + eq(cf.get('NoValue', 'option-without-value'), None) self.assertNotIn('__name__', cf.options("Foo Bar"), '__name__ "option" should not be exposed by the API!') @@ -147,8 +165,6 @@ class TestCaseBase(unittest.TestCase): self.parse_error(configparser.ParsingError, "[Foo]\n extra-spaces= splat\n") self.parse_error(configparser.ParsingError, - "[Foo]\noption-without-value\n") - self.parse_error(configparser.ParsingError, "[Foo]\n:value-without-option-name\n") self.parse_error(configparser.ParsingError, "[Foo]\n=value-without-option-name\n") @@ -214,18 +230,24 @@ class TestCaseBase(unittest.TestCase): cf.add_section, "Foo") def test_write(self): - cf = self.fromstring( + config_string = ( "[Long Line]\n" "foo: this line is much, much longer than my editor\n" " likes it.\n" "[DEFAULT]\n" "foo: another very\n" - " long line" + " long line\n" + ) + if self.allow_no_value: + config_string += ( + "[Valueless]\n" + "option-without-value\n" ) + + cf = self.fromstring(config_string) output = io.StringIO() cf.write(output) - self.assertEqual( - output.getvalue(), + expect_string = ( "[DEFAULT]\n" "foo = another very\n" "\tlong line\n" @@ -235,6 +257,13 @@ class TestCaseBase(unittest.TestCase): "\tlikes it.\n" "\n" ) + if self.allow_no_value: + expect_string += ( + "[Valueless]\n" + "option-without-value\n" + "\n" + ) + self.assertEqual(output.getvalue(), expect_string) def test_set_string_types(self): cf = self.fromstring("[sect]\n" @@ -328,7 +357,7 @@ class ConfigParserTestCase(TestCaseBase): self.get_error(configparser.InterpolationDepthError, "Foo", "bar11") def test_interpolation_missing_value(self): - cf = self.get_interpolation_config() + self.get_interpolation_config() e = self.get_error(configparser.InterpolationError, "Interpolation Error", "name") self.assertEqual(e.reference, "reference") @@ -448,6 +477,11 @@ class SafeConfigParserTestCase(ConfigParserTestCase): cf = self.newconfig() self.assertRaises(ValueError, cf.add_section, "DEFAULT") + +class SafeConfigParserTestCaseNoValue(SafeConfigParserTestCase): + allow_no_value = True + + class SortedTestCase(RawConfigParserTestCase): def newconfig(self, defaults=None): self.cf = self.config_class(defaults=defaults, dict_type=SortedDict) @@ -472,13 +506,16 @@ class SortedTestCase(RawConfigParserTestCase): "o3 = 2\n" "o4 = 1\n\n") + def test_main(): support.run_unittest( ConfigParserTestCase, RawConfigParserTestCase, SafeConfigParserTestCase, - SortedTestCase - ) + SortedTestCase, + SafeConfigParserTestCaseNoValue, + ) + if __name__ == "__main__": test_main() |