From 2d1d683a541d71f3d3bb999dfe8eeb1976fb91ce Mon Sep 17 00:00:00 2001 From: Simon Sawicki Date: Tue, 26 Dec 2023 18:30:04 +0100 Subject: [devscripts] `run_tests`: Create Python script (#8720) Authored by: Grub4K --- devscripts/run_tests.py | 70 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100755 devscripts/run_tests.py (limited to 'devscripts/run_tests.py') 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 -- cgit v1.2.3