1392c6fc02d90f211dadc72448a07d9281260cb70Georg Brandlimport ConfigParser 28ef6767e004267ccb4bbbe0a7762d8d69a8c62c6Fred Drakeimport StringIO 3e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtinimport os 4c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drakeimport unittest 5a00bcac00382be7f99ef30e24ec029268efa0cbfMartin v. Löwisimport UserDict 68ef6767e004267ccb4bbbe0a7762d8d69a8c62c6Fred Drake 7c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drakefrom test import test_support 83d5f7e83c74c1c2fa20cf23d38020bbefb69916eFred Drake 9cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake 10a00bcac00382be7f99ef30e24ec029268efa0cbfMartin v. Löwisclass SortedDict(UserDict.UserDict): 11a00bcac00382be7f99ef30e24ec029268efa0cbfMartin v. Löwis def items(self): 12a00bcac00382be7f99ef30e24ec029268efa0cbfMartin v. Löwis result = self.data.items() 13a00bcac00382be7f99ef30e24ec029268efa0cbfMartin v. Löwis result.sort() 14a00bcac00382be7f99ef30e24ec029268efa0cbfMartin v. Löwis return result 15a00bcac00382be7f99ef30e24ec029268efa0cbfMartin v. Löwis 16a00bcac00382be7f99ef30e24ec029268efa0cbfMartin v. Löwis def keys(self): 17a00bcac00382be7f99ef30e24ec029268efa0cbfMartin v. Löwis result = self.data.keys() 18a00bcac00382be7f99ef30e24ec029268efa0cbfMartin v. Löwis result.sort() 19a00bcac00382be7f99ef30e24ec029268efa0cbfMartin v. Löwis return result 20f733abb7831d6566cb0fccd0550d58ec3b7f05a4Tim Peters 21a00bcac00382be7f99ef30e24ec029268efa0cbfMartin v. Löwis def values(self): 22cd4a21bb8ea184c32d33d534d42bc08b57b405fbGeorg Brandl # XXX never used? 23a00bcac00382be7f99ef30e24ec029268efa0cbfMartin v. Löwis result = self.items() 24cd4a21bb8ea184c32d33d534d42bc08b57b405fbGeorg Brandl return [i[1] for i in result] 25a00bcac00382be7f99ef30e24ec029268efa0cbfMartin v. Löwis 26a00bcac00382be7f99ef30e24ec029268efa0cbfMartin v. Löwis def iteritems(self): return iter(self.items()) 27a00bcac00382be7f99ef30e24ec029268efa0cbfMartin v. Löwis def iterkeys(self): return iter(self.keys()) 28a00bcac00382be7f99ef30e24ec029268efa0cbfMartin v. Löwis __iter__ = iterkeys 29a00bcac00382be7f99ef30e24ec029268efa0cbfMartin v. Löwis def itervalues(self): return iter(self.values()) 303d5f7e83c74c1c2fa20cf23d38020bbefb69916eFred Drake 31cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake 32c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drakeclass TestCaseBase(unittest.TestCase): 33cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake allow_no_value = False 34cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake 35c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake def newconfig(self, defaults=None): 36c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake if defaults is None: 37cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake self.cf = self.config_class(allow_no_value=self.allow_no_value) 38c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake else: 39cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake self.cf = self.config_class(defaults, 40cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake allow_no_value=self.allow_no_value) 41c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake return self.cf 423d5f7e83c74c1c2fa20cf23d38020bbefb69916eFred Drake 43c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake def fromstring(self, string, defaults=None): 44c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake cf = self.newconfig(defaults) 45c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake sio = StringIO.StringIO(string) 46c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake cf.readfp(sio) 47c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake return cf 48c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake 49c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake def test_basic(self): 50cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake config_string = ( 51c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "[Foo Bar]\n" 52c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "foo=bar\n" 53c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "[Spacey Bar]\n" 54c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "foo = bar\n" 55c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "[Commented Bar]\n" 56c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "foo: bar ; comment\n" 57c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "[Long Line]\n" 58c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "foo: this line is much, much longer than my editor\n" 59c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake " likes it.\n" 60c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "[Section\\with$weird%characters[\t]\n" 61c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "[Internationalized Stuff]\n" 62c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "foo[bg]: Bulgarian\n" 63c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "foo=Default\n" 64c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "foo[en]=English\n" 65c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "foo[de]=Deutsch\n" 66c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "[Spaces]\n" 67c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "key with spaces : value\n" 68c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "another with spaces = splat!\n" 69c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake ) 70cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake if self.allow_no_value: 71cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake config_string += ( 72cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake "[NoValue]\n" 73cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake "option-without-value\n" 74cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake ) 75cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake 76cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake cf = self.fromstring(config_string) 77c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake L = cf.sections() 78c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake L.sort() 79cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake E = [r'Commented Bar', 80cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake r'Foo Bar', 81cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake r'Internationalized Stuff', 82cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake r'Long Line', 83cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake r'Section\with$weird%characters[' '\t', 84cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake r'Spaces', 85cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake r'Spacey Bar', 86cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake ] 87cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake if self.allow_no_value: 88cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake E.append(r'NoValue') 89cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake E.sort() 90c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake eq = self.assertEqual 91cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake eq(L, E) 92c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake 93c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake # The use of spaces in the section names serves as a 94c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake # regression test for SourceForge bug #583248: 95c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake # http://www.python.org/sf/583248 96c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake eq(cf.get('Foo Bar', 'foo'), 'bar') 97c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake eq(cf.get('Spacey Bar', 'foo'), 'bar') 98c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake eq(cf.get('Commented Bar', 'foo'), 'bar') 99c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake eq(cf.get('Spaces', 'key with spaces'), 'value') 100c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake eq(cf.get('Spaces', 'another with spaces'), 'splat!') 101cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake if self.allow_no_value: 102cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake eq(cf.get('NoValue', 'option-without-value'), None) 103c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake 104aa98058cc44ba20f35c106d20918c6196b737561Ezio Melotti self.assertNotIn('__name__', cf.options("Foo Bar"), 105aa98058cc44ba20f35c106d20918c6196b737561Ezio Melotti '__name__ "option" should not be exposed by the API!') 106c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake 107c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake # Make sure the right things happen for remove_option(); 108c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake # added to include check for SourceForge bug #123324: 1095c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(cf.remove_option('Foo Bar', 'foo'), 1103e4caeb3bf2b2579861e9f3379e3508fbb30549cMark Dickinson "remove_option() failed to report existence of option") 1115c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertFalse(cf.has_option('Foo Bar', 'foo'), 112c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "remove_option() failed to remove option") 1135c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertFalse(cf.remove_option('Foo Bar', 'foo'), 1143e4caeb3bf2b2579861e9f3379e3508fbb30549cMark Dickinson "remove_option() failed to report non-existence of option" 115c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake " that was removed") 116c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake 117392c6fc02d90f211dadc72448a07d9281260cb70Georg Brandl self.assertRaises(ConfigParser.NoSectionError, 118c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake cf.remove_option, 'No Such Section', 'foo') 119c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake 120c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake eq(cf.get('Long Line', 'foo'), 1211bf71172f8e1acfce05d8443e3998c425974aeefAndrew M. Kuchling 'this line is much, much longer than my editor\nlikes it.') 1223d5f7e83c74c1c2fa20cf23d38020bbefb69916eFred Drake 123c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake def test_case_sensitivity(self): 124c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake cf = self.newconfig() 125c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake cf.add_section("A") 126c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake cf.add_section("a") 127c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake L = cf.sections() 128c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake L.sort() 129c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake eq = self.assertEqual 130c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake eq(L, ["A", "a"]) 131c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake cf.set("a", "B", "value") 132c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake eq(cf.options("a"), ["b"]) 133c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake eq(cf.get("a", "b"), "value", 1343c823aa4b64653043ac8cdcb858b4042087862b0Fred Drake "could not locate option, expecting case-insensitive option names") 1355c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(cf.has_option("a", "b")) 136c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake cf.set("A", "A-B", "A-B value") 137c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake for opt in ("a-b", "A-b", "a-B", "A-B"): 1385c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue( 139c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake cf.has_option("A", opt), 140c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "has_option() returned false for option which should exist") 141c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake eq(cf.options("A"), ["a-b"]) 142c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake eq(cf.options("a"), ["b"]) 143c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake cf.remove_option("a", "B") 144c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake eq(cf.options("a"), []) 145c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake 146c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake # SF bug #432369: 147c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake cf = self.fromstring( 148c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "[MySection]\nOption: first line\n\tsecond line\n") 149c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake eq(cf.options("MySection"), ["option"]) 150c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake eq(cf.get("MySection", "Option"), "first line\nsecond line") 151c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake 152c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake # SF bug #561822: 153c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake cf = self.fromstring("[section]\nnekey=nevalue\n", 154c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake defaults={"key":"value"}) 1555c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(cf.has_option("section", "Key")) 156c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake 157c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake 15868a1abdadec2377fd3e8d2211cb3cc119de77a28David Goodger def test_default_case_sensitivity(self): 15968a1abdadec2377fd3e8d2211cb3cc119de77a28David Goodger cf = self.newconfig({"foo": "Bar"}) 16068a1abdadec2377fd3e8d2211cb3cc119de77a28David Goodger self.assertEqual( 16168a1abdadec2377fd3e8d2211cb3cc119de77a28David Goodger cf.get("DEFAULT", "Foo"), "Bar", 16268a1abdadec2377fd3e8d2211cb3cc119de77a28David Goodger "could not locate option, expecting case-insensitive option names") 16368a1abdadec2377fd3e8d2211cb3cc119de77a28David Goodger cf = self.newconfig({"Foo": "Bar"}) 16468a1abdadec2377fd3e8d2211cb3cc119de77a28David Goodger self.assertEqual( 16568a1abdadec2377fd3e8d2211cb3cc119de77a28David Goodger cf.get("DEFAULT", "Foo"), "Bar", 16668a1abdadec2377fd3e8d2211cb3cc119de77a28David Goodger "could not locate option, expecting case-insensitive defaults") 16768a1abdadec2377fd3e8d2211cb3cc119de77a28David Goodger 168c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake def test_parse_errors(self): 169c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake self.newconfig() 170392c6fc02d90f211dadc72448a07d9281260cb70Georg Brandl self.parse_error(ConfigParser.ParsingError, 171c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "[Foo]\n extra-spaces: splat\n") 172392c6fc02d90f211dadc72448a07d9281260cb70Georg Brandl self.parse_error(ConfigParser.ParsingError, 173c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "[Foo]\n extra-spaces= splat\n") 174392c6fc02d90f211dadc72448a07d9281260cb70Georg Brandl self.parse_error(ConfigParser.ParsingError, 175c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "[Foo]\n:value-without-option-name\n") 176392c6fc02d90f211dadc72448a07d9281260cb70Georg Brandl self.parse_error(ConfigParser.ParsingError, 177c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "[Foo]\n=value-without-option-name\n") 178392c6fc02d90f211dadc72448a07d9281260cb70Georg Brandl self.parse_error(ConfigParser.MissingSectionHeaderError, 179c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "No Section!\n") 180c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake 181c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake def parse_error(self, exc, src): 182c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake sio = StringIO.StringIO(src) 183c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake self.assertRaises(exc, self.cf.readfp, sio) 184c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake 185c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake def test_query_errors(self): 186c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake cf = self.newconfig() 187c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake self.assertEqual(cf.sections(), [], 188c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "new ConfigParser should have no defined sections") 1895c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertFalse(cf.has_section("Foo"), 190e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtin "new ConfigParser should have no acknowledged " 191e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtin "sections") 192392c6fc02d90f211dadc72448a07d9281260cb70Georg Brandl self.assertRaises(ConfigParser.NoSectionError, 193c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake cf.options, "Foo") 194392c6fc02d90f211dadc72448a07d9281260cb70Georg Brandl self.assertRaises(ConfigParser.NoSectionError, 195c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake cf.set, "foo", "bar", "value") 196392c6fc02d90f211dadc72448a07d9281260cb70Georg Brandl self.get_error(ConfigParser.NoSectionError, "foo", "bar") 197c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake cf.add_section("foo") 198392c6fc02d90f211dadc72448a07d9281260cb70Georg Brandl self.get_error(ConfigParser.NoOptionError, "foo", "bar") 199c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake 200c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake def get_error(self, exc, section, option): 2015478219e11ccd8230c07be731b4079832bd67c20Fred Drake try: 2025478219e11ccd8230c07be731b4079832bd67c20Fred Drake self.cf.get(section, option) 2035478219e11ccd8230c07be731b4079832bd67c20Fred Drake except exc, e: 2045478219e11ccd8230c07be731b4079832bd67c20Fred Drake return e 2055478219e11ccd8230c07be731b4079832bd67c20Fred Drake else: 2065478219e11ccd8230c07be731b4079832bd67c20Fred Drake self.fail("expected exception type %s.%s" 2075478219e11ccd8230c07be731b4079832bd67c20Fred Drake % (exc.__module__, exc.__name__)) 208c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake 209c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake def test_boolean(self): 210c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake cf = self.fromstring( 211c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "[BOOLTEST]\n" 212c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "T1=1\n" 213c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "T2=TRUE\n" 214c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "T3=True\n" 215c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "T4=oN\n" 216c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "T5=yes\n" 217c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "F1=0\n" 218c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "F2=FALSE\n" 219c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "F3=False\n" 220c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "F4=oFF\n" 221c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "F5=nO\n" 222c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "E1=2\n" 223c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "E2=foo\n" 224c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "E3=-1\n" 225c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "E4=0.1\n" 226c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "E5=FALSE AND MORE" 227c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake ) 228c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake for x in range(1, 5): 2295c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(cf.getboolean('BOOLTEST', 't%d' % x)) 2305c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertFalse(cf.getboolean('BOOLTEST', 'f%d' % x)) 231c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake self.assertRaises(ValueError, 232c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake cf.getboolean, 'BOOLTEST', 'e%d' % x) 233c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake 234c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake def test_weird_errors(self): 235c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake cf = self.newconfig() 2368ef6767e004267ccb4bbbe0a7762d8d69a8c62c6Fred Drake cf.add_section("Foo") 237392c6fc02d90f211dadc72448a07d9281260cb70Georg Brandl self.assertRaises(ConfigParser.DuplicateSectionError, 238c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake cf.add_section, "Foo") 239c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake 240c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake def test_write(self): 241cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake config_string = ( 242c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "[Long Line]\n" 243c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "foo: this line is much, much longer than my editor\n" 244c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake " likes it.\n" 245c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "[DEFAULT]\n" 246c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "foo: another very\n" 247cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake " long line\n" 248cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake ) 249cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake if self.allow_no_value: 250cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake config_string += ( 251cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake "[Valueless]\n" 252cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake "option-without-value\n" 253c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake ) 254cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake 255cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake cf = self.fromstring(config_string) 256c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake output = StringIO.StringIO() 257c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake cf.write(output) 258cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake expect_string = ( 259c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "[DEFAULT]\n" 260c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "foo = another very\n" 261c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "\tlong line\n" 262c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "\n" 263c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "[Long Line]\n" 264c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "foo = this line is much, much longer than my editor\n" 265c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "\tlikes it.\n" 266c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "\n" 267c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake ) 268cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake if self.allow_no_value: 269cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake expect_string += ( 270cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake "[Valueless]\n" 271cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake "option-without-value\n" 272cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake "\n" 273cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake ) 274cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake self.assertEqual(output.getvalue(), expect_string) 275c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake 276abc086fb0df915b702f14fa3d44e79e0a8b8f11fFred Drake def test_set_string_types(self): 277abc086fb0df915b702f14fa3d44e79e0a8b8f11fFred Drake cf = self.fromstring("[sect]\n" 278abc086fb0df915b702f14fa3d44e79e0a8b8f11fFred Drake "option1=foo\n") 279abc086fb0df915b702f14fa3d44e79e0a8b8f11fFred Drake # Check that we don't get an exception when setting values in 280abc086fb0df915b702f14fa3d44e79e0a8b8f11fFred Drake # an existing section using strings: 281abc086fb0df915b702f14fa3d44e79e0a8b8f11fFred Drake class mystr(str): 282abc086fb0df915b702f14fa3d44e79e0a8b8f11fFred Drake pass 283abc086fb0df915b702f14fa3d44e79e0a8b8f11fFred Drake cf.set("sect", "option1", "splat") 284abc086fb0df915b702f14fa3d44e79e0a8b8f11fFred Drake cf.set("sect", "option1", mystr("splat")) 285abc086fb0df915b702f14fa3d44e79e0a8b8f11fFred Drake cf.set("sect", "option2", "splat") 286abc086fb0df915b702f14fa3d44e79e0a8b8f11fFred Drake cf.set("sect", "option2", mystr("splat")) 2871f70221b861a3714735251d57695b2f472d0599bZachary Ware 2881f70221b861a3714735251d57695b2f472d0599bZachary Ware def test_set_unicode(self): 289abc086fb0df915b702f14fa3d44e79e0a8b8f11fFred Drake try: 290abc086fb0df915b702f14fa3d44e79e0a8b8f11fFred Drake unicode 291abc086fb0df915b702f14fa3d44e79e0a8b8f11fFred Drake except NameError: 2921f70221b861a3714735251d57695b2f472d0599bZachary Ware self.skipTest('no unicode support') 2931f70221b861a3714735251d57695b2f472d0599bZachary Ware 2941f70221b861a3714735251d57695b2f472d0599bZachary Ware cf = self.fromstring("[sect]\n" 2951f70221b861a3714735251d57695b2f472d0599bZachary Ware "option1=foo\n") 2961f70221b861a3714735251d57695b2f472d0599bZachary Ware cf.set("sect", "option1", unicode("splat")) 2971f70221b861a3714735251d57695b2f472d0599bZachary Ware cf.set("sect", "option2", unicode("splat")) 298abc086fb0df915b702f14fa3d44e79e0a8b8f11fFred Drake 29982903148a8b4d7f27c5b3180331efd98600b21e1Fred Drake def test_read_returns_file_list(self): 30082903148a8b4d7f27c5b3180331efd98600b21e1Fred Drake file1 = test_support.findfile("cfgparser.1") 30182903148a8b4d7f27c5b3180331efd98600b21e1Fred Drake # check when we pass a mix of readable and non-readable files: 30282903148a8b4d7f27c5b3180331efd98600b21e1Fred Drake cf = self.newconfig() 3033e4caeb3bf2b2579861e9f3379e3508fbb30549cMark Dickinson parsed_files = cf.read([file1, "nonexistent-file"]) 30482903148a8b4d7f27c5b3180331efd98600b21e1Fred Drake self.assertEqual(parsed_files, [file1]) 30582903148a8b4d7f27c5b3180331efd98600b21e1Fred Drake self.assertEqual(cf.get("Foo Bar", "foo"), "newbar") 30682903148a8b4d7f27c5b3180331efd98600b21e1Fred Drake # check when we pass only a filename: 30782903148a8b4d7f27c5b3180331efd98600b21e1Fred Drake cf = self.newconfig() 30882903148a8b4d7f27c5b3180331efd98600b21e1Fred Drake parsed_files = cf.read(file1) 30982903148a8b4d7f27c5b3180331efd98600b21e1Fred Drake self.assertEqual(parsed_files, [file1]) 31082903148a8b4d7f27c5b3180331efd98600b21e1Fred Drake self.assertEqual(cf.get("Foo Bar", "foo"), "newbar") 31182903148a8b4d7f27c5b3180331efd98600b21e1Fred Drake # check when we pass only missing files: 31282903148a8b4d7f27c5b3180331efd98600b21e1Fred Drake cf = self.newconfig() 3133e4caeb3bf2b2579861e9f3379e3508fbb30549cMark Dickinson parsed_files = cf.read(["nonexistent-file"]) 31482903148a8b4d7f27c5b3180331efd98600b21e1Fred Drake self.assertEqual(parsed_files, []) 31582903148a8b4d7f27c5b3180331efd98600b21e1Fred Drake # check when we pass no files: 31682903148a8b4d7f27c5b3180331efd98600b21e1Fred Drake cf = self.newconfig() 31782903148a8b4d7f27c5b3180331efd98600b21e1Fred Drake parsed_files = cf.read([]) 31882903148a8b4d7f27c5b3180331efd98600b21e1Fred Drake self.assertEqual(parsed_files, []) 31982903148a8b4d7f27c5b3180331efd98600b21e1Fred Drake 320c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake # shared by subclasses 321c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake def get_interpolation_config(self): 322c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake return self.fromstring( 323c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "[Foo]\n" 324c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "bar=something %(with1)s interpolation (1 step)\n" 325c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "bar9=something %(with9)s lots of interpolation (9 steps)\n" 326c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "bar10=something %(with10)s lots of interpolation (10 steps)\n" 327c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "bar11=something %(with11)s lots of interpolation (11 steps)\n" 328c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "with11=%(with10)s\n" 329c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "with10=%(with9)s\n" 330c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "with9=%(with8)s\n" 331bc12b01d8349e185c8a52a0f2539e830dfae9adbFred Drake "with8=%(With7)s\n" 332bc12b01d8349e185c8a52a0f2539e830dfae9adbFred Drake "with7=%(WITH6)s\n" 333c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "with6=%(with5)s\n" 334bc12b01d8349e185c8a52a0f2539e830dfae9adbFred Drake "With5=%(with4)s\n" 335bc12b01d8349e185c8a52a0f2539e830dfae9adbFred Drake "WITH4=%(with3)s\n" 336c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "with3=%(with2)s\n" 337c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "with2=%(with1)s\n" 338c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "with1=with\n" 339c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "\n" 340c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "[Mutual Recursion]\n" 341c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "foo=%(bar)s\n" 3425478219e11ccd8230c07be731b4079832bd67c20Fred Drake "bar=%(foo)s\n" 3435478219e11ccd8230c07be731b4079832bd67c20Fred Drake "\n" 3445478219e11ccd8230c07be731b4079832bd67c20Fred Drake "[Interpolation Error]\n" 3455478219e11ccd8230c07be731b4079832bd67c20Fred Drake "name=%(reference)s\n", 3465478219e11ccd8230c07be731b4079832bd67c20Fred Drake # no definition for 'reference' 347c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake defaults={"getname": "%(__name__)s"}) 348c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake 34998e3b29b5969b7738c4c2e1e21fea47357ea6aa0Fred Drake def check_items_config(self, expected): 35098e3b29b5969b7738c4c2e1e21fea47357ea6aa0Fred Drake cf = self.fromstring( 35198e3b29b5969b7738c4c2e1e21fea47357ea6aa0Fred Drake "[section]\n" 35298e3b29b5969b7738c4c2e1e21fea47357ea6aa0Fred Drake "name = value\n" 35398e3b29b5969b7738c4c2e1e21fea47357ea6aa0Fred Drake "key: |%(name)s| \n" 35498e3b29b5969b7738c4c2e1e21fea47357ea6aa0Fred Drake "getdefault: |%(default)s|\n" 35598e3b29b5969b7738c4c2e1e21fea47357ea6aa0Fred Drake "getname: |%(__name__)s|", 35698e3b29b5969b7738c4c2e1e21fea47357ea6aa0Fred Drake defaults={"default": "<default>"}) 35798e3b29b5969b7738c4c2e1e21fea47357ea6aa0Fred Drake L = list(cf.items("section")) 35898e3b29b5969b7738c4c2e1e21fea47357ea6aa0Fred Drake L.sort() 35998e3b29b5969b7738c4c2e1e21fea47357ea6aa0Fred Drake self.assertEqual(L, expected) 36098e3b29b5969b7738c4c2e1e21fea47357ea6aa0Fred Drake 361c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake 362c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drakeclass ConfigParserTestCase(TestCaseBase): 363392c6fc02d90f211dadc72448a07d9281260cb70Georg Brandl config_class = ConfigParser.ConfigParser 3640a1fa0e8b1fc888ae9978003c836e5a1953daef5Fred Drake allow_no_value = True 365c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake 366c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake def test_interpolation(self): 367e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtin rawval = { 368e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtin ConfigParser.ConfigParser: ("something %(with11)s " 369e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtin "lots of interpolation (11 steps)"), 370e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtin ConfigParser.SafeConfigParser: "%(with1)s", 371e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtin } 372c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake cf = self.get_interpolation_config() 373c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake eq = self.assertEqual 374c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake eq(cf.get("Foo", "getname"), "Foo") 375c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake eq(cf.get("Foo", "bar"), "something with interpolation (1 step)") 376c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake eq(cf.get("Foo", "bar9"), 377c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "something with lots of interpolation (9 steps)") 378c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake eq(cf.get("Foo", "bar10"), 379c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "something with lots of interpolation (10 steps)") 380392c6fc02d90f211dadc72448a07d9281260cb70Georg Brandl self.get_error(ConfigParser.InterpolationDepthError, "Foo", "bar11") 381c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake 3825478219e11ccd8230c07be731b4079832bd67c20Fred Drake def test_interpolation_missing_value(self): 383cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake self.get_interpolation_config() 384392c6fc02d90f211dadc72448a07d9281260cb70Georg Brandl e = self.get_error(ConfigParser.InterpolationError, 3855478219e11ccd8230c07be731b4079832bd67c20Fred Drake "Interpolation Error", "name") 3865478219e11ccd8230c07be731b4079832bd67c20Fred Drake self.assertEqual(e.reference, "reference") 3875478219e11ccd8230c07be731b4079832bd67c20Fred Drake self.assertEqual(e.section, "Interpolation Error") 3885478219e11ccd8230c07be731b4079832bd67c20Fred Drake self.assertEqual(e.option, "name") 3895478219e11ccd8230c07be731b4079832bd67c20Fred Drake 39098e3b29b5969b7738c4c2e1e21fea47357ea6aa0Fred Drake def test_items(self): 39198e3b29b5969b7738c4c2e1e21fea47357ea6aa0Fred Drake self.check_items_config([('default', '<default>'), 39298e3b29b5969b7738c4c2e1e21fea47357ea6aa0Fred Drake ('getdefault', '|<default>|'), 39398e3b29b5969b7738c4c2e1e21fea47357ea6aa0Fred Drake ('getname', '|section|'), 39498e3b29b5969b7738c4c2e1e21fea47357ea6aa0Fred Drake ('key', '|value|'), 39598e3b29b5969b7738c4c2e1e21fea47357ea6aa0Fred Drake ('name', 'value')]) 39698e3b29b5969b7738c4c2e1e21fea47357ea6aa0Fred Drake 3971cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger def test_set_nonstring_types(self): 3981cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger cf = self.newconfig() 3991cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger cf.add_section('non-string') 4001cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger cf.set('non-string', 'int', 1) 4011cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger cf.set('non-string', 'list', [0, 1, 1, 2, 3, 5, 8, 13, '%(']) 4021cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger cf.set('non-string', 'dict', {'pi': 3.14159, '%(': 1, 4031cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger '%(list)': '%(list)'}) 4041cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger cf.set('non-string', 'string_with_interpolation', '%(list)s') 4050a1fa0e8b1fc888ae9978003c836e5a1953daef5Fred Drake cf.set('non-string', 'no-value') 4061cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger self.assertEqual(cf.get('non-string', 'int', raw=True), 1) 4071cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger self.assertRaises(TypeError, cf.get, 'non-string', 'int') 4081cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger self.assertEqual(cf.get('non-string', 'list', raw=True), 4091cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger [0, 1, 1, 2, 3, 5, 8, 13, '%(']) 4101cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger self.assertRaises(TypeError, cf.get, 'non-string', 'list') 4111cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger self.assertEqual(cf.get('non-string', 'dict', raw=True), 4121cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger {'pi': 3.14159, '%(': 1, '%(list)': '%(list)'}) 4131cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger self.assertRaises(TypeError, cf.get, 'non-string', 'dict') 4141cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger self.assertEqual(cf.get('non-string', 'string_with_interpolation', 4151cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger raw=True), '%(list)s') 4161cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger self.assertRaises(ValueError, cf.get, 'non-string', 4171cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger 'string_with_interpolation', raw=False) 4180a1fa0e8b1fc888ae9978003c836e5a1953daef5Fred Drake self.assertEqual(cf.get('non-string', 'no-value'), None) 4191cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger 420e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtinclass MultilineValuesTestCase(TestCaseBase): 421e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtin config_class = ConfigParser.ConfigParser 422e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtin wonderful_spam = ("I'm having spam spam spam spam " 423e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtin "spam spam spam beaked beans spam " 424e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtin "spam spam and spam!").replace(' ', '\t\n') 425e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtin 426e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtin def setUp(self): 427e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtin cf = self.newconfig() 428e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtin for i in range(100): 429e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtin s = 'section{}'.format(i) 430e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtin cf.add_section(s) 431e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtin for j in range(10): 432e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtin cf.set(s, 'lovely_spam{}'.format(j), self.wonderful_spam) 433e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtin with open(test_support.TESTFN, 'w') as f: 434e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtin cf.write(f) 435e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtin 436e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtin def tearDown(self): 437e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtin os.unlink(test_support.TESTFN) 438e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtin 439e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtin def test_dominating_multiline_values(self): 440e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtin # we're reading from file because this is where the code changed 441e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtin # during performance updates in Python 3.2 442e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtin cf_from_file = self.newconfig() 443e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtin with open(test_support.TESTFN) as f: 444e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtin cf_from_file.readfp(f) 445e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtin self.assertEqual(cf_from_file.get('section8', 'lovely_spam4'), 446e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtin self.wonderful_spam.replace('\t\n', '\n')) 447c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake 448c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drakeclass RawConfigParserTestCase(TestCaseBase): 449392c6fc02d90f211dadc72448a07d9281260cb70Georg Brandl config_class = ConfigParser.RawConfigParser 450c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake 451c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake def test_interpolation(self): 452c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake cf = self.get_interpolation_config() 453c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake eq = self.assertEqual 454c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake eq(cf.get("Foo", "getname"), "%(__name__)s") 455c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake eq(cf.get("Foo", "bar"), 456c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "something %(with1)s interpolation (1 step)") 457c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake eq(cf.get("Foo", "bar9"), 458c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "something %(with9)s lots of interpolation (9 steps)") 459c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake eq(cf.get("Foo", "bar10"), 460c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "something %(with10)s lots of interpolation (10 steps)") 461c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake eq(cf.get("Foo", "bar11"), 462c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake "something %(with11)s lots of interpolation (11 steps)") 463c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake 46498e3b29b5969b7738c4c2e1e21fea47357ea6aa0Fred Drake def test_items(self): 46598e3b29b5969b7738c4c2e1e21fea47357ea6aa0Fred Drake self.check_items_config([('default', '<default>'), 46698e3b29b5969b7738c4c2e1e21fea47357ea6aa0Fred Drake ('getdefault', '|%(default)s|'), 46798e3b29b5969b7738c4c2e1e21fea47357ea6aa0Fred Drake ('getname', '|%(__name__)s|'), 46898e3b29b5969b7738c4c2e1e21fea47357ea6aa0Fred Drake ('key', '|%(name)s|'), 46998e3b29b5969b7738c4c2e1e21fea47357ea6aa0Fred Drake ('name', 'value')]) 47098e3b29b5969b7738c4c2e1e21fea47357ea6aa0Fred Drake 4711cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger def test_set_nonstring_types(self): 4721cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger cf = self.newconfig() 4731cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger cf.add_section('non-string') 4741cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger cf.set('non-string', 'int', 1) 4751cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger cf.set('non-string', 'list', [0, 1, 1, 2, 3, 5, 8, 13]) 4761cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger cf.set('non-string', 'dict', {'pi': 3.14159}) 4771cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger self.assertEqual(cf.get('non-string', 'int'), 1) 4781cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger self.assertEqual(cf.get('non-string', 'list'), 4791cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger [0, 1, 1, 2, 3, 5, 8, 13]) 4801cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger self.assertEqual(cf.get('non-string', 'dict'), {'pi': 3.14159}) 481ab9b32c0778655db5d2bf3f4c34d3a205d87a1afTim Peters 482c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake 4830eebd5cef982686b9438b35d4c4ed395f437ff3eFred Drakeclass SafeConfigParserTestCase(ConfigParserTestCase): 484392c6fc02d90f211dadc72448a07d9281260cb70Georg Brandl config_class = ConfigParser.SafeConfigParser 4850eebd5cef982686b9438b35d4c4ed395f437ff3eFred Drake 4860eebd5cef982686b9438b35d4c4ed395f437ff3eFred Drake def test_safe_interpolation(self): 4870eebd5cef982686b9438b35d4c4ed395f437ff3eFred Drake # See http://www.python.org/sf/511737 4880eebd5cef982686b9438b35d4c4ed395f437ff3eFred Drake cf = self.fromstring("[section]\n" 4890eebd5cef982686b9438b35d4c4ed395f437ff3eFred Drake "option1=xxx\n" 4900eebd5cef982686b9438b35d4c4ed395f437ff3eFred Drake "option2=%(option1)s/xxx\n" 4910eebd5cef982686b9438b35d4c4ed395f437ff3eFred Drake "ok=%(option1)s/%%s\n" 4920eebd5cef982686b9438b35d4c4ed395f437ff3eFred Drake "not_ok=%(option2)s/%%s") 4930eebd5cef982686b9438b35d4c4ed395f437ff3eFred Drake self.assertEqual(cf.get("section", "ok"), "xxx/%s") 4940eebd5cef982686b9438b35d4c4ed395f437ff3eFred Drake self.assertEqual(cf.get("section", "not_ok"), "xxx/xxx/%s") 4950eebd5cef982686b9438b35d4c4ed395f437ff3eFred Drake 49692a6baed7bfae3eaad31c47c5d80348b05a62d8cGeorg Brandl def test_set_malformatted_interpolation(self): 49792a6baed7bfae3eaad31c47c5d80348b05a62d8cGeorg Brandl cf = self.fromstring("[sect]\n" 49892a6baed7bfae3eaad31c47c5d80348b05a62d8cGeorg Brandl "option1=foo\n") 49992a6baed7bfae3eaad31c47c5d80348b05a62d8cGeorg Brandl 50092a6baed7bfae3eaad31c47c5d80348b05a62d8cGeorg Brandl self.assertEqual(cf.get('sect', "option1"), "foo") 50192a6baed7bfae3eaad31c47c5d80348b05a62d8cGeorg Brandl 50292a6baed7bfae3eaad31c47c5d80348b05a62d8cGeorg Brandl self.assertRaises(ValueError, cf.set, "sect", "option1", "%foo") 50392a6baed7bfae3eaad31c47c5d80348b05a62d8cGeorg Brandl self.assertRaises(ValueError, cf.set, "sect", "option1", "foo%") 50492a6baed7bfae3eaad31c47c5d80348b05a62d8cGeorg Brandl self.assertRaises(ValueError, cf.set, "sect", "option1", "f%oo") 50592a6baed7bfae3eaad31c47c5d80348b05a62d8cGeorg Brandl 50692a6baed7bfae3eaad31c47c5d80348b05a62d8cGeorg Brandl self.assertEqual(cf.get('sect', "option1"), "foo") 50792a6baed7bfae3eaad31c47c5d80348b05a62d8cGeorg Brandl 50821cf5ee6fdb190393d27b03f6b3c5453d97859dfGeorg Brandl # bug #5741: double percents are *not* malformed 50921cf5ee6fdb190393d27b03f6b3c5453d97859dfGeorg Brandl cf.set("sect", "option2", "foo%%bar") 51021cf5ee6fdb190393d27b03f6b3c5453d97859dfGeorg Brandl self.assertEqual(cf.get("sect", "option2"), "foo%bar") 51121cf5ee6fdb190393d27b03f6b3c5453d97859dfGeorg Brandl 5121cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger def test_set_nonstring_types(self): 5131cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger cf = self.fromstring("[sect]\n" 5141cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger "option1=foo\n") 5151cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger # Check that we get a TypeError when setting non-string values 5161cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger # in an existing section: 5171cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger self.assertRaises(TypeError, cf.set, "sect", "option1", 1) 5181cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger self.assertRaises(TypeError, cf.set, "sect", "option1", 1.0) 5191cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger self.assertRaises(TypeError, cf.set, "sect", "option1", object()) 5201cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger self.assertRaises(TypeError, cf.set, "sect", "option2", 1) 5211cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger self.assertRaises(TypeError, cf.set, "sect", "option2", 1.0) 5221cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger self.assertRaises(TypeError, cf.set, "sect", "option2", object()) 5231cbf206d322ad1fac12b4bb5a64d501ca021a61dDavid Goodger 524b12f0b581a6f268d0611c87012d1273aeca220b8Facundo Batista def test_add_section_default_1(self): 525b12f0b581a6f268d0611c87012d1273aeca220b8Facundo Batista cf = self.newconfig() 526b12f0b581a6f268d0611c87012d1273aeca220b8Facundo Batista self.assertRaises(ValueError, cf.add_section, "default") 527b12f0b581a6f268d0611c87012d1273aeca220b8Facundo Batista 528b12f0b581a6f268d0611c87012d1273aeca220b8Facundo Batista def test_add_section_default_2(self): 529b12f0b581a6f268d0611c87012d1273aeca220b8Facundo Batista cf = self.newconfig() 530b12f0b581a6f268d0611c87012d1273aeca220b8Facundo Batista self.assertRaises(ValueError, cf.add_section, "DEFAULT") 531b12f0b581a6f268d0611c87012d1273aeca220b8Facundo Batista 532cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake 533cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drakeclass SafeConfigParserTestCaseNoValue(SafeConfigParserTestCase): 534cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake allow_no_value = True 535cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake 5363ea5224c43663ee4a18e8a08ca927fe8a4790f24Raymond Hettingerclass TestChainMap(unittest.TestCase): 5373ea5224c43663ee4a18e8a08ca927fe8a4790f24Raymond Hettinger def test_issue_12717(self): 5383ea5224c43663ee4a18e8a08ca927fe8a4790f24Raymond Hettinger d1 = dict(red=1, green=2) 5393ea5224c43663ee4a18e8a08ca927fe8a4790f24Raymond Hettinger d2 = dict(green=3, blue=4) 5403ea5224c43663ee4a18e8a08ca927fe8a4790f24Raymond Hettinger dcomb = d2.copy() 5413ea5224c43663ee4a18e8a08ca927fe8a4790f24Raymond Hettinger dcomb.update(d1) 5423ea5224c43663ee4a18e8a08ca927fe8a4790f24Raymond Hettinger cm = ConfigParser._Chainmap(d1, d2) 5433ea5224c43663ee4a18e8a08ca927fe8a4790f24Raymond Hettinger self.assertIsInstance(cm.keys(), list) 5443ea5224c43663ee4a18e8a08ca927fe8a4790f24Raymond Hettinger self.assertEqual(set(cm.keys()), set(dcomb.keys())) # keys() 5453ea5224c43663ee4a18e8a08ca927fe8a4790f24Raymond Hettinger self.assertEqual(set(cm.values()), set(dcomb.values())) # values() 5463ea5224c43663ee4a18e8a08ca927fe8a4790f24Raymond Hettinger self.assertEqual(set(cm.items()), set(dcomb.items())) # items() 5473ea5224c43663ee4a18e8a08ca927fe8a4790f24Raymond Hettinger self.assertEqual(set(cm), set(dcomb)) # __iter__ () 5483ea5224c43663ee4a18e8a08ca927fe8a4790f24Raymond Hettinger self.assertEqual(cm, dcomb) # __eq__() 5493ea5224c43663ee4a18e8a08ca927fe8a4790f24Raymond Hettinger self.assertEqual([cm[k] for k in dcomb], dcomb.values()) # __getitem__() 5503ea5224c43663ee4a18e8a08ca927fe8a4790f24Raymond Hettinger klist = 'red green blue black brown'.split() 5513ea5224c43663ee4a18e8a08ca927fe8a4790f24Raymond Hettinger self.assertEqual([cm.get(k, 10) for k in klist], 5523ea5224c43663ee4a18e8a08ca927fe8a4790f24Raymond Hettinger [dcomb.get(k, 10) for k in klist]) # get() 5533ea5224c43663ee4a18e8a08ca927fe8a4790f24Raymond Hettinger self.assertEqual([k in cm for k in klist], 5543ea5224c43663ee4a18e8a08ca927fe8a4790f24Raymond Hettinger [k in dcomb for k in klist]) # __contains__() 555030aa35a1b5dc9a91b44abeda80d32df8a8d8952Ezio Melotti with test_support.check_py3k_warnings(): 556030aa35a1b5dc9a91b44abeda80d32df8a8d8952Ezio Melotti self.assertEqual([cm.has_key(k) for k in klist], 557030aa35a1b5dc9a91b44abeda80d32df8a8d8952Ezio Melotti [dcomb.has_key(k) for k in klist]) # has_key() 558cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake 559a1e627d61c57fefbfdabf308b33de75e08ca5374Fred Drakeclass Issue7005TestCase(unittest.TestCase): 560a1e627d61c57fefbfdabf308b33de75e08ca5374Fred Drake """Test output when None is set() as a value and allow_no_value == False. 561a1e627d61c57fefbfdabf308b33de75e08ca5374Fred Drake 562a1e627d61c57fefbfdabf308b33de75e08ca5374Fred Drake http://bugs.python.org/issue7005 563a1e627d61c57fefbfdabf308b33de75e08ca5374Fred Drake 564a1e627d61c57fefbfdabf308b33de75e08ca5374Fred Drake """ 565a1e627d61c57fefbfdabf308b33de75e08ca5374Fred Drake 566a1e627d61c57fefbfdabf308b33de75e08ca5374Fred Drake expected_output = "[section]\noption = None\n\n" 567a1e627d61c57fefbfdabf308b33de75e08ca5374Fred Drake 568a1e627d61c57fefbfdabf308b33de75e08ca5374Fred Drake def prepare(self, config_class): 569a1e627d61c57fefbfdabf308b33de75e08ca5374Fred Drake # This is the default, but that's the point. 570a1e627d61c57fefbfdabf308b33de75e08ca5374Fred Drake cp = config_class(allow_no_value=False) 571a1e627d61c57fefbfdabf308b33de75e08ca5374Fred Drake cp.add_section("section") 572a1e627d61c57fefbfdabf308b33de75e08ca5374Fred Drake cp.set("section", "option", None) 573a1e627d61c57fefbfdabf308b33de75e08ca5374Fred Drake sio = StringIO.StringIO() 574a1e627d61c57fefbfdabf308b33de75e08ca5374Fred Drake cp.write(sio) 575a1e627d61c57fefbfdabf308b33de75e08ca5374Fred Drake return sio.getvalue() 576a1e627d61c57fefbfdabf308b33de75e08ca5374Fred Drake 577a1e627d61c57fefbfdabf308b33de75e08ca5374Fred Drake def test_none_as_value_stringified(self): 578a1e627d61c57fefbfdabf308b33de75e08ca5374Fred Drake output = self.prepare(ConfigParser.ConfigParser) 579a1e627d61c57fefbfdabf308b33de75e08ca5374Fred Drake self.assertEqual(output, self.expected_output) 580a1e627d61c57fefbfdabf308b33de75e08ca5374Fred Drake 581a1e627d61c57fefbfdabf308b33de75e08ca5374Fred Drake def test_none_as_value_stringified_raw(self): 582a1e627d61c57fefbfdabf308b33de75e08ca5374Fred Drake output = self.prepare(ConfigParser.RawConfigParser) 583a1e627d61c57fefbfdabf308b33de75e08ca5374Fred Drake self.assertEqual(output, self.expected_output) 584a1e627d61c57fefbfdabf308b33de75e08ca5374Fred Drake 585a1e627d61c57fefbfdabf308b33de75e08ca5374Fred Drake 586a00bcac00382be7f99ef30e24ec029268efa0cbfMartin v. Löwisclass SortedTestCase(RawConfigParserTestCase): 587a00bcac00382be7f99ef30e24ec029268efa0cbfMartin v. Löwis def newconfig(self, defaults=None): 588a00bcac00382be7f99ef30e24ec029268efa0cbfMartin v. Löwis self.cf = self.config_class(defaults=defaults, dict_type=SortedDict) 589a00bcac00382be7f99ef30e24ec029268efa0cbfMartin v. Löwis return self.cf 590a00bcac00382be7f99ef30e24ec029268efa0cbfMartin v. Löwis 591a00bcac00382be7f99ef30e24ec029268efa0cbfMartin v. Löwis def test_sorted(self): 592a00bcac00382be7f99ef30e24ec029268efa0cbfMartin v. Löwis self.fromstring("[b]\n" 593a00bcac00382be7f99ef30e24ec029268efa0cbfMartin v. Löwis "o4=1\n" 594a00bcac00382be7f99ef30e24ec029268efa0cbfMartin v. Löwis "o3=2\n" 595a00bcac00382be7f99ef30e24ec029268efa0cbfMartin v. Löwis "o2=3\n" 596a00bcac00382be7f99ef30e24ec029268efa0cbfMartin v. Löwis "o1=4\n" 597a00bcac00382be7f99ef30e24ec029268efa0cbfMartin v. Löwis "[a]\n" 598f733abb7831d6566cb0fccd0550d58ec3b7f05a4Tim Peters "k=v\n") 599a00bcac00382be7f99ef30e24ec029268efa0cbfMartin v. Löwis output = StringIO.StringIO() 600a00bcac00382be7f99ef30e24ec029268efa0cbfMartin v. Löwis self.cf.write(output) 6012623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(output.getvalue(), 6022623a37852153363335956afab010cb0beb7e74eEzio Melotti "[a]\n" 6032623a37852153363335956afab010cb0beb7e74eEzio Melotti "k = v\n\n" 6042623a37852153363335956afab010cb0beb7e74eEzio Melotti "[b]\n" 6052623a37852153363335956afab010cb0beb7e74eEzio Melotti "o1 = 4\n" 6062623a37852153363335956afab010cb0beb7e74eEzio Melotti "o2 = 3\n" 6072623a37852153363335956afab010cb0beb7e74eEzio Melotti "o3 = 2\n" 6082623a37852153363335956afab010cb0beb7e74eEzio Melotti "o4 = 1\n\n") 6090eebd5cef982686b9438b35d4c4ed395f437ff3eFred Drake 610cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake 611631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langaclass ExceptionPicklingTestCase(unittest.TestCase): 612631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa """Tests for issue #13760: ConfigParser exceptions are not picklable.""" 613631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa 614631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa def test_error(self): 615631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa import pickle 616631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa e1 = ConfigParser.Error('value') 617655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka for proto in range(pickle.HIGHEST_PROTOCOL + 1): 618655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka pickled = pickle.dumps(e1, proto) 619655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka e2 = pickle.loads(pickled) 620655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.message, e2.message) 621655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(repr(e1), repr(e2)) 622631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa 623631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa def test_nosectionerror(self): 624631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa import pickle 625631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa e1 = ConfigParser.NoSectionError('section') 626655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka for proto in range(pickle.HIGHEST_PROTOCOL + 1): 627655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka pickled = pickle.dumps(e1, proto) 628655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka e2 = pickle.loads(pickled) 629655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.message, e2.message) 630655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.args, e2.args) 631655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.section, e2.section) 632655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(repr(e1), repr(e2)) 633631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa 634631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa def test_nooptionerror(self): 635631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa import pickle 636631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa e1 = ConfigParser.NoOptionError('option', 'section') 637655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka for proto in range(pickle.HIGHEST_PROTOCOL + 1): 638655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka pickled = pickle.dumps(e1, proto) 639655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka e2 = pickle.loads(pickled) 640655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.message, e2.message) 641655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.args, e2.args) 642655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.section, e2.section) 643655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.option, e2.option) 644655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(repr(e1), repr(e2)) 645631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa 646631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa def test_duplicatesectionerror(self): 647631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa import pickle 648631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa e1 = ConfigParser.DuplicateSectionError('section') 649655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka for proto in range(pickle.HIGHEST_PROTOCOL + 1): 650655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka pickled = pickle.dumps(e1, proto) 651655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka e2 = pickle.loads(pickled) 652655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.message, e2.message) 653655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.args, e2.args) 654655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.section, e2.section) 655655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(repr(e1), repr(e2)) 656631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa 657631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa def test_interpolationerror(self): 658631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa import pickle 659631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa e1 = ConfigParser.InterpolationError('option', 'section', 'msg') 660655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka for proto in range(pickle.HIGHEST_PROTOCOL + 1): 661655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka pickled = pickle.dumps(e1, proto) 662655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka e2 = pickle.loads(pickled) 663655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.message, e2.message) 664655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.args, e2.args) 665655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.section, e2.section) 666655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.option, e2.option) 667655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(repr(e1), repr(e2)) 668631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa 669631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa def test_interpolationmissingoptionerror(self): 670631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa import pickle 671631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa e1 = ConfigParser.InterpolationMissingOptionError('option', 'section', 672631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa 'rawval', 'reference') 673655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka for proto in range(pickle.HIGHEST_PROTOCOL + 1): 674655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka pickled = pickle.dumps(e1, proto) 675655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka e2 = pickle.loads(pickled) 676655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.message, e2.message) 677655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.args, e2.args) 678655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.section, e2.section) 679655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.option, e2.option) 680655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.reference, e2.reference) 681655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(repr(e1), repr(e2)) 682631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa 683631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa def test_interpolationsyntaxerror(self): 684631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa import pickle 685631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa e1 = ConfigParser.InterpolationSyntaxError('option', 'section', 'msg') 686655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka for proto in range(pickle.HIGHEST_PROTOCOL + 1): 687655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka pickled = pickle.dumps(e1, proto) 688655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka e2 = pickle.loads(pickled) 689655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.message, e2.message) 690655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.args, e2.args) 691655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.section, e2.section) 692655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.option, e2.option) 693655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(repr(e1), repr(e2)) 694631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa 695631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa def test_interpolationdeptherror(self): 696631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa import pickle 697631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa e1 = ConfigParser.InterpolationDepthError('option', 'section', 698631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa 'rawval') 699655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka for proto in range(pickle.HIGHEST_PROTOCOL + 1): 700655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka pickled = pickle.dumps(e1, proto) 701655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka e2 = pickle.loads(pickled) 702655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.message, e2.message) 703655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.args, e2.args) 704655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.section, e2.section) 705655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.option, e2.option) 706655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(repr(e1), repr(e2)) 707631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa 708631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa def test_parsingerror(self): 709631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa import pickle 710631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa e1 = ConfigParser.ParsingError('source') 711631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa e1.append(1, 'line1') 712631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa e1.append(2, 'line2') 713631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa e1.append(3, 'line3') 714655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka for proto in range(pickle.HIGHEST_PROTOCOL + 1): 715655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka pickled = pickle.dumps(e1, proto) 716655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka e2 = pickle.loads(pickled) 717655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.message, e2.message) 718655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.args, e2.args) 719655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.filename, e2.filename) 720655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.errors, e2.errors) 721655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(repr(e1), repr(e2)) 722631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa 723631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa def test_missingsectionheadererror(self): 724631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa import pickle 725631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa e1 = ConfigParser.MissingSectionHeaderError('filename', 123, 'line') 726655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka for proto in range(pickle.HIGHEST_PROTOCOL + 1): 727655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka pickled = pickle.dumps(e1, proto) 728655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka e2 = pickle.loads(pickled) 729655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.message, e2.message) 730655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.args, e2.args) 731655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.line, e2.line) 732655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.filename, e2.filename) 733655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(e1.lineno, e2.lineno) 734655720e2758a15c85effb340ff65f4b93e7cc7a7Serhiy Storchaka self.assertEqual(repr(e1), repr(e2)) 735631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa 736631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa 737c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drakedef test_main(): 73821d3a32b99c5763444c34c189ef653ac9745f3c4Walter Dörwald test_support.run_unittest( 73921d3a32b99c5763444c34c189ef653ac9745f3c4Walter Dörwald ConfigParserTestCase, 740e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtin MultilineValuesTestCase, 74121d3a32b99c5763444c34c189ef653ac9745f3c4Walter Dörwald RawConfigParserTestCase, 742a00bcac00382be7f99ef30e24ec029268efa0cbfMartin v. Löwis SafeConfigParserTestCase, 743cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake SafeConfigParserTestCaseNoValue, 744e4334b4949be3cbb1e8602291deb650bb04642abBrian Curtin SortedTestCase, 745a1e627d61c57fefbfdabf308b33de75e08ca5374Fred Drake Issue7005TestCase, 7463ea5224c43663ee4a18e8a08ca927fe8a4790f24Raymond Hettinger TestChainMap, 747631c25800068ce8f1d97157fd4d173a82ba32e62Łukasz Langa ExceptionPicklingTestCase, 748cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake ) 749cc43b56960b46734e0d0e19521376d5fdb6af587Fred Drake 750c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake 751c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drakeif __name__ == "__main__": 752c6f2891af8e8900a92384ad140402bef894a5ca1Fred Drake test_main() 753