yt-dlp/test/conftest.py

65 lines
2.2 KiB
Python
Raw Normal View History

import inspect
import pytest
from yt_dlp.networking import RequestHandler
from yt_dlp.networking.common import _REQUEST_HANDLERS
from yt_dlp.utils._utils import _YDLLogger as FakeLogger
@pytest.fixture
def handler(request):
2024-03-29 02:56:57 +00:00
RH_KEY = getattr(request, 'param', None)
if not RH_KEY:
return
if inspect.isclass(RH_KEY) and issubclass(RH_KEY, RequestHandler):
handler = RH_KEY
elif RH_KEY in _REQUEST_HANDLERS:
handler = _REQUEST_HANDLERS[RH_KEY]
else:
pytest.skip(f'{RH_KEY} request handler is not available')
2024-03-29 02:56:57 +00:00
class HandlerWrapper(handler):
RH_KEY = handler.RH_KEY
2024-03-29 02:56:57 +00:00
def __init__(self, *args, **kwargs):
super().__init__(logger=FakeLogger, *args, **kwargs)
return HandlerWrapper
@pytest.fixture(autouse=True)
def skip_handler(request, handler):
2024-05-03 05:01:08 +00:00
"""usage: pytest.mark.skip_handler('my_handler', 'reason')"""
2024-03-29 02:56:57 +00:00
for marker in request.node.iter_markers('skip_handler'):
if marker.args[0] == handler.RH_KEY:
pytest.skip(marker.args[1] if len(marker.args) > 1 else '')
@pytest.fixture(autouse=True)
def skip_handler_if(request, handler):
2024-05-03 05:01:08 +00:00
"""usage: pytest.mark.skip_handler_if('my_handler', lambda request: True, 'reason')"""
2024-03-29 02:56:57 +00:00
for marker in request.node.iter_markers('skip_handler_if'):
if marker.args[0] == handler.RH_KEY and marker.args[1](request):
pytest.skip(marker.args[2] if len(marker.args) > 2 else '')
2024-03-31 01:36:10 +00:00
2024-03-29 02:56:57 +00:00
@pytest.fixture(autouse=True)
def skip_handlers_if(request, handler):
2024-05-03 05:01:08 +00:00
"""usage: pytest.mark.skip_handlers_if(lambda request, handler: True, 'reason')"""
2024-03-29 02:56:57 +00:00
for marker in request.node.iter_markers('skip_handlers_if'):
if handler and marker.args[0](request, handler):
pytest.skip(marker.args[1] if len(marker.args) > 1 else '')
2024-03-29 02:56:57 +00:00
def pytest_configure(config):
config.addinivalue_line(
"markers", "skip_handler(handler): skip test for the given handler",
)
config.addinivalue_line(
"markers", "skip_handler_if(handler): skip test for the given handler if condition is true"
)
config.addinivalue_line(
"markers", "skip_handlers_if(handler): skip test for handlers when the condition is true"
)