1#!/usr/bin/env python
2
3"""
4Util to write a directory of test cases with input filenames
5<testcase>.test as JSON to stdout.
6
7example::
8
9    $ python tests/data_to_json.py tests/data > testcases.json
10
11"""
12
13import argparse
14import fnmatch
15import json
16import os
17import os.path
18
19import bleach
20
21
22def main():
23    parser = argparse.ArgumentParser(description=__doc__)
24    parser.add_argument(
25        'data_dir',
26        help=(
27            'directory containing test cases with names like <testcase>.test'
28        )
29    )
30
31    args = parser.parse_args()
32
33    filenames = os.listdir(args.data_dir)
34    ins = [os.path.join(args.data_dir, f) for f in filenames if fnmatch.fnmatch(f, '*.test')]
35
36    testcases = []
37    for infn in ins:
38        case_name = infn.rsplit('.test', 1)[0]
39
40        with open(infn, 'r') as fin:
41            data, expected = fin.read().split('\n--\n')
42            data = data.strip()
43            expected = expected.strip()
44
45            testcases.append({
46                'title': case_name,
47                'input_filename': infn,
48                'payload': data,
49                'actual': bleach.clean(data),
50                'expected': expected,
51            })
52
53    print(json.dumps(testcases, indent=4, sort_keys=True))
54
55
56if __name__ == '__main__':
57    main()
58