mirror of https://github.com/python/cpython
166 lines
5.0 KiB
Python
166 lines
5.0 KiB
Python
import ConfigParser
|
|
import StringIO
|
|
|
|
from test_support import TestFailed
|
|
|
|
|
|
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 `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.'
|
|
|
|
# Make sure the right things happen for remove_option();
|
|
# added to include check for SourceForge bug #123324:
|
|
if not cf.remove_option('Foo Bar', 'foo'):
|
|
raise TestFailed(
|
|
"remove_option() failed to report existance of option")
|
|
if cf.has_option('Foo Bar', 'foo'):
|
|
raise TestFailed("remove_option() failed to remove option")
|
|
if cf.remove_option('Foo Bar', 'foo'):
|
|
raise TestFailed(
|
|
"remove_option() failed to report non-existance of option"
|
|
" that was removed")
|
|
try:
|
|
cf.remove_option('No Such Section', 'foo')
|
|
except ConfigParser.NoSectionError:
|
|
pass
|
|
else:
|
|
raise TestFailed(
|
|
"remove_option() failed to report non-existance of option"
|
|
" that never existed")
|
|
|
|
|
|
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()
|