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, expr=check_expr, exception=exception 38 ) 39 ) 40 fails += 1 41 elif not result: 42 sys.stderr.write( 43 "{file}:{line:d}: check returned False: {expr}\n".format( 44 file=testfile, line=lineno, expr=check_expr 45 ) 46 ) 47 fails += 1 48 else: 49 passes += 1 50 51if fails != 0: 52 sys.exit("{} checks failed".format(fails)) 53else: 54 sys.stdout.write("{} checks passed\n".format(passes)) 55