mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2025-12-19 06:28:52 +00:00
add jsi plugin testcase like pp test
This commit is contained in:
@@ -57,6 +57,8 @@ def use_jsi_rumtimes(exclude=[]):
|
||||
def wrapper(self: unittest.TestCase):
|
||||
for key, jsi in get_included_jsi(exclude=exclude).items():
|
||||
def wrapped_jsi_with_unavaliable_auto_skip(*args, **kwargs):
|
||||
if getattr(jsi, 'TEST_DATA_PLUGIN', False):
|
||||
self.skipTest('Testdata plugin')
|
||||
instance = jsi(*args, **kwargs)
|
||||
if not instance.is_available():
|
||||
self.skipTest(f'{key} is not available')
|
||||
|
||||
@@ -22,9 +22,11 @@ from yt_dlp.plugins import (
|
||||
from yt_dlp.globals import (
|
||||
extractors,
|
||||
postprocessors,
|
||||
jsi_runtimes,
|
||||
plugin_dirs,
|
||||
plugin_ies,
|
||||
plugin_pps,
|
||||
plugin_jsis,
|
||||
all_plugins_loaded,
|
||||
plugin_specs,
|
||||
)
|
||||
@@ -44,16 +46,24 @@ POSTPROCESSOR_PLUGIN_SPEC = PluginSpec(
|
||||
plugin_destination=plugin_pps,
|
||||
)
|
||||
|
||||
JSI_PLUGIN_SPEC = PluginSpec(
|
||||
module_name='jsinterp',
|
||||
suffix='JSI',
|
||||
destination=jsi_runtimes,
|
||||
plugin_destination=plugin_jsis,
|
||||
)
|
||||
|
||||
|
||||
def reset_plugins():
|
||||
plugin_ies.value = {}
|
||||
plugin_pps.value = {}
|
||||
plugin_jsis.value = {}
|
||||
plugin_dirs.value = ['default']
|
||||
plugin_specs.value = {}
|
||||
all_plugins_loaded.value = False
|
||||
# Clearing override plugins is probably difficult
|
||||
for module_name in tuple(sys.modules):
|
||||
for plugin_type in ('extractor', 'postprocessor'):
|
||||
for plugin_type in ('extractor', 'postprocessor', 'jsinterp'):
|
||||
if module_name.startswith(f'{PACKAGE_NAME}.{plugin_type}.'):
|
||||
del sys.modules[module_name]
|
||||
|
||||
@@ -108,6 +118,12 @@ class TestPlugins(unittest.TestCase):
|
||||
self.assertIn(f'{PACKAGE_NAME}.postprocessor.normal', sys.modules.keys())
|
||||
self.assertIn('NormalPluginPP', plugin_pps.value)
|
||||
|
||||
def test_jsi_runtime_classes(self):
|
||||
plugins_jsi = load_plugins(JSI_PLUGIN_SPEC)
|
||||
self.assertIn('NormalPluginJSI', plugins_jsi.keys())
|
||||
self.assertIn(f'{PACKAGE_NAME}.jsinterp.normal', sys.modules.keys())
|
||||
self.assertIn('NormalPluginJSI', plugin_jsis.value)
|
||||
|
||||
def test_importing_zipped_module(self):
|
||||
zip_path = TEST_DATA_DIR / 'zipped_plugins.zip'
|
||||
shutil.make_archive(str(zip_path)[:-4], 'zip', str(zip_path)[:-4])
|
||||
@@ -125,6 +141,9 @@ class TestPlugins(unittest.TestCase):
|
||||
plugins_pp = load_plugins(POSTPROCESSOR_PLUGIN_SPEC)
|
||||
self.assertIn('ZippedPluginPP', plugins_pp.keys())
|
||||
|
||||
plugins_jsi = load_plugins(JSI_PLUGIN_SPEC)
|
||||
self.assertIn('ZippedPluginJSI', plugins_jsi.keys())
|
||||
|
||||
finally:
|
||||
sys.path.remove(str(zip_path))
|
||||
os.remove(zip_path)
|
||||
@@ -134,13 +153,14 @@ class TestPlugins(unittest.TestCase):
|
||||
reload_plugins_path = TEST_DATA_DIR / 'reload_plugins'
|
||||
load_plugins(EXTRACTOR_PLUGIN_SPEC)
|
||||
load_plugins(POSTPROCESSOR_PLUGIN_SPEC)
|
||||
load_plugins(JSI_PLUGIN_SPEC)
|
||||
|
||||
# Remove default folder and add reload_plugin path
|
||||
sys.path.remove(str(TEST_DATA_DIR))
|
||||
sys.path.append(str(reload_plugins_path))
|
||||
importlib.invalidate_caches()
|
||||
try:
|
||||
for plugin_type in ('extractor', 'postprocessor'):
|
||||
for plugin_type in ('extractor', 'postprocessor', 'jsinterp'):
|
||||
package = importlib.import_module(f'{PACKAGE_NAME}.{plugin_type}')
|
||||
self.assertIn(reload_plugins_path / PACKAGE_NAME / plugin_type, map(Path, package.__path__))
|
||||
|
||||
@@ -161,6 +181,14 @@ class TestPlugins(unittest.TestCase):
|
||||
postprocessors.value['NormalPluginPP'].REPLACED,
|
||||
msg='Reloading has not replaced original postprocessor plugin globally')
|
||||
|
||||
plugins_jsi = load_plugins(JSI_PLUGIN_SPEC)
|
||||
self.assertIn('NormalPluginJSI', plugins_jsi.keys())
|
||||
self.assertTrue(plugins_jsi['NormalPluginJSI'].REPLACED,
|
||||
msg='Reloading has not replaced original postprocessor plugin')
|
||||
self.assertTrue(
|
||||
jsi_runtimes.value['NormalPluginJSI'].REPLACED,
|
||||
msg='Reloading has not replaced original postprocessor plugin globally')
|
||||
|
||||
finally:
|
||||
sys.path.remove(str(reload_plugins_path))
|
||||
sys.path.append(str(TEST_DATA_DIR))
|
||||
@@ -188,24 +216,29 @@ class TestPlugins(unittest.TestCase):
|
||||
|
||||
self.assertNotIn(f'{PACKAGE_NAME}.extractor.normal', sys.modules.keys())
|
||||
self.assertNotIn(f'{PACKAGE_NAME}.postprocessor.normal', sys.modules.keys())
|
||||
self.assertNotIn(f'{PACKAGE_NAME}.jsinterp.normal', sys.modules.keys())
|
||||
|
||||
register_plugin_spec(EXTRACTOR_PLUGIN_SPEC)
|
||||
register_plugin_spec(POSTPROCESSOR_PLUGIN_SPEC)
|
||||
register_plugin_spec(JSI_PLUGIN_SPEC)
|
||||
load_all_plugins()
|
||||
self.assertTrue(all_plugins_loaded.value)
|
||||
|
||||
self.assertIn(f'{PACKAGE_NAME}.extractor.normal', sys.modules.keys())
|
||||
self.assertIn(f'{PACKAGE_NAME}.postprocessor.normal', sys.modules.keys())
|
||||
self.assertIn(f'{PACKAGE_NAME}.jsinterp.normal', sys.modules.keys())
|
||||
|
||||
def test_no_plugin_dirs(self):
|
||||
register_plugin_spec(EXTRACTOR_PLUGIN_SPEC)
|
||||
register_plugin_spec(POSTPROCESSOR_PLUGIN_SPEC)
|
||||
register_plugin_spec(JSI_PLUGIN_SPEC)
|
||||
|
||||
plugin_dirs.value = []
|
||||
load_all_plugins()
|
||||
|
||||
self.assertNotIn(f'{PACKAGE_NAME}.extractor.normal', sys.modules.keys())
|
||||
self.assertNotIn(f'{PACKAGE_NAME}.postprocessor.normal', sys.modules.keys())
|
||||
self.assertNotIn(f'{PACKAGE_NAME}.jsinterp.normal', sys.modules.keys())
|
||||
|
||||
def test_set_plugin_dirs(self):
|
||||
custom_plugin_dir = str(TEST_DATA_DIR / 'plugin_packages')
|
||||
@@ -236,9 +269,11 @@ class TestPlugins(unittest.TestCase):
|
||||
def test_get_plugin_spec(self):
|
||||
register_plugin_spec(EXTRACTOR_PLUGIN_SPEC)
|
||||
register_plugin_spec(POSTPROCESSOR_PLUGIN_SPEC)
|
||||
register_plugin_spec(JSI_PLUGIN_SPEC)
|
||||
|
||||
self.assertEqual(plugin_specs.value.get('extractor'), EXTRACTOR_PLUGIN_SPEC)
|
||||
self.assertEqual(plugin_specs.value.get('postprocessor'), POSTPROCESSOR_PLUGIN_SPEC)
|
||||
self.assertEqual(plugin_specs.value.get('jsinterp'), JSI_PLUGIN_SPEC)
|
||||
self.assertIsNone(plugin_specs.value.get('invalid'))
|
||||
|
||||
|
||||
|
||||
5
test/testdata/reload_plugins/yt_dlp_plugins/jsinterp/normal.py
vendored
Normal file
5
test/testdata/reload_plugins/yt_dlp_plugins/jsinterp/normal.py
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
from yt_dlp.jsinterp.common import JSI
|
||||
|
||||
|
||||
class NormalPluginJSI(JSI):
|
||||
REPLACED = True
|
||||
6
test/testdata/yt_dlp_plugins/jsinterp/normal.py
vendored
Normal file
6
test/testdata/yt_dlp_plugins/jsinterp/normal.py
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
from yt_dlp.jsinterp.common import JSI
|
||||
|
||||
|
||||
class NormalPluginJSI(JSI):
|
||||
TEST_DATA_PLUGIN = True
|
||||
REPLACED = False
|
||||
5
test/testdata/zipped_plugins/yt_dlp_plugins/jsinterp/zipped.py
vendored
Normal file
5
test/testdata/zipped_plugins/yt_dlp_plugins/jsinterp/zipped.py
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
from yt_dlp.jsinterp.common import JSI
|
||||
|
||||
|
||||
class ZippedPluginJSI(JSI):
|
||||
pass
|
||||
Reference in New Issue
Block a user