diff --git a/devscripts/run_tests.py b/devscripts/run_tests.py index ebb3500b6..cf33d443d 100755 --- a/devscripts/run_tests.py +++ b/devscripts/run_tests.py @@ -19,12 +19,14 @@ def parse_args(): 'test', help='an extractor test, test path, or one of "core" or "download"', nargs='*') parser.add_argument( '-k', help='run a test matching EXPRESSION. Same as "pytest -k"', metavar='EXPRESSION') + parser.add_argument( + '--plugins', help='load plugins', action='store_true') parser.add_argument( '--pytest-args', help='arguments to passthrough to pytest') return parser.parse_args() -def run_tests(*tests, pattern=None, ci=False): +def run_tests(*tests, pattern=None, ci=False, load_plugins=False): # XXX: hatch uses `tests` if no arguments are passed run_core = 'core' in tests or 'tests' in tests or (not pattern and not tests) run_download = 'download' in tests @@ -47,7 +49,10 @@ def run_tests(*tests, pattern=None, ci=False): print(f'Running {arguments}', flush=True) try: - return subprocess.call(arguments) + return subprocess.call(arguments, env={ + **os.environ, + 'YTDLP_NO_PLUGINS': '1' if os.environ.get('YTDLP_NO_PLUGINS') or not load_plugins else '', + }) except FileNotFoundError: pass @@ -72,6 +77,6 @@ def run_tests(*tests, pattern=None, ci=False): args = parse_args() os.chdir(Path(__file__).parent.parent) - sys.exit(run_tests(*args.test, pattern=args.k, ci=bool(os.getenv('CI')))) + sys.exit(run_tests(*args.test, pattern=args.k, ci=bool(os.getenv('CI')), load_plugins=args.plugins)) except KeyboardInterrupt: pass diff --git a/test/helper.py b/test/helper.py index e4cb478e2..3a73c191b 100644 --- a/test/helper.py +++ b/test/helper.py @@ -1,6 +1,7 @@ import errno import hashlib import json +import os import os.path import re import ssl @@ -87,6 +88,9 @@ def report_warning(self, message, *args, **kwargs): def gettestcases(include_onlymatching=False): + if not os.environ.get('YTDLP_NO_PLUGINS'): + import yt_dlp.plugins as plugins + plugins.load_all_plugins() for ie in yt_dlp.extractor.gen_extractors(): yield from ie.get_testcases(include_onlymatching)