X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=t%2Fmoe%2Ftestcase.py;h=36d335b7f72e7360b534e6f6a0e76cbcf16fc820;hb=8faf6b71514231fc3af6f60a9192028e1e64373f;hp=d1184d30a8faf218a1c3e0fb4bcca3c44b8ddb98;hpb=b6625664cd129d27edaa2fdcac44de22e77eb48f;p=eval.git diff --git a/t/moe/testcase.py b/t/moe/testcase.py index d1184d3..36d335b 100644 --- a/t/moe/testcase.py +++ b/t/moe/testcase.py @@ -6,6 +6,7 @@ import moe.config import moe.eval import moe.log import shutil +import traceback def configure_test(e, test): e.cfgs = moe.config.MoeConfigStack(e.cfgs) @@ -117,6 +118,42 @@ def points(e): if e.test_stat["points"] is None: e.test_stat["points"] = e["POINTS_PER_TEST"] +def filter(e): + cmd = e["OUTPUT_FILTER"] + if cmd == "": + return + + os.rename(os.path.join(e["TDIR"], e["TESTCASE_OUT"]), os.path.join(e["TDIR"], e["TESTCASE_RAW"])) + e.log.progress(" ") + e.log.verbose("Filtering output: %s\n" % cmd) + e.log.flush() + rc = os.system(cmd) + if os.WIFEXITED(rc) and os.WEXITSTATUS(rc) == 0: + if not os.path.exists(os.path.join(e["TDIR"], e["TESTCASE_OUT"])): + raise moe.MoeError("Filter has generated no output") + else: + raise moe.MoeError("Filter failure") + +def syntax(e): + cmd = e["SYNTAX_CHECK"] + if cmd == "": + return + verdict_file = tmpname(e) + cmd = "exec 2>%s ; %s" % (verdict_file,cmd) + + e.log.progress(" ") + e.log.verbose("Checking syntax: %s\n" % cmd) + e.log.flush() + rc = os.system(cmd) + collect_verdict(e, verdict_file) + collect_status(e) + if os.WIFEXITED(rc): + if os.WEXITSTATUS(rc) == 0: + return + elif os.WEXITSTATUS(rc) == 1: + raise moe.TestError("Wrong syntax", "SY") + raise moe.MoeError("Syntax checker failure") + def run_test(e, test): configure_test(e, test) @@ -131,6 +168,11 @@ def wrap_run_test(e, test): run_test(e, test) except moe.MoeError, err: raise moe.TestError(err, "XX") + except Exception: + if e["DEBUG"]: + moe.log.fatal_exception() + traceback.print_exc(file = e.log.log_file) + raise moe.TestError("Internal exception", "XX") def conclude_test(e): stat = e.test_stat @@ -155,11 +197,11 @@ def conclude_test(e): e.log.say(msg) def run_tests(e): - ## FIXME: output filter - ## FIXME: syntax checks e.test_pipe.insert(0, "setup", setup) - e.test_pipe.insert(400, "judge", judge) - e.test_pipe.insert(500, "points", points) + e.test_pipe.insert(400, "filter", filter) + e.test_pipe.insert(500, "syntax", syntax) + e.test_pipe.insert(600, "judge", judge) + e.test_pipe.insert(700, "points", points) for test in e["TESTS"].split(): e.log.progress("Test %s: " % test)