aboutsummaryrefslogtreecommitdiff
path: root/devscripts/run_tests.py
diff options
context:
space:
mode:
authorSimon Sawicki <contact@grub4k.xyz>2023-12-26 18:30:04 +0100
committerGitHub <noreply@github.com>2023-12-26 18:30:04 +0100
commit2d1d683a541d71f3d3bb999dfe8eeb1976fb91ce (patch)
treebd8da32aed27c77b4e62fda9bc2da98c267fe87c /devscripts/run_tests.py
parent65de7d204ce88c0225df1321060304baab85dbd8 (diff)
[devscripts] `run_tests`: Create Python script (#8720)
Authored by: Grub4K
Diffstat (limited to 'devscripts/run_tests.py')
-rwxr-xr-xdevscripts/run_tests.py70
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