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