13 def configure_test(e, test):
14 e.cfgs = moe.config.MoeConfigStack(e.cfgs)
15 e.test_builtins = moe.config.MoeConfig(type="test-builtins")
16 e.test_builtins.set("TEST", test)
17 e.cfgs.push(e.test_builtins)
19 test_cf = os.path.join(e.cfgs["PDIR"], test + ".config")
20 if os.path.exists(test_cf):
21 cfg = moe.config.MoeConfig(name=test_cf, type="test")
24 e.cfgs.apply_overrides("TEST_" + test + "_")
27 e.cfgs.apply_overrides("EXT_" + ext + "_")
29 log = moe.log.MoeLog()
30 log.verbosity = e.log.verbosity
31 log.open(os.path.join(e.cfgs["TDIR"], test + ".log"))
32 log.say("Test case %s\n\n" % test)
35 e.log_config(2, "for the test")
40 inn = e.cfgs["TESTCASE_IN"]
41 out = e.cfgs["TESTCASE_OUT"]
42 ok = e.cfgs["TESTCASE_OK"]
44 if os.path.exists(os.path.join(pdir, inn)):
45 moe.util.link_or_copy(os.path.join(pdir, inn), os.path.join(tdir, inn))
46 if os.path.exists(os.path.join(pdir, out)):
47 moe.util.link_or_copy(os.path.join(pdir, out), os.path.join(tdir, ok))
50 judge = e.cfgs["OUTPUT_CHECK"]
54 e.log.progress("<check> ")
55 e.log.verbose("Checking output: %s\n" % judge)
58 ## FIXME: The judge might want to return a status file
60 if os.WEXITSTATUS(rc) == 0:
62 elif os.WEXITSTATUS(rc) == 1:
63 raise moe.SolutionErr("Wrong answer", "WA")
64 raise moe.MoeErr("Judge failure")
66 def run_test(e, test):
67 configure_test(e, test)
69 ## FIXME: interactive tasks
70 e.test_pipe.configure(e.cfgs["TESTCASE_HOOKS"])
71 if e.log.verbosity >= 2:
72 e.test_pipe.dump(e.log.log_file, prefix="\t")
75 e.log.progress("OK\n")
78 ## FIXME: output filter
79 e.test_pipe.insert(0, "setup", setup)
80 e.test_pipe.insert(400, "judge", judge)
82 for test in e.cfgs["TESTS"].split():
83 e.log.progress("Test %s: " % test)
89 except moe.MoeErr, err:
90 e.log.progress("FAILED: %s\n" % err)
91 ## FIXME: write it to the status file
92 except moe.SolutionErr, err:
93 e.log.progress("%s\n" % err)