diff options
author | pukkandan <pukkandan.ytdlp@gmail.com> | 2022-07-08 16:53:05 +0530 |
---|---|---|
committer | pukkandan <pukkandan.ytdlp@gmail.com> | 2022-08-02 01:08:16 +0530 |
commit | f2e8dbcc0067fb16b632de1984e622a8e99d9d8f (patch) | |
tree | bfd8af8427fef0a482189179a39ee18a4627b987 /test/test_download.py | |
parent | 8f97a15d1c7ebc10d0b51ce24632ac17b34a5f69 (diff) | |
download | hypervideo-pre-f2e8dbcc0067fb16b632de1984e622a8e99d9d8f.tar.lz hypervideo-pre-f2e8dbcc0067fb16b632de1984e622a8e99d9d8f.tar.xz hypervideo-pre-f2e8dbcc0067fb16b632de1984e622a8e99d9d8f.zip |
[extractor, test] Basic framework for embed tests (#4307)
and split download tests so they can be more easily run in CI
Authored by: coletdjnz
Diffstat (limited to 'test/test_download.py')
-rwxr-xr-x | test/test_download.py | 70 |
1 files changed, 34 insertions, 36 deletions
diff --git a/test/test_download.py b/test/test_download.py index c9f5e735c..787013c34 100755 --- a/test/test_download.py +++ b/test/test_download.py @@ -8,6 +8,7 @@ import unittest sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +import collections import hashlib import http.client import json @@ -20,6 +21,7 @@ from test.helper import ( expect_warnings, get_params, gettestcases, + getwebpagetestcases, is_download_test, report_warning, try_rm, @@ -32,6 +34,7 @@ from yt_dlp.utils import ( ExtractorError, UnavailableVideoError, format_bytes, + join_nonempty, ) RETRIES = 3 @@ -57,7 +60,9 @@ def _file_md5(fn): return hashlib.md5(f.read()).hexdigest() -defs = gettestcases() +normal_test_cases = gettestcases() +webpage_test_cases = getwebpagetestcases() +tests_counter = collections.defaultdict(collections.Counter) @is_download_test @@ -72,24 +77,13 @@ class TestDownload(unittest.TestCase): def __str__(self): """Identify each test with the `add_ie` attribute, if available.""" + cls, add_ie = type(self), getattr(self, self._testMethodName).add_ie + return f'{self._testMethodName} ({cls.__module__}.{cls.__name__}){f" [{add_ie}]" if add_ie else ""}:' - def strclass(cls): - """From 2.7's unittest; 2.6 had _strclass so we can't import it.""" - return f'{cls.__module__}.{cls.__name__}' - - add_ie = getattr(self, self._testMethodName).add_ie - return '%s (%s)%s:' % (self._testMethodName, - strclass(self.__class__), - ' [%s]' % add_ie if add_ie else '') - - def setUp(self): - self.defs = defs # Dynamically generate tests - def generator(test_case, tname): - def test_template(self): if self.COMPLETED_TESTS.get(tname): return @@ -255,39 +249,43 @@ def generator(test_case, tname): # And add them to TestDownload -tests_counter = {} -for test_case in defs: - name = test_case['name'] - i = tests_counter.get(name, 0) - tests_counter[name] = i + 1 - tname = f'test_{name}_{i}' if i else f'test_{name}' - test_method = generator(test_case, tname) - test_method.__name__ = str(tname) - ie_list = test_case.get('add_ie') - test_method.add_ie = ie_list and ','.join(ie_list) - setattr(TestDownload, test_method.__name__, test_method) - del test_method +def inject_tests(test_cases, label=''): + for test_case in test_cases: + name = test_case['name'] + tname = join_nonempty('test', name, label, tests_counter[name][label], delim='_') + tests_counter[name][label] += 1 + test_method = generator(test_case, tname) + test_method.__name__ = tname + test_method.add_ie = ','.join(test_case.get('add_ie', [])) + setattr(TestDownload, test_method.__name__, test_method) -def batch_generator(name, num_tests): +inject_tests(normal_test_cases) + +# TODO: disable redirection to the IE to ensure we are actually testing the webpage extraction +inject_tests(webpage_test_cases, 'webpage') + + +def batch_generator(name): def test_template(self): - for i in range(num_tests): - test_name = f'test_{name}_{i}' if i else f'test_{name}' - try: - getattr(self, test_name)() - except unittest.SkipTest: - print(f'Skipped {test_name}') + for label, num_tests in tests_counter[name].items(): + for i in range(num_tests): + test_name = join_nonempty('test', name, label, i, delim='_') + try: + getattr(self, test_name)() + except unittest.SkipTest: + print(f'Skipped {test_name}') return test_template -for name, num_tests in tests_counter.items(): - test_method = batch_generator(name, num_tests) +for name in tests_counter: + test_method = batch_generator(name) test_method.__name__ = f'test_{name}_all' test_method.add_ie = '' setattr(TestDownload, test_method.__name__, test_method) - del test_method +del test_method if __name__ == '__main__': |