1#!/usr/bin/env python 2 3import sys 4import subprocess 5import traceback 6import json 7 8data = json.load(sys.stdin) 9testfile = sys.argv[1] 10 11prefix = "CHECK: " 12 13fails = 0 14passes = 0 15with open(testfile) as testfh: 16 lineno = 0 17 for line in iter(testfh.readline, ""): 18 lineno += 1 19 line = line.rstrip("\r\n") 20 try: 21 prefix_pos = line.index(prefix) 22 except ValueError: 23 continue 24 check_expr = line[prefix_pos + len(prefix):] 25 26 try: 27 exception = None 28 result = eval(check_expr, {"data":data}) 29 except Exception: 30 result = False 31 exception = traceback.format_exc().splitlines()[-1] 32 33 if exception is not None: 34 sys.stderr.write( 35 "{file}:{line:d}: check threw exception: {expr}\n" 36 "{file}:{line:d}: exception was: {exception}\n".format( 37 file=testfile, line=lineno, 38 expr=check_expr, exception=exception)) 39 fails += 1 40 elif not result: 41 sys.stderr.write( 42 "{file}:{line:d}: check returned False: {expr}\n".format( 43 file=testfile, line=lineno, expr=check_expr)) 44 fails += 1 45 else: 46 passes += 1 47 48if fails != 0: 49 sys.exit("{} checks failed".format(fails)) 50else: 51 sys.stdout.write("{} checks passed\n".format(passes)) 52