X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=t%2Fmoe%2Fconfig_test.py;h=d6eb51ba47ab465079bf46b435ae9d28abb833da;hb=9f4eaf4234e6a7074fca72a3a9229d75035daac8;hp=b0ba61254a730b0c17ca7d150f17138f19bda33c;hpb=8020078dd0c80b9b6680244c586c8a34c1912682;p=moe.git diff --git a/t/moe/config_test.py b/t/moe/config_test.py index b0ba612..d6eb51b 100644 --- a/t/moe/config_test.py +++ b/t/moe/config_test.py @@ -12,11 +12,7 @@ class TestConfig(unittest.TestCase): s.t = cf.ConfigTree() def parse(s, string, level=0, fname='test'): - cp = ConfigParser(string, s.t, fname, level) - ops = cp.parse() - cp.p_WS() - assert cp.eof() - return ops + return s.t.parse(string, source=fname, level=level) def var(s, varname, create=True): return s.t.lookup(varname, create=create) @@ -82,6 +78,38 @@ class TestParser(TestConfig): s.assertRaises(ConfigSyntaxError, s.parse, "if ('{a}'=='{b}' ornot ''!='') {}") s.assertRaises(ConfigSyntaxError, s.parse, "if 'a'<>'b' {}") + def test_parse_remove(s): + def raise_UserWarning(): + with s.parse("b='F'", level=99): + assert s.val('b') == 'F' + raise UserWarning + d0 = s.parse('a="000"') + d1 = s.parse("a='A'; b='B'; c='C'", level=10) + d2 = s.parse('c="{a}{a}"; b="XX" ', level=20) + d3 = s.parse('b+=c ', level=30) + assert s.val('b') == "XXAA" + s.t.remove(d2) + assert s.val('b') == "BC" + s.assertRaises(ValueError, s.t.remove, [('d', d1[0][1])]) + s.assertRaises(ValueError, s.t.remove, [('b', d1[0][1])]) + # Try exception in "with parse():" + s.assertRaises(UserWarning, raise_UserWarning) + assert s.val('b') == "BC" + # partially remove d1 + s.t.remove([('c', d1[2][1])]) + # try to remove rest - 'a' and 'b' should get removed + s.assertRaises(ValueError, s.t.remove, d1) + assert s.val('a') == "000" + # cleanup + s.t.remove(d3) + s.t.remove(d0) + for v in 'abcd': + assert len(s.var(v).operations) == 0 + + def test_escape(s): + for tst in ['{B}"#\n\\"', '', '\\\n\\\\"\\{\\}', '"#"', s.s1, s.s2]: + s.parse('A="%s"; A+="0"'%config_escape(tst)) + assert s.val('A') == tst+'0' class TestConfigEval(TestConfig): @@ -224,7 +252,11 @@ class TestConfigEval(TestConfig): s.var('a').add_operation(cf.Operation('APPEND', None, cf.ConfigExpression(["5"]), level=5)) assert s.val('a')=='23a3b45' - + def test_priority_in_level(s): + s.parse('a="A"; c=""; b="B"; c+="C"; d="D"', level=0) + s.parse('a=b; b=c; c=d; d="ZZZ"', level=10) + s.parse('c="XXX"; c=""; d="S"; c+="YYY"', level=20) + assert s.val('a') == "YYY" # TODO: Fail on 1st April # TODO (OPT): Somehow add log.debug('Maximum encountered depth: %d', cf.debug_maxdepth)