diff options
author | Fred Drake <fdrake@acm.org> | 2000-09-27 22:45:25 (GMT) |
---|---|---|
committer | Fred Drake <fdrake@acm.org> | 2000-09-27 22:45:25 (GMT) |
commit | 8ef6767e004267ccb4bbbe0a7762d8d69a8c62c6 (patch) | |
tree | 4b33a0edcc58e133f62acf1ff318d2afa4232cfc /Lib | |
parent | 2a37f9f862b81056601584f53a2d5ef88c85d566 (diff) | |
download | cpython-8ef6767e004267ccb4bbbe0a7762d8d69a8c62c6.zip cpython-8ef6767e004267ccb4bbbe0a7762d8d69a8c62c6.tar.gz cpython-8ef6767e004267ccb4bbbe0a7762d8d69a8c62c6.tar.bz2 |
Regression test for ConfigParser module.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/test/output/test_cfgparser | 51 | ||||
-rw-r--r-- | Lib/test/test_cfgparser.py | 144 |
2 files changed, 195 insertions, 0 deletions
diff --git a/Lib/test/output/test_cfgparser b/Lib/test/output/test_cfgparser new file mode 100644 index 0000000..2849905 --- /dev/null +++ b/Lib/test/output/test_cfgparser @@ -0,0 +1,51 @@ +test_cfgparser + +Testing basic accessors... +['Commented Bar', 'Foo Bar', 'Spacey Bar'] +Commented Bar: ['foo'] +Foo Bar: ['foo'] +Spacey Bar: ['foo'] +'bar' +'bar' +'bar' +__name__ "option" properly hidden by the API. + +Testing value interpolation... +'Foo' +'something with interpolation (1 step)' +'something with lots of interpolation (9 steps)' +'something with lots of interpolation (10 steps)' +Caught expected InterpolationDepthError : +Value interpolation too deeply recursive: + section: [Foo] + option : bar11 + rawval : something %(with11)s lots of interpolation (11 steps) + + +Testing for parsing errors... +Caught expected exception: File contains parsing errors: <???> + [line 2]: ' extra-spaces: splat\012' +Caught expected exception: File contains parsing errors: <???> + [line 2]: ' extra-spaces= splat\012' +Caught expected exception: File contains parsing errors: <???> + [line 2]: 'option-without-value\012' +Caught expected exception: File contains parsing errors: <???> + [line 2]: ':value-without-option-name\012' +Caught expected exception: File contains parsing errors: <???> + [line 2]: '=value-without-option-name\012' +Caught expected exception: File contains no section headers. +file: <???>, line: 1 +'No Section!\012' + +Testing query interface... +[] +Has section 'Foo'? 0 +Caught expected NoSectionError: No section: Foo +Caught expected NoSectionError: No section: foo +Caught expected NoSectionError : +No section: foo +Caught expected NoOptionError : +No option `bar' in section: foo + +Testing miscellaneous error conditions... +Caught expected DuplicateSectionError: Section Foo already exists 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() |