| #!/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)) |