xref: /llvm-project/llvm/test/TableGen/JSON-check.py (revision b71edfaa4ec3c998aadb35255ce2f60bba2940b0)
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