diff options
Diffstat (limited to 'Lib')
| -rw-r--r-- | Lib/ConfigParser.py | 2 | ||||
| -rw-r--r-- | Lib/test/test_cfgparser.py | 31 |
2 files changed, 33 insertions, 0 deletions
diff --git a/Lib/ConfigParser.py b/Lib/ConfigParser.py index 73acdd1..fccfcdf 100644 --- a/Lib/ConfigParser.py +++ b/Lib/ConfigParser.py @@ -343,6 +343,8 @@ class RawConfigParser: def set(self, section, option, value): """Set an option.""" + if not isinstance(value, basestring): + raise TypeError("option values must be strings") if not section or section == DEFAULTSECT: sectdict = self._defaults else: diff --git a/Lib/test/test_cfgparser.py b/Lib/test/test_cfgparser.py index 28063b5..b40cedf 100644 --- a/Lib/test/test_cfgparser.py +++ b/Lib/test/test_cfgparser.py @@ -211,6 +211,37 @@ class TestCaseBase(unittest.TestCase): "\n" ) + def test_set_string_types(self): + cf = self.fromstring("[sect]\n" + "option1=foo\n") + # Check that we don't get an exception when setting values in + # an existing section using strings: + class mystr(str): + pass + cf.set("sect", "option1", "splat") + cf.set("sect", "option1", mystr("splat")) + cf.set("sect", "option2", "splat") + cf.set("sect", "option2", mystr("splat")) + try: + unicode + except NameError: + pass + else: + cf.set("sect", "option1", unicode("splat")) + cf.set("sect", "option2", unicode("splat")) + + def test_set_nonstring_types(self): + cf = self.fromstring("[sect]\n" + "option1=foo\n") + # Check that we get a TypeError when setting non-string values + # in an existing section: + self.assertRaises(TypeError, cf.set, "sect", "option1", 1) + self.assertRaises(TypeError, cf.set, "sect", "option1", 1.0) + self.assertRaises(TypeError, cf.set, "sect", "option1", object()) + self.assertRaises(TypeError, cf.set, "sect", "option2", 1) + self.assertRaises(TypeError, cf.set, "sect", "option2", 1.0) + self.assertRaises(TypeError, cf.set, "sect", "option2", object()) + # shared by subclasses def get_interpolation_config(self): return self.fromstring( |
