| @@ -15,7 +15,52 @@ class TestOptions(NamedTuple): | |||
| def run_test_dir(dir: Path, opts: TestOptions) -> bool: | |||
| print(f'Running test: {dir.stem} ', end='') | |||
| fails = 0 | |||
| fails += _run_subproc_test( | |||
| dir, | |||
| opts, | |||
| 'Full Build', | |||
| 'build', | |||
| '--full', | |||
| f'--toolchain={opts.toolchain}', | |||
| f'--export-name={dir.stem}', | |||
| ) | |||
| fails += _run_subproc_test( | |||
| dir, | |||
| opts, | |||
| 'Source Distribution', | |||
| 'sdist', | |||
| f'--out={dir.stem}/test.dsd', | |||
| '--force', | |||
| ) | |||
| return fails == 0 | |||
| def _run_subproc_test(dir: Path, opts: TestOptions, name: str, | |||
| *args: str) -> int: | |||
| print(f'Running test: {dir.stem} - {name} ', end='') | |||
| out_dir = dir / '_build' | |||
| if out_dir.exists(): | |||
| shutil.rmtree(out_dir) | |||
| res = subprocess.run( | |||
| [ | |||
| str(opts.exe), | |||
| ] + list(str(s) for s in args), | |||
| cwd=dir, | |||
| stdout=subprocess.PIPE, | |||
| stderr=subprocess.STDOUT, | |||
| ) | |||
| if res.returncode != 0: | |||
| print('- FAILED') | |||
| print(f'Test failed with exit code ' | |||
| f'[{res.returncode}]:\n{res.stdout.decode()}') | |||
| return 1 | |||
| print('- PASSED') | |||
| return 0 | |||
| def _run_build_test(dir: Path, opts: TestOptions) -> int: | |||
| print(f'Running test: {dir.stem} - build', end='') | |||
| out_dir = dir / '_build' | |||
| if out_dir.exists(): | |||
| shutil.rmtree(out_dir) | |||
| @@ -26,8 +71,9 @@ def run_test_dir(dir: Path, opts: TestOptions) -> bool: | |||
| '--export', | |||
| '--warnings', | |||
| '--tests', | |||
| '--full', | |||
| f'--toolchain={opts.toolchain}', | |||
| f'--out-dir={out_dir}', | |||
| f'--out={out_dir}', | |||
| f'--export-name={dir.stem}', | |||
| ], | |||
| cwd=dir, | |||
| @@ -38,9 +84,9 @@ def run_test_dir(dir: Path, opts: TestOptions) -> bool: | |||
| print('- FAILED') | |||
| print(f'Test failed with exit code ' | |||
| f'[{res.returncode}]:\n{res.stdout.decode()}') | |||
| else: | |||
| print('- PASSED') | |||
| return res.returncode == 0 | |||
| return 1 | |||
| print('- PASSED') | |||
| return 0 | |||
| def run_tests(opts: TestOptions) -> int: | |||
| @@ -66,6 +112,7 @@ def bootstrap_self(opts: TestOptions): | |||
| 'build', | |||
| f'-FT{opts.toolchain}', | |||
| ]) | |||
| new_exe.unlink() | |||
| if res.returncode != 0: | |||
| print('The bootstrap test failed!', file=sys.stderr) | |||
| return False | |||