| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | import argparse |
| | from collections import defaultdict |
| |
|
| |
|
| | def overwrite_file(file, class_name, test_name, correct_line, done_test): |
| | _id = f"{file}_{class_name}_{test_name}" |
| | done_test[_id] += 1 |
| |
|
| | with open(file, "r") as f: |
| | lines = f.readlines() |
| |
|
| | class_regex = f"class {class_name}(" |
| | test_regex = f"{4 * ' '}def {test_name}(" |
| | line_begin_regex = f"{8 * ' '}{correct_line.split()[0]}" |
| | another_line_begin_regex = f"{16 * ' '}{correct_line.split()[0]}" |
| | in_class = False |
| | in_func = False |
| | in_line = False |
| | insert_line = False |
| | count = 0 |
| | spaces = 0 |
| |
|
| | new_lines = [] |
| | for line in lines: |
| | if line.startswith(class_regex): |
| | in_class = True |
| | elif in_class and line.startswith(test_regex): |
| | in_func = True |
| | elif in_class and in_func and (line.startswith(line_begin_regex) or line.startswith(another_line_begin_regex)): |
| | spaces = len(line.split(correct_line.split()[0])[0]) |
| | count += 1 |
| |
|
| | if count == done_test[_id]: |
| | in_line = True |
| |
|
| | if in_class and in_func and in_line: |
| | if ")" not in line: |
| | continue |
| | else: |
| | insert_line = True |
| |
|
| | if in_class and in_func and in_line and insert_line: |
| | new_lines.append(f"{spaces * ' '}{correct_line}") |
| | in_class = in_func = in_line = insert_line = False |
| | else: |
| | new_lines.append(line) |
| |
|
| | with open(file, "w") as f: |
| | for line in new_lines: |
| | f.write(line) |
| |
|
| |
|
| | def main(correct, fail=None): |
| | if fail is not None: |
| | with open(fail, "r") as f: |
| | test_failures = {l.strip() for l in f.readlines()} |
| | else: |
| | test_failures = None |
| |
|
| | with open(correct, "r") as f: |
| | correct_lines = f.readlines() |
| |
|
| | done_tests = defaultdict(int) |
| | for line in correct_lines: |
| | file, class_name, test_name, correct_line = line.split("::") |
| | if test_failures is None or "::".join([file, class_name, test_name]) in test_failures: |
| | overwrite_file(file, class_name, test_name, correct_line, done_tests) |
| |
|
| |
|
| | if __name__ == "__main__": |
| | parser = argparse.ArgumentParser() |
| | parser.add_argument("--correct_filename", help="filename of tests with expected result") |
| | parser.add_argument("--fail_filename", help="filename of test failures", type=str, default=None) |
| | args = parser.parse_args() |
| |
|
| | main(args.correct_filename, args.fail_filename) |
| |
|