[lib/ObjectYAML] - Change interface to return `bool` instead of `int`. NFCI
[llvm-complete.git] / test / TableGen / JSON-check.py
blobb6bc4ee6c909b15cf9c4ee5073114f592d56ee62
1 #!/usr/bin/env python
3 import sys
4 import subprocess
5 import traceback
6 import json
8 data = json.load(sys.stdin)
9 testfile = sys.argv[1]
11 prefix = "CHECK: "
13 fails = 0
14 passes = 0
15 with 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):]
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]
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
48 if fails != 0:
49 sys.exit("{} checks failed".format(fails))
50 else:
51 sys.stdout.write("{} checks passed\n".format(passes))