• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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