import argparse import os from mutmut.__main__ import do_run, run_mutation_tests from mutmut import mutations_by_type from mutpy import commandline ROOT_DIR = os.path.dirname(__file__) IN_SOURCE_DIR = os.path.join(ROOT_DIR, "benchmark") IN_TEST_DIR = os.path.join(ROOT_DIR, "tests") OUT_DIR = os.path.join(ROOT_DIR, "tests") def run_mutpy(test_path: str, source_path: str): # run_genetic([source_path], random.randint(0, 500)) argv = ['-t', source_path, '-u', test_path, '-m'] cfg = commandline.build_parser().parse_args(args=argv) mutation_controller = commandline.build_controller(cfg) mutation_controller.run() # stream = os.popen(f'mut.py --target \'{source_path}\' --unit-test \'{test_path}\' -m | tee log.txt') # output = stream.read() # score = re.search('Mutation score \\[.*\\]: (\d+\.\d+)\%', output).group(1) # print(output, file=sys.stderr) # print(f"Score is: {score}") def main(): parser = argparse.ArgumentParser(prog='mutmuttest.py', description='Runs MutPy over generated test suite.') parser.add_argument('file', type=str, help="Source file to test", nargs="*") files = parser.parse_args().file if len(files) == 0: files = [os.path.splitext(f) for f in os.listdir(IN_SOURCE_DIR)] to_test = [file[0] for file in files if file[1] == ".py"] else: to_test = [os.path.splitext(os.path.basename(file))[0] for file in files] for filename in to_test: for i in range(10): source_path = os.path.join(IN_SOURCE_DIR, f"{filename}.py") test_path = os.path.join(IN_TEST_DIR, f"test_{filename}.py") run_mutpy(test_path, source_path) if __name__ == "__main__": main()