| @@ -0,0 +1,69 @@ | |||
| #!/usr/bin/env python3 | |||
| import argparse | |||
| from pathlib import Path | |||
| from typing import List, NamedTuple | |||
| import subprocess | |||
| import sys | |||
| class TestOptions(NamedTuple): | |||
| exe: Path | |||
| toolchain: str | |||
| def run_test_dir(dir: Path, opts: TestOptions) -> bool: | |||
| try: | |||
| subprocess.check_call( | |||
| [ | |||
| str(opts.exe), | |||
| 'build', | |||
| '--export', | |||
| '--warnings', | |||
| '--tests', | |||
| '--toolchain', | |||
| opts.toolchain, | |||
| ], | |||
| cwd=dir, | |||
| ) | |||
| except subprocess.CalledProcessError: | |||
| import traceback | |||
| traceback.print_exc() | |||
| return False | |||
| return True | |||
| def run_tests(opts: TestOptions) -> int: | |||
| print('Sanity check...') | |||
| subprocess.check_output([str(opts.exe), '--help']) | |||
| tests_subdir = Path(__file__).parent.absolute() / 'tests' | |||
| test_dirs = tests_subdir.glob('*.test') | |||
| ret = 0 | |||
| for td in test_dirs: | |||
| if not run_test_dir(td, opts): | |||
| ret = 1 | |||
| return ret | |||
| def main(argv: List[str]) -> int: | |||
| parser = argparse.ArgumentParser() | |||
| parser.add_argument( | |||
| '--exe', | |||
| '-e', | |||
| help='Path to the ddslim executable to test', | |||
| required=True) | |||
| parser.add_argument( | |||
| '--toolchain', | |||
| '-T', | |||
| help='The ddslim toolchain to use while testing', | |||
| required=True, | |||
| ) | |||
| args = parser.parse_args(argv) | |||
| opts = TestOptions(exe=Path(args.exe).absolute(), toolchain=args.toolchain) | |||
| return run_tests(opts) | |||
| if __name__ == "__main__": | |||
| sys.exit(main(sys.argv[1:])) | |||