52 lines
1.4 KiB
Python
52 lines
1.4 KiB
Python
|
#!/usr/bin/env python
|
||
|
|
||
|
import sys
|
||
|
import subprocess
|
||
|
import traceback
|
||
|
import json
|
||
|
|
||
|
data = json.load(sys.stdin)
|
||
|
testfile = sys.argv[1]
|
||
|
|
||
|
prefix = "CHECK: "
|
||
|
|
||
|
fails = 0
|
||
|
passes = 0
|
||
|
with open(testfile) as testfh:
|
||
|
lineno = 0
|
||
|
for line in iter(testfh.readline, ""):
|
||
|
lineno += 1
|
||
|
line = line.rstrip("\r\n")
|
||
|
try:
|
||
|
prefix_pos = line.index(prefix)
|
||
|
except ValueError:
|
||
|
continue
|
||
|
check_expr = line[prefix_pos + len(prefix):]
|
||
|
|
||
|
try:
|
||
|
exception = None
|
||
|
result = eval(check_expr, {"data":data})
|
||
|
except Exception:
|
||
|
result = False
|
||
|
exception = traceback.format_exc().splitlines()[-1]
|
||
|
|
||
|
if exception is not None:
|
||
|
sys.stderr.write(
|
||
|
"{file}:{line:d}: check threw exception: {expr}\n"
|
||
|
"{file}:{line:d}: exception was: {exception}\n".format(
|
||
|
file=testfile, line=lineno,
|
||
|
expr=check_expr, exception=exception))
|
||
|
fails += 1
|
||
|
elif not result:
|
||
|
sys.stderr.write(
|
||
|
"{file}:{line:d}: check returned False: {expr}\n".format(
|
||
|
file=testfile, line=lineno, expr=check_expr))
|
||
|
fails += 1
|
||
|
else:
|
||
|
passes += 1
|
||
|
|
||
|
if fails != 0:
|
||
|
sys.exit("{} checks failed".format(fails))
|
||
|
else:
|
||
|
sys.stdout.write("{} checks passed\n".format(passes))
|