Compare commits

...

3 Commits

Author SHA1 Message Date
Odd Stråbø
46bf79d555
Merge ddbd5451010e00c2ce64e57ce1d03ddbcd8ab4ff into 3eb8d22ddb8982ca4fb56bb7a8d6517538bf14c6 2025-03-31 18:30:17 +02:00
dirkf
3eb8d22ddb
[JSInterp] Temporary fix for #33102 2025-03-31 04:21:09 +01:00
Odd Stråbø
ddbd545101 [test] Start reworking test/test_download.py
The goal is being able to run info extractor tests for
only a single provider or extractor.
This makes the test usable when maintaining individual providers.
2020-12-17 04:52:53 +01:00
3 changed files with 38 additions and 12 deletions

View File

@ -69,10 +69,10 @@ def _file_md5(fn):
return hashlib.md5(f.read()).hexdigest()
defs = gettestcases()
ie_testcases = gettestcases()
class TestDownload(unittest.TestCase):
class BaseDownloadTCase(unittest.TestCase):
# Parallel testing in nosetests. See
# http://nose.readthedocs.org/en/latest/doc_tests/test_multiprocess/multiprocess.html
_multiprocess_shared_ = True
@ -91,8 +91,9 @@ class TestDownload(unittest.TestCase):
strclass(self.__class__),
' [%s]' % add_ie if add_ie else '')
def setUp(self):
self.defs = defs
TestDownload = unittest.TestSuite()
# Dynamically generate tests
@ -275,20 +276,42 @@ def generator(test_case, tname):
return test_template
cache = {}
# And add them to TestDownload
for n, test_case in enumerate(defs):
tname = 'test_' + str(test_case['name'])
i = 1
while hasattr(TestDownload, tname):
tname = 'test_%s_%d' % (test_case['name'], i)
for test_case in ie_testcases:
# Get or create a sub-test for the extractor file
module_name = test_case.get('module_name', 'unknown').rsplit('.', 1)[-1] # type: str
extractor_file_name = str('test_%s' % module_name)
extractor_file_suite = getattr(TestDownload, extractor_file_name, None)
if extractor_file_suite is None:
extractor_file_suite = type(extractor_file_name, (unittest.TestSuite,), {})()
setattr(TestDownload, extractor_file_name, extractor_file_suite)
TestDownload.addTest(extractor_file_suite)
# Get or create a sub-test for the info extractor
# This class contains the actual tests
extractor_class_name = str('test_%s' % test_case['name'])
ExtractorClass = getattr(extractor_file_suite, extractor_class_name, None)
if ExtractorClass is None:
ExtractorClass = type(extractor_class_name, (BaseDownloadTCase,), {})
setattr(extractor_file_suite, extractor_class_name, ExtractorClass)
i = 0
tname = 'test_%d' % i
while hasattr(ExtractorClass, tname):
tname = 'test_%d' % i
i += 1
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
setattr(ExtractorClass, test_method.__name__, test_method)
extractor_file_suite.addTest(ExtractorClass(test_method.__name__))
del test_method, test_case
if __name__ == '__main__':
unittest.main()
unittest.main(argv=['TestDownload'])

View File

@ -3265,6 +3265,7 @@ class InfoExtractor(object):
if not include_onlymatching and t.get('only_matching', False):
continue
t['name'] = type(self).__name__[:-len('IE')]
t['module_name'] = type(self).__module__
yield t
def is_suitable(self, age_limit):

View File

@ -686,6 +686,8 @@ class JSInterpreter(object):
raise self.Exception('Cannot get index {idx!r:.100}'.format(**locals()), expr=repr(obj), cause=e)
def _dump(self, obj, namespace):
if obj is JS_Undefined:
return 'undefined'
try:
return json.dumps(obj)
except TypeError: