test_cfgparser.py

来自「mallet是自然语言处理、机器学习领域的一个开源项目。」· Python 代码 · 共 285 行

PY
285
字号
import ConfigParserimport StringIOfrom test_support import TestFailed, verifydef basic(src):    print "Testing basic accessors..."    cf = ConfigParser.ConfigParser()    sio = StringIO.StringIO(src)    cf.readfp(sio)    L = cf.sections()    L.sort()    verify(L == [r'Commented Bar',                 r'Foo Bar',                 r'Internationalized Stuff',                 r'Long Line',                 r'Section\with$weird%characters[' '\t',                 r'Spaces',                 r'Spacey Bar',                 ],           "unexpected list of section names")    # 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    verify(cf.get('Foo Bar', 'foo', raw=1) == 'bar')    verify(cf.get('Spacey Bar', 'foo', raw=1) == 'bar')    verify(cf.get('Commented Bar', 'foo', raw=1) == 'bar')    verify(cf.get('Spaces', 'key with spaces', raw=1) == 'value')    verify(cf.get('Spaces', 'another with spaces', raw=1) == 'splat!')    verify('__name__' not in cf.options("Foo Bar"),           '__name__ "option" should not be exposed by the API!')    # Make sure the right things happen for remove_option();    # added to include check for SourceForge bug #123324:    verify(cf.remove_option('Foo Bar', 'foo'),           "remove_option() failed to report existance of option")    verify(not cf.has_option('Foo Bar', 'foo'),           "remove_option() failed to remove option")    verify(not cf.remove_option('Foo Bar', 'foo'),           "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")    verify(cf.get('Long Line', 'foo', raw=1) ==           'this line is much, much longer than my editor\nlikes it.')def write(src):    print "Testing writing of files..."    cf = ConfigParser.ConfigParser()    sio = StringIO.StringIO(src)    cf.readfp(sio)    output = StringIO.StringIO()    cf.write(output)    verify(output, """[DEFAULT]foo = another very        long line[Long Line]foo = this line is much, much longer than my editor        likes it.""")def case_sensitivity():    print "Testing case sensitivity..."    cf = ConfigParser.ConfigParser()    cf.add_section("A")    cf.add_section("a")    L = cf.sections()    L.sort()    verify(L == ["A", "a"])    cf.set("a", "B", "value")    verify(cf.options("a") == ["b"])    verify(cf.get("a", "b", raw=1) == "value",           "could not locate option, expecting case-insensitive option names")    verify(cf.has_option("a", "b"))    cf.set("A", "A-B", "A-B value")    for opt in ("a-b", "A-b", "a-B", "A-B"):        verify(cf.has_option("A", opt),               "has_option() returned false for option which should exist")    verify(cf.options("A") == ["a-b"])    verify(cf.options("a") == ["b"])    cf.remove_option("a", "B")    verify(cf.options("a") == [])    # SF bug #432369:    cf = ConfigParser.ConfigParser()    sio = StringIO.StringIO("[MySection]\nOption: first line\n\tsecond line\n")    cf.readfp(sio)    verify(cf.options("MySection") == ["option"])    verify(cf.get("MySection", "Option") == "first line\nsecond line")    # SF bug #561822:    cf = ConfigParser.ConfigParser(defaults={"key":"value"})    cf.readfp(StringIO.StringIO("[section]\nnekey=nevalue\n"))    verify(cf.has_option("section", "Key"))def boolean(src):    print "Testing interpretation of boolean Values..."    cf = ConfigParser.ConfigParser()    sio = StringIO.StringIO(src)    cf.readfp(sio)    for x in range(1, 5):        verify(cf.getboolean('BOOLTEST', 't%d' % (x)) == 1)    for x in range(1, 5):        verify(cf.getboolean('BOOLTEST', 'f%d' % (x)) == 0)    for x in range(1, 5):        try:            cf.getboolean('BOOLTEST', 'e%d' % (x))        except ValueError:            pass        else:            raise TestFailed(                "getboolean() failed to report a non boolean value")def interpolation(src):    print "Testing value interpolation..."    cf = ConfigParser.ConfigParser({"getname": "%(__name__)s"})    sio = StringIO.StringIO(src)    cf.readfp(sio)    verify(cf.get("Foo", "getname") == "Foo")    verify(cf.get("Foo", "bar") == "something with interpolation (1 step)")    verify(cf.get("Foo", "bar9")           == "something with lots of interpolation (9 steps)")    verify(cf.get("Foo", "bar10")           == "something with lots of interpolation (10 steps)")    expect_get_error(cf, ConfigParser.InterpolationDepthError, "Foo", "bar11")def parse_errors():    print "Testing parse 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 "Testing query interface..."    cf = ConfigParser.ConfigParser()    verify(cf.sections() == [],           "new ConfigParser should have no defined sections")    verify(not cf.has_section("Foo"),           "new ConfigParser should have no acknowledged sections")    try:        cf.options("Foo")    except ConfigParser.NoSectionError, e:        pass    else:        raise TestFailed(            "Failed to catch expected NoSectionError from options()")    try:        cf.set("foo", "bar", "value")    except ConfigParser.NoSectionError, e:        pass    else:        raise TestFailed("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 "Testing miscellaneous error conditions..."    cf = ConfigParser.ConfigParser()    cf.add_section("Foo")    try:        cf.add_section("Foo")    except ConfigParser.DuplicateSectionError, e:        pass    else:        raise TestFailed("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:        pass    else:        raise TestFailed("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:        pass    else:        raise TestFailed("Failed to catch expected " + exctype.__name__)basic(r"""[Foo Bar]foo=bar[Spacey Bar]foo = bar[Commented Bar]foo: bar ; comment[Long Line]foo: this line is much, much longer than my editor   likes it.[Section\with$weird%characters[""" '\t' r"""][Internationalized Stuff]foo[bg]: Bulgarianfoo=Defaultfoo[en]=Englishfoo[de]=Deutsch[Spaces]key with spaces : valueanother with spaces = splat!""")write("""[Long Line]foo: this line is much, much longer than my editor   likes it.[DEFAULT]foo: another very long line""")case_sensitivity()boolean(r"""[BOOLTEST]T1=1T2=TRUET3=TrueT4=oNT5=yesF1=0F2=FALSEF3=FalseF4=oFFF5=nOE1=2E2=fooE3=-1E4=0.1E5=FALSE AND MORE""")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)swith10=%(with9)swith9=%(with8)swith8=%(with7)swith7=%(with6)swith6=%(with5)swith5=%(with4)swith4=%(with3)swith3=%(with2)swith2=%(with1)swith1=with[Mutual Recursion]foo=%(bar)sbar=%(foo)s""")parse_errors()query_errors()weird_errors()

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?