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