diff options
author | Florian Bruhin <me@the-compiler.org> | 2021-11-13 19:01:54 +0100 |
---|---|---|
committer | Florian Bruhin <me@the-compiler.org> | 2021-11-13 19:01:54 +0100 |
commit | 60f281eb30f6913423b0b5f99208f95ae8449fae (patch) | |
tree | 5f575d6eb1b5623bd4d9b4f6fbe9a0e46b110ea6 /tests | |
parent | 2a18eeb558d2b4faa33b5dbba62de90d4e27b9e6 (diff) | |
parent | 437438d2422d8719028a00176a4d914ed92e1fff (diff) | |
download | qutebrowser-60f281eb30f6913423b0b5f99208f95ae8449fae.tar.gz qutebrowser-60f281eb30f6913423b0b5f99208f95ae8449fae.zip |
Merge remote-tracking branch 'origin/pr/6810'
Diffstat (limited to 'tests')
-rw-r--r-- | tests/conftest.py | 70 | ||||
-rw-r--r-- | tests/end2end/conftest.py | 2 |
2 files changed, 63 insertions, 9 deletions
diff --git a/tests/conftest.py b/tests/conftest.py index 40631af34..ee4572fad 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -214,20 +214,74 @@ def pytest_addoption(parser): help="Delay between qutebrowser commands.") parser.addoption('--qute-profile-subprocs', action='store_true', default=False, help="Run cProfile for subprocesses.") - parser.addoption('--qute-bdd-webengine', action='store_true', - help='Use QtWebEngine for BDD tests') + parser.addoption('--qute-bdd-backend', action='store', + choices=['webkit', 'webengine'], help='Set backend for BDD tests') def pytest_configure(config): - webengine_arg = config.getoption('--qute-bdd-webengine') - webengine_env = os.environ.get('QUTE_BDD_WEBENGINE', 'false') - config.webengine = webengine_arg or webengine_env == 'true' - # Fail early if QtWebEngine is not available - if config.webengine: - import PyQt5.QtWebEngineWidgets + backend = _select_backend(config) + config.webengine = backend == 'webengine' + earlyinit.configure_pyqt() +def _select_backend(config): + """Select the backend for running tests. + + The backend is auto-selected in the following manner: + 1. Use QtWebKit if available + 2. Otherwise use QtWebEngine as a fallback + + Auto-selection is overridden by either passing a backend via + `--qute-bdd-backend=<backend>` or setting the environment variable + `QUTE_BDD_BACKEND=<backend>`. + + Args: + config: pytest config + + Raises: + ImportError if the selected backend is not available. + + Returns: + The selected backend as a string (e.g. 'webkit'). + """ + backend_arg = config.getoption('--qute-bdd-backend') + backend_env = os.environ.get('QUTE_BDD_BACKEND') + + backend = backend_arg or backend_env or _auto_select_backend() + + # Fail early if selected backend is not available + if backend == 'webkit': + import PyQt5.QtWebKitWidgets + elif backend == 'webengine': + import PyQt5.QtWebEngineWidgets + else: + raise utils.Unreachable(backend) + + return backend + + +def _auto_select_backend(): + try: + # Try to use QtWebKit as the default backend + import PyQt5.QtWebKitWidgets + return 'webkit' + except ImportError: + # Try to use QtWebEngine as a fallback and fail early + # if that's also not available + import PyQt5.QtWebEngineWidgets + return 'webengine' + + +def pytest_report_header(config): + if config.webengine: + backend_version = version.qtwebengine_versions(avoid_init=True) + else: + backend_version = version.qWebKitVersion() + + return f'backend: {backend_version}' + + @pytest.fixture(scope='session', autouse=True) def check_display(request): if utils.is_linux and not os.environ.get('DISPLAY', ''): diff --git a/tests/end2end/conftest.py b/tests/end2end/conftest.py index a4a089cea..563c380f2 100644 --- a/tests/end2end/conftest.py +++ b/tests/end2end/conftest.py @@ -165,7 +165,7 @@ if not getattr(sys, 'frozen', False): def pytest_collection_modifyitems(config, items): - """Apply @qtwebengine_* markers; skip unittests with QUTE_BDD_WEBENGINE.""" + """Apply @qtwebengine_* markers; skip unittests with QUTE_BDD_BACKEND=webengine.""" # WORKAROUND for https://bugreports.qt.io/browse/QTBUG-75884 # (note this isn't actually fixed properly before Qt 5.15) header_bug_fixed = qtutils.version_check('5.15', compiled=False) |