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