diff options
author | Fred Drake <fdrake@acm.org> | 2010-09-04 04:35:34 (GMT) |
---|---|---|
committer | Fred Drake <fdrake@acm.org> | 2010-09-04 04:35:34 (GMT) |
commit | cc645b9a59ce56aaa9b411c335c819ce31e26e85 (patch) | |
tree | 44a6d2ca80ec2d5f76de779a5cd63b8ec8bb5be3 /Lib/test | |
parent | c934f32e0a2b5f9f2bc0b55573a6860626025d63 (diff) | |
download | cpython-cc645b9a59ce56aaa9b411c335c819ce31e26e85.zip cpython-cc645b9a59ce56aaa9b411c335c819ce31e26e85.tar.gz cpython-cc645b9a59ce56aaa9b411c335c819ce31e26e85.tar.bz2 |
add consistent support for the vars and default arguments on all
configuration parser classes
(http://bugs.python.org/issue9421)
Diffstat (limited to 'Lib/test')
-rw-r--r-- | Lib/test/test_cfgparser.py | 57 |
1 files changed, 52 insertions, 5 deletions
diff --git a/Lib/test/test_cfgparser.py b/Lib/test/test_cfgparser.py index a20678d..3079cfb 100644 --- a/Lib/test/test_cfgparser.py +++ b/Lib/test/test_cfgparser.py @@ -62,9 +62,10 @@ class BasicTestCase(CfgParserTestCaseClass): 'Spaces', 'Spacey Bar', 'Spacey Bar From The Beginning', + 'Types', ] if self.allow_no_value: - E.append(r'NoValue') + E.append('NoValue') E.sort() eq = self.assertEqual eq(L, E) @@ -80,9 +81,43 @@ class BasicTestCase(CfgParserTestCaseClass): eq(cf.get('Commented Bar', 'baz'), 'qwe') eq(cf.get('Spaces', 'key with spaces'), 'value') eq(cf.get('Spaces', 'another with spaces'), 'splat!') + eq(cf.getint('Types', 'int'), 42) + eq(cf.get('Types', 'int'), "42") + self.assertAlmostEqual(cf.getfloat('Types', 'float'), 0.44) + eq(cf.get('Types', 'float'), "0.44") + eq(cf.getboolean('Types', 'boolean'), False) if self.allow_no_value: eq(cf.get('NoValue', 'option-without-value'), None) + # test vars= and default= + eq(cf.get('Foo Bar', 'foo', default='baz'), 'bar') + eq(cf.get('Foo Bar', 'foo', vars={'foo': 'baz'}), 'baz') + with self.assertRaises(configparser.NoSectionError): + cf.get('No Such Foo Bar', 'foo') + with self.assertRaises(configparser.NoOptionError): + cf.get('Foo Bar', 'no-such-foo') + eq(cf.get('No Such Foo Bar', 'foo', default='baz'), 'baz') + eq(cf.get('Foo Bar', 'no-such-foo', default='baz'), 'baz') + eq(cf.get('Spacey Bar', 'foo', default=None), 'bar') + eq(cf.get('No Such Spacey Bar', 'foo', default=None), None) + eq(cf.getint('Types', 'int', default=18), 42) + eq(cf.getint('Types', 'no-such-int', default=18), 18) + eq(cf.getint('Types', 'no-such-int', default="18"), "18") # sic! + self.assertAlmostEqual(cf.getfloat('Types', 'float', + default=0.0), 0.44) + self.assertAlmostEqual(cf.getfloat('Types', 'no-such-float', + default=0.0), 0.0) + eq(cf.getfloat('Types', 'no-such-float', default="0.0"), "0.0") # sic! + eq(cf.getboolean('Types', 'boolean', default=True), False) + eq(cf.getboolean('Types', 'no-such-boolean', default="yes"), + "yes") # sic! + eq(cf.getboolean('Types', 'no-such-boolean', default=True), True) + eq(cf.getboolean('No Such Types', 'boolean', default=True), True) + if self.allow_no_value: + eq(cf.get('NoValue', 'option-without-value', default=False), None) + eq(cf.get('NoValue', 'no-such-option-without-value', + default=False), False) + self.assertNotIn('__name__', cf.options("Foo Bar"), '__name__ "option" should not be exposed by the API!') @@ -127,6 +162,10 @@ foo[de]{0[0]}Deutsch [Spaces] key with spaces {0[1]} value another with spaces {0[0]} splat! +[Types] +int {0[1]} 42 +float {0[0]} 0.44 +boolean {0[0]} NO """.format(self.delimiters, self.comment_prefixes) if self.allow_no_value: config_string += ( @@ -194,7 +233,12 @@ another with spaces {0[0]} splat! "Spaces": { "key with spaces": "value", "another with spaces": "splat!", - } + }, + "Types": { + "int": 42, + "float": 0.44, + "boolean": False, + }, } if self.allow_no_value: config.update({ @@ -732,8 +776,11 @@ class SafeConfigParserTestCaseTrickyFile(CfgParserTestCaseClass): 'no values here', 'tricky interpolation', 'more interpolation']) - #self.assertEqual(cf.getint('DEFAULT', 'go', vars={'interpolate': '-1'}), - # -1) + self.assertEqual(cf.getint('DEFAULT', 'go', + vars={'interpolate': '-1'}), -1) + with self.assertRaises(ValueError): + # no interpolation will happen + cf.getint('DEFAULT', 'go', raw=True, vars={'interpolate': '-1'}) self.assertEqual(len(cf.get('strange', 'other').split('\n')), 4) self.assertEqual(len(cf.get('corruption', 'value').split('\n')), 10) longname = 'yeah, sections can be indented as well' @@ -808,7 +855,7 @@ class SortedTestCase(RawConfigParserTestCase): class CompatibleTestCase(CfgParserTestCaseClass): config_class = configparser.RawConfigParser - comment_prefixes = configparser.RawConfigParser._COMPATIBLE + comment_prefixes = configparser._COMPATIBLE def test_comment_handling(self): config_string = textwrap.dedent("""\ |