diff options
author | Simon Sawicki <contact@grub4k.xyz> | 2023-12-26 18:30:04 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-26 18:30:04 +0100 |
commit | 2d1d683a541d71f3d3bb999dfe8eeb1976fb91ce (patch) | |
tree | bd8da32aed27c77b4e62fda9bc2da98c267fe87c /devscripts/run_tests.py | |
parent | 65de7d204ce88c0225df1321060304baab85dbd8 (diff) |
[devscripts] `run_tests`: Create Python script (#8720)
Authored by: Grub4K
Diffstat (limited to 'devscripts/run_tests.py')
-rwxr-xr-x | devscripts/run_tests.py | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/devscripts/run_tests.py b/devscripts/run_tests.py new file mode 100755 index 000000000..b0c6ee67a --- /dev/null +++ b/devscripts/run_tests.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python3 + +import argparse +import functools +import os +import re +import subprocess +import sys +from pathlib import Path + + +fix_test_name = functools.partial(re.compile(r'IE(_all|_\d+)?$').sub, r'\1') + + +def parse_args(): + parser = argparse.ArgumentParser(description='Run selected yt-dlp tests') + parser.add_argument( + 'test', help='a extractor tests, or one of "core" or "download"', nargs='*') + parser.add_argument( + '-k', help='run a test matching EXPRESSION. Same as "pytest -k"', metavar='EXPRESSION') + return parser.parse_args() + + +def run_tests(*tests, pattern=None): + run_core = 'core' in tests or (not pattern and not tests) + run_download = 'download' in tests + tests = list(map(fix_test_name, tests)) + + arguments = ['pytest', '-Werror', '--tb', 'short'] + if run_core: + arguments.extend(['-m', 'not download']) + elif run_download: + arguments.extend(['-m', 'download']) + elif pattern: + arguments.extend(['-k', pattern]) + else: + arguments.extend( + f'test/test_download.py::TestDownload::test_{test}' for test in tests) + + print(f'Running {arguments}') + try: + subprocess.run(arguments) + return + except FileNotFoundError: + pass + + arguments = [sys.executable, '-Werror', '-m', 'unittest'] + if run_core: + print('"pytest" needs to be installed to run core tests', file=sys.stderr) + return + elif run_download: + arguments.append('test.test_download') + elif pattern: + arguments.extend(['-k', pattern]) + else: + arguments.extend( + f'test.test_download.TestDownload.test_{test}' for test in tests) + + print(f'Running {arguments}') + subprocess.run(arguments) + + +if __name__ == '__main__': + try: + args = parse_args() + + os.chdir(Path(__file__).parent.parent) + run_tests(*args.test, pattern=args.k) + except KeyboardInterrupt: + pass |