#!/usr/bin/env python2 import sys import re import os import hashlib from os.path import join, isfile def extract_test_cases(path): lines = open(path, encoding="utf8", errors='ignore', mode='rb').read().splitlines() inside = False delimiter = '' tests = [] for l in lines: if inside: if l.strip().endswith(')' + delimiter + '";'): tests[-1] += l.strip()[:-(3 + len(delimiter))] inside = False else: tests[-1] += l + '\n' else: m = re.search(r'R"([^(]*)\((.*)$', l.strip()) if m: inside = True delimiter = m.group(1) tests += [m.group(2)] return tests def extract_and_write(f, path): if f.endswith('.sol'): cases = [open(path, 'r').read()] else: cases = extract_test_cases(path) write_cases(f, cases) def write_cases(f, tests): cleaned_filename = f.replace(".","_").replace("-","_").replace(" ","_").lower() for test in tests: remainder = re.sub(r'^ {4}', '', test, 0, re.MULTILINE) open('test_%s_%s.sol' % (hashlib.sha256(test).hexdigest(), cleaned_filename), 'w').write(remainder) if __name__ == '__main__': path = sys.argv[1] for root, subdirs, files in os.walk(path): if '_build' in subdirs: subdirs.remove('_build') for f in files: path = join(root, f) extract_and_write(f, path)