diff options
Diffstat (limited to 'Lib/test/test_cfgparser.py')
-rw-r--r-- | Lib/test/test_cfgparser.py | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/Lib/test/test_cfgparser.py b/Lib/test/test_cfgparser.py new file mode 100644 index 0000000..cf6bb89 --- /dev/null +++ b/Lib/test/test_cfgparser.py @@ -0,0 +1,144 @@ +import ConfigParser +import StringIO + +def basic(src): + print + print "Testing basic accessors..." + cf = ConfigParser.ConfigParser() + sio = StringIO.StringIO(src) + cf.readfp(sio) + L = cf.sections() + L.sort() + print L + for s in L: + print "%s: %s" % (s, cf.options(s)) + + # The use of spaces in the section names serves as a regression test for + # SourceForge bug #115357. + # + # http://sourceforge.net/bugs/?func=detailbug&group_id=5470&bug_id=115357 + # + print "test for SourceForge bug #115357" + print `cf.get('Foo Bar', 'foo', raw=1)` + print `cf.get('Spacey Bar', 'foo', raw=1)` + print `cf.get('Commented Bar', 'foo', raw=1)` + + if '__name__' in cf.options("Foo Bar"): + print '__name__ "option" should not be exposed by the API!' + else: + print '__name__ "option" properly hidden by the API.' + +def interpolation(src): + print + print "Testing value interpolation..." + cf = ConfigParser.ConfigParser({"getname": "%(__name__)s"}) + sio = StringIO.StringIO(src) + cf.readfp(sio) + print `cf.get("Foo", "getname")` + print `cf.get("Foo", "bar")` + print `cf.get("Foo", "bar9")` + print `cf.get("Foo", "bar10")` + expect_get_error(cf, ConfigParser.InterpolationDepthError, "Foo", "bar11") + +def parse_errors(): + print + print "Testing for parsing errors..." + expect_parse_error(ConfigParser.ParsingError, + """[Foo]\n extra-spaces: splat\n""") + expect_parse_error(ConfigParser.ParsingError, + """[Foo]\n extra-spaces= splat\n""") + expect_parse_error(ConfigParser.ParsingError, + """[Foo]\noption-without-value\n""") + expect_parse_error(ConfigParser.ParsingError, + """[Foo]\n:value-without-option-name\n""") + expect_parse_error(ConfigParser.ParsingError, + """[Foo]\n=value-without-option-name\n""") + expect_parse_error(ConfigParser.MissingSectionHeaderError, + """No Section!\n""") + +def query_errors(): + print + print "Testing query interface..." + cf = ConfigParser.ConfigParser() + print cf.sections() + print "Has section 'Foo'?", cf.has_section("Foo") + try: + cf.options("Foo") + except ConfigParser.NoSectionError, e: + print "Caught expected NoSectionError:", e + else: + print "Failed to catch expected NoSectionError from options()" + try: + cf.set("foo", "bar", "value") + except ConfigParser.NoSectionError, e: + print "Caught expected NoSectionError:", e + else: + print "Failed to catch expected NoSectionError from set()" + expect_get_error(cf, ConfigParser.NoSectionError, "foo", "bar") + cf.add_section("foo") + expect_get_error(cf, ConfigParser.NoOptionError, "foo", "bar") + +def weird_errors(): + print + print "Testing miscellaneous error conditions..." + cf = ConfigParser.ConfigParser() + cf.add_section("Foo") + try: + cf.add_section("Foo") + except ConfigParser.DuplicateSectionError, e: + print "Caught expected DuplicateSectionError:", e + else: + print "Failed to catch expected DuplicateSectionError" + +def expect_get_error(cf, exctype, section, option, raw=0): + try: + cf.get(section, option, raw=raw) + except exctype, e: + print "Caught expected", exctype.__name__, ":" + print e + else: + print "Failed to catch expected", exctype.__name__ + +def expect_parse_error(exctype, src): + cf = ConfigParser.ConfigParser() + sio = StringIO.StringIO(src) + try: + cf.readfp(sio) + except exctype, e: + print "Caught expected exception:", e + else: + print "Failed to catch expected", exctype.__name__ + +basic(r""" +[Foo Bar] +foo=bar +[Spacey Bar] +foo = bar +[Commented Bar] +foo: bar ; comment +""") +interpolation(r""" +[Foo] +bar=something %(with1)s interpolation (1 step) +bar9=something %(with9)s lots of interpolation (9 steps) +bar10=something %(with10)s lots of interpolation (10 steps) +bar11=something %(with11)s lots of interpolation (11 steps) +with11=%(with10)s +with10=%(with9)s +with9=%(with8)s +with8=%(with7)s +with7=%(with6)s +with6=%(with5)s +with5=%(with4)s +with4=%(with3)s +with3=%(with2)s +with2=%(with1)s +with1=with + +[Mutual Recursion] +foo=%(bar)s +bar=%(foo)s +""") +parse_errors() +query_errors() +weird_errors() |