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 + -
显示快捷键?