diff options
24 files changed, 89 insertions, 56 deletions
diff --git a/tests/end2end/test_invocations.py b/tests/end2end/test_invocations.py index 43cd6995f..baaff6e06 100644 --- a/tests/end2end/test_invocations.py +++ b/tests/end2end/test_invocations.py @@ -790,11 +790,11 @@ def test_unavailable_backend(request, quteproc_new): qtwk_module = "PyQt5.QtWebKitWidgets" # Note we want to try the *opposite* backend here. if request.config.webengine: - pytest.importorskip(qtwe_module) + testutils.importorskip_ifnull(qtwe_module) module = qtwk_module backend = 'webkit' else: - pytest.importorskip(qtwk_module) + testutils.importorskip_ifnull(qtwk_module) module = qtwe_module backend = 'webengine' diff --git a/tests/helpers/fixtures.py b/tests/helpers/fixtures.py index 5225577fe..8a78f5cea 100644 --- a/tests/helpers/fixtures.py +++ b/tests/helpers/fixtures.py @@ -41,6 +41,7 @@ from qutebrowser.qt import QtWidgets, QtWebEngineWidgets, QtNetwork import helpers.stubs as stubsmod import qutebrowser +from helpers import testutils from qutebrowser.config import (config, configdata, configtypes, configexc, configfiles, configcache, stylesheet) from qutebrowser.api import config as configapi @@ -211,7 +212,7 @@ def web_tab_setup(qtbot, tab_registry, session_manager_stub, @pytest.fixture def webkit_tab(web_tab_setup, qtbot, cookiejar_and_cache, mode_manager, widget_container, download_stub, webpage, monkeypatch): - webkittab = pytest.importorskip('qutebrowser.browser.webkit.webkittab') + webkittab = testutils.importorskip_ifnull('qutebrowser.qt.QtWebPage') monkeypatch.setattr(objects, 'backend', usertypes.Backend.QtWebKit) @@ -236,8 +237,8 @@ def webengine_tab(web_tab_setup, qtbot, redirect_webengine_data, tabwidget.current_index = 0 tabwidget.index_of = 0 - webenginetab = pytest.importorskip( - 'qutebrowser.browser.webengine.webenginetab') + webenginetab = testutils.importorskip_ifnull( + 'qutebrowser.qt.QtWebEngine') tab = webenginetab.WebEngineTab(win_id=0, mode_manager=mode_manager, private=False) @@ -263,10 +264,10 @@ def webengine_tab(web_tab_setup, qtbot, redirect_webengine_data, def web_tab(request): """A WebKitTab/WebEngineTab.""" if request.param == 'webkit': - pytest.importorskip('qutebrowser.browser.webkit.webkittab') + testutils.importorskip_ifnull('qutebrowser.qt.QtWebKit') return request.getfixturevalue('webkit_tab') elif request.param == 'webengine': - pytest.importorskip('qutebrowser.browser.webengine.webenginetab') + testutils.importorskip_ifnull('qutebrowser.qt.QtWebWngine') return request.getfixturevalue('webengine_tab') else: raise utils.Unreachable @@ -437,7 +438,7 @@ def qnam(qapp): @pytest.fixture def webengineview(qtbot, monkeypatch, web_tab_setup): """Get a QWebEngineView if QtWebEngine is available.""" - QtWebEngineWidgets = pytest.importorskip('PyQt5.QtWebEngineWidgets') + QtWebEngineWidgets = testutils.importorskip_ifnull('PyQt5.QtWebEngineWidgets') monkeypatch.setattr(objects, 'backend', usertypes.Backend.QtWebEngine) view = QtWebEngineWidgets.QWebEngineView() qtbot.add_widget(view) @@ -448,7 +449,7 @@ def webengineview(qtbot, monkeypatch, web_tab_setup): @pytest.fixture def webpage(qnam, monkeypatch): """Get a new QWebPage object.""" - QtWebKitWidgets = pytest.importorskip('PyQt5.QtWebKitWidgets') + QtWebKitWidgets = testutils.importorskip_ifnull('PyQt5.QtWebKitWidgets') monkeypatch.setattr(objects, 'backend', usertypes.Backend.QtWebKit) class WebPageStub(QtWebKitWidgets.QWebPage): @@ -473,7 +474,7 @@ def webpage(qnam, monkeypatch): @pytest.fixture def webview(qtbot, webpage): """Get a new QWebView object.""" - QtWebKitWidgets = pytest.importorskip('PyQt5.QtWebKitWidgets') + QtWebKitWidgets = testutils.importorskip_ifnull('PyQt5.QtWebKitWidgets') view = QtWebKitWidgets.QWebView() qtbot.add_widget(view) @@ -730,7 +731,7 @@ def webengine_versions(testdata_scheme): Calling qtwebengine_versions() initializes QtWebEngine, so we depend on testdata_scheme here, to make sure that happens before. """ - pytest.importorskip('PyQt5.QtWebEngineWidgets') + testutils.importorskip_ifnull('PyQt5.QtWebEngineWidgets') return version.qtwebengine_versions() diff --git a/tests/helpers/testutils.py b/tests/helpers/testutils.py index 40031a433..d5b9aa60e 100644 --- a/tests/helpers/testutils.py +++ b/tests/helpers/testutils.py @@ -28,6 +28,7 @@ import contextlib import pathlib import importlib.util import importlib.machinery +from typing import Optional, Any import pytest @@ -308,3 +309,13 @@ def import_userscript(name): module = importlib.util.module_from_spec(spec) spec.loader.exec_module(module) return module + + +def importorskip_ifnull( + modname: str, minversion: Optional[str] = None, reason: Optional[str] = None +) -> Any: + """Wraps pytest.importorskip and also skips if the target is None.""" + result = pytest.importorskip(modname, minversion, reason) + if result is None: + raise pytest.Skipped + return result diff --git a/tests/unit/browser/test_history.py b/tests/unit/browser/test_history.py index e41998b3c..5314672d8 100644 --- a/tests/unit/browser/test_history.py +++ b/tests/unit/browser/test_history.py @@ -24,6 +24,7 @@ import logging import pytest from qutebrowser.qt import QtWebKit, QtCore +from helpers import testutils from qutebrowser.browser import history from qutebrowser.utils import urlutils, usertypes from qutebrowser.api import cmdutils @@ -276,7 +277,7 @@ class TestHistoryInterface: @pytest.fixture def hist_interface(self, web_history): # pylint: disable=invalid-name - QtWebKit = pytest.importorskip('PyQt5.QtWebKit') + QtWebKit = testutils.importorskip_ifnull('PyQt5.QtWebKit') from qutebrowser.browser.webkit import webkithistory QWebHistoryInterface = QtWebKit.QWebHistoryInterface # pylint: enable=invalid-name @@ -303,16 +304,14 @@ class TestInit: if history.web_history is not None: history.web_history.setParent(None) history.web_history = None - try: + if QtWebKit and QtWebKit.QWebHistoryInterface: QtWebKit.QWebHistoryInterface.setDefaultInterface(None) - except ImportError: - pass @pytest.mark.parametrize('backend', [usertypes.Backend.QtWebEngine, usertypes.Backend.QtWebKit]) def test_init(self, backend, qapp, tmpdir, data_tmpdir, monkeypatch, cleanup_init): if backend == usertypes.Backend.QtWebKit: - pytest.importorskip('PyQt5.QtWebKitWidgets') + testutils.importorskip_ifnull('PyQt5.QtWebKitWidgets') else: assert backend == usertypes.Backend.QtWebEngine @@ -325,10 +324,10 @@ class TestInit: assert default_interface._history is history.web_history else: assert backend == usertypes.Backend.QtWebEngine - if QtWebKit.QWebHistoryInterface is None: - default_interface = None - else: + if QtWebKit and QtWebKit.QWebHistoryInterface: default_interface = QtWebKit.QWebHistoryInterface.defaultInterface() + else: + default_interface = None # For this to work, nothing can ever have called # setDefaultInterface before (so we need to test webengine before # webkit) diff --git a/tests/unit/browser/webengine/test_webengine_cookies.py b/tests/unit/browser/webengine/test_webengine_cookies.py index db50729c7..deba1cdf5 100644 --- a/tests/unit/browser/webengine/test_webengine_cookies.py +++ b/tests/unit/browser/webengine/test_webengine_cookies.py @@ -18,11 +18,13 @@ # along with qutebrowser. If not, see <https://www.gnu.org/licenses/>. import pytest -from qutebrowser.qt import QtWebEngineWidgets, QtWebEngineCore, QtCore -pytest.importorskip('PyQt5.QtWebEngineCore') + +from helpers import testutils +testutils.importorskip_ifnull('PyQt5.QtWebEngineCore') from qutebrowser.browser.webengine import cookies from qutebrowser.utils import urlmatch +from qutebrowser.qt import QtWebEngineWidgets, QtWebEngineCore, QtCore @pytest.fixture diff --git a/tests/unit/browser/webengine/test_webenginedownloads.py b/tests/unit/browser/webengine/test_webenginedownloads.py index 546216c0e..620de6ba8 100644 --- a/tests/unit/browser/webengine/test_webenginedownloads.py +++ b/tests/unit/browser/webengine/test_webenginedownloads.py @@ -22,9 +22,11 @@ import base64 import dataclasses import pytest -pytest.importorskip('PyQt5.QtWebEngineWidgets') -from qutebrowser.qt import QtWebEngineWidgets +from helpers import testutils +testutils.importorskip_ifnull('PyQt5.QtWebEngineWidgets') + +from qutebrowser.qt import QtWebEngineWidgets from qutebrowser.utils import urlutils, usertypes, utils from qutebrowser.browser.webengine import webenginedownloads diff --git a/tests/unit/browser/webengine/test_webengineinterceptor.py b/tests/unit/browser/webengine/test_webengineinterceptor.py index 9c15c7d5c..48aa0a465 100644 --- a/tests/unit/browser/webengine/test_webengineinterceptor.py +++ b/tests/unit/browser/webengine/test_webengineinterceptor.py @@ -20,12 +20,10 @@ """Test interceptor.py for webengine.""" -import pytest - -pytest.importorskip('PyQt5.QtWebEngineWidgets') +from helpers import testutils +testutils.importorskip_ifnull('PyQt5.QtWebEngineWidgets') from qutebrowser.qt import QtWebEngineCore - from qutebrowser.browser.webengine import interceptor diff --git a/tests/unit/browser/webengine/test_webenginesettings.py b/tests/unit/browser/webengine/test_webenginesettings.py index 0f803a172..da3c47db2 100644 --- a/tests/unit/browser/webengine/test_webenginesettings.py +++ b/tests/unit/browser/webengine/test_webenginesettings.py @@ -21,7 +21,8 @@ import logging import pytest -QtWebEngineWidgets = pytest.importorskip('PyQt5.QtWebEngineWidgets') +from helpers import testutils +QtWebEngineWidgets = testutils.importorskip_ifnull('PyQt5.QtWebEngineWidgets') from qutebrowser.browser.webengine import webenginesettings from qutebrowser.utils import usertypes diff --git a/tests/unit/browser/webengine/test_webenginetab.py b/tests/unit/browser/webengine/test_webenginetab.py index 3d8eec663..aa5182859 100644 --- a/tests/unit/browser/webengine/test_webenginetab.py +++ b/tests/unit/browser/webengine/test_webenginetab.py @@ -23,14 +23,15 @@ import logging import textwrap import pytest -QtWebEngineWidgets = pytest.importorskip("PyQt5.QtWebEngineWidgets") +from qutebrowser.browser import greasemonkey +from qutebrowser.utils import usertypes +from helpers import testutils + +QtWebEngineWidgets = testutils.importorskip_ifnull("PyQt5.QtWebEngineWidgets") QWebEnginePage = QtWebEngineWidgets.QWebEnginePage QWebEngineScriptCollection = QtWebEngineWidgets.QWebEngineScriptCollection QWebEngineScript = QtWebEngineWidgets.QWebEngineScript - -from qutebrowser.browser import greasemonkey -from qutebrowser.utils import usertypes -webenginetab = pytest.importorskip( +webenginetab = testutils.importorskip_ifnull( "qutebrowser.browser.webengine.webenginetab") pytestmark = pytest.mark.usefixtures('greasemonkey_manager') diff --git a/tests/unit/browser/webkit/test_mhtml.py b/tests/unit/browser/webkit/test_mhtml.py index dabffeb78..529077fb5 100644 --- a/tests/unit/browser/webkit/test_mhtml.py +++ b/tests/unit/browser/webkit/test_mhtml.py @@ -25,7 +25,10 @@ import uuid import pytest -mhtml = pytest.importorskip('qutebrowser.browser.webkit.mhtml') +from helpers import testutils + +testutils.importorskip_ifnull('qutebrowser.qt.QtWebKit') +mhtml = testutils.importorskip_ifnull('qutebrowser.browser.webkit.mhtml') @pytest.fixture(autouse=True) diff --git a/tests/unit/browser/webkit/test_tabhistory.py b/tests/unit/browser/webkit/test_tabhistory.py index 3616c8fb2..e362d3f34 100644 --- a/tests/unit/browser/webkit/test_tabhistory.py +++ b/tests/unit/browser/webkit/test_tabhistory.py @@ -23,9 +23,10 @@ import dataclasses from typing import Any import pytest -pytest.importorskip('PyQt5.QtWebKit') -from qutebrowser.qt import QtWebKit +from helpers import testutils +testutils.importorskip_ifnull('PyQt5.QtWebKit') +from qutebrowser.qt import QtWebKit from qutebrowser.browser.webkit import tabhistory from qutebrowser.misc.sessions import TabHistoryItem as Item from qutebrowser.utils import qtutils diff --git a/tests/unit/browser/webkit/test_webkitelem.py b/tests/unit/browser/webkit/test_webkitelem.py index 4c3a30b11..2d8619758 100644 --- a/tests/unit/browser/webkit/test_webkitelem.py +++ b/tests/unit/browser/webkit/test_webkitelem.py @@ -27,7 +27,9 @@ import itertools import dataclasses import pytest -QWebElement = pytest.importorskip('PyQt5.QtWebKit').QWebElement + +from helpers import testutils +QWebElement = testutils.importorskip_ifnull('PyQt5.QtWebKit').QWebElement from qutebrowser.browser import browsertab from qutebrowser.browser.webkit import webkitelem diff --git a/tests/unit/browser/webkit/test_webkitsettings.py b/tests/unit/browser/webkit/test_webkitsettings.py index 8b30b85aa..ea4527369 100644 --- a/tests/unit/browser/webkit/test_webkitsettings.py +++ b/tests/unit/browser/webkit/test_webkitsettings.py @@ -17,8 +17,9 @@ # You should have received a copy of the GNU General Public License # along with qutebrowser. If not, see <https://www.gnu.org/licenses/>. -import pytest -pytest.importorskip('PyQt5.QtWebKitWidgets') +from helpers import testutils + +testutils.importorskip_ifnull('PyQt5.QtWebKitWidgets') from qutebrowser.browser.webkit import webkitsettings diff --git a/tests/unit/browser/webkit/test_webview.py b/tests/unit/browser/webkit/test_webview.py index fcaaa2256..2b0662b58 100644 --- a/tests/unit/browser/webkit/test_webview.py +++ b/tests/unit/browser/webkit/test_webview.py @@ -18,7 +18,9 @@ # along with qutebrowser. If not, see <https://www.gnu.org/licenses/>. import pytest -webview = pytest.importorskip('qutebrowser.browser.webkit.webview') + +from helpers import testutils +webview = testutils.importorskip_ifnull('qutebrowser.qt.QtWebKit') @pytest.fixture diff --git a/tests/unit/completion/test_models.py b/tests/unit/completion/test_models.py index ceea3db35..01295c7d9 100644 --- a/tests/unit/completion/test_models.py +++ b/tests/unit/completion/test_models.py @@ -40,6 +40,7 @@ from qutebrowser.config import configdata, configtypes from qutebrowser.utils import usertypes from qutebrowser.mainwindow import tabbedbrowser from qutebrowser.qt import QtWebEngineWidgets, QtCore +from helpers import testutils def _check_completions(model, expected): @@ -1342,7 +1343,7 @@ def test_url_completion_benchmark(benchmark, info, @pytest.fixture def tab_with_history(fake_web_tab, tabbed_browser_stubs, info, monkeypatch): """Returns a fake tab with some fake history items.""" - pytest.importorskip('PyQt5.QtWebEngineWidgets') + testutils.importorskip_ifnull('PyQt5.QtWebEngineWidgets') tab = fake_web_tab(QtCore.QUrl('https://github.com'), 'GitHub', 0) current_idx = 2 monkeypatch.setattr( diff --git a/tests/unit/config/test_qtargs.py b/tests/unit/config/test_qtargs.py index 076ff6e3c..60d29e430 100644 --- a/tests/unit/config/test_qtargs.py +++ b/tests/unit/config/test_qtargs.py @@ -126,7 +126,7 @@ class TestWebEngineArgs: @pytest.fixture(autouse=True) def ensure_webengine(self, monkeypatch): """Skip all tests if QtWebEngine is unavailable.""" - pytest.importorskip("PyQt5.QtWebEngine") + testutils.importorskip_ifnull("PyQt5.QtWebEngine") monkeypatch.setattr(qtargs.objects, 'backend', usertypes.Backend.QtWebEngine) @pytest.mark.parametrize('backend, qt_version, expected', [ diff --git a/tests/unit/config/test_qtargs_locale_workaround.py b/tests/unit/config/test_qtargs_locale_workaround.py index 96d619243..2a4d6c81c 100644 --- a/tests/unit/config/test_qtargs_locale_workaround.py +++ b/tests/unit/config/test_qtargs_locale_workaround.py @@ -24,9 +24,10 @@ from qutebrowser.qt import QtCore from qutebrowser.utils import utils from qutebrowser.config import qtargs +from helpers import testutils -pytest.importorskip('PyQt5.QtWebEngineWidgets') +testutils.importorskip_ifnull('PyQt5.QtWebEngineWidgets') @pytest.fixture(autouse=True) diff --git a/tests/unit/config/test_websettings.py b/tests/unit/config/test_websettings.py index f42563727..4a9ff7cb6 100644 --- a/tests/unit/config/test_websettings.py +++ b/tests/unit/config/test_websettings.py @@ -22,6 +22,7 @@ import pytest from qutebrowser.config import websettings from qutebrowser.misc import objects from qutebrowser.utils import usertypes +from helpers import testutils @pytest.mark.parametrize([ # noqa: PT006 @@ -80,7 +81,7 @@ def test_parse_user_agent(user_agent, os_info, webkit_version, def test_user_agent(monkeypatch, config_stub, qapp): - webenginesettings = pytest.importorskip( + webenginesettings = testutils.importorskip_ifnull( "qutebrowser.browser.webengine.webenginesettings") monkeypatch.setattr(objects, 'backend', usertypes.Backend.QtWebEngine) webenginesettings.init_user_agent() diff --git a/tests/unit/javascript/position_caret/test_position_caret.py b/tests/unit/javascript/position_caret/test_position_caret.py index 70a1df333..aa92319a6 100644 --- a/tests/unit/javascript/position_caret/test_position_caret.py +++ b/tests/unit/javascript/position_caret/test_position_caret.py @@ -21,8 +21,10 @@ import pytest -QWebSettings = pytest.importorskip("PyQt5.QtWebKit").QWebSettings -QWebPage = pytest.importorskip("PyQt5.QtWebKitWidgets").QWebPage +from helpers import testutils + +QWebSettings = testutils.importorskip_ifnull("PyQt5.QtWebKit").QWebSettings +QWebPage = testutils.importorskip_ifnull("PyQt5.QtWebKitWidgets").QWebPage @pytest.fixture(autouse=True) diff --git a/tests/unit/javascript/stylesheet/test_stylesheet_js.py b/tests/unit/javascript/stylesheet/test_stylesheet_js.py index 1eebe3b7f..760bdced1 100644 --- a/tests/unit/javascript/stylesheet/test_stylesheet_js.py +++ b/tests/unit/javascript/stylesheet/test_stylesheet_js.py @@ -22,10 +22,11 @@ import pathlib import pytest -QtWebEngineWidgets = pytest.importorskip("PyQt5.QtWebEngineWidgets") -QWebEngineProfile = QtWebEngineWidgets.QWebEngineProfile - from qutebrowser.utils import javascript +from helpers import testutils + +QtWebEngineWidgets = testutils.importorskip_ifnull("PyQt5.QtWebEngineWidgets") +QWebEngineProfile = QtWebEngineWidgets.QWebEngineProfile DEFAULT_BODY_BG = "rgba(0, 0, 0, 0)" diff --git a/tests/unit/misc/test_elf.py b/tests/unit/misc/test_elf.py index 86060bbde..47110db4f 100644 --- a/tests/unit/misc/test_elf.py +++ b/tests/unit/misc/test_elf.py @@ -26,6 +26,7 @@ from hypothesis import strategies as hst from qutebrowser.misc import elf from qutebrowser.utils import utils +from helpers import testutils @pytest.mark.parametrize('fmt, expected', [ @@ -57,7 +58,7 @@ def test_result(qapp, caplog): If that happens, please report a bug about it! """ - pytest.importorskip('PyQt5.QtWebEngineCore') + testutils.importorskip_ifnull('PyQt5.QtWebEngineCore') versions = elf.parse_webenginecore() assert versions is not None diff --git a/tests/unit/misc/test_sessions.py b/tests/unit/misc/test_sessions.py index ddbb0703a..cc87de64d 100644 --- a/tests/unit/misc/test_sessions.py +++ b/tests/unit/misc/test_sessions.py @@ -23,15 +23,15 @@ import logging import pytest import yaml -QWebView = pytest.importorskip('PyQt5.QtWebKitWidgets').QWebView + +from helpers import testutils +QWebView = testutils.importorskip_ifnull('PyQt5.QtWebKitWidgets').QWebView from qutebrowser.misc import sessions from qutebrowser.misc.sessions import TabHistoryItem as Item from qutebrowser.utils import objreg, qtutils from qutebrowser.browser.webkit import tabhistory from qutebrowser.qt import QtCore - - pytestmark = pytest.mark.qt_log_ignore('QIODevice::read.*: device not open') webengine_refactoring_xfail = pytest.mark.xfail( diff --git a/tests/unit/utils/test_debug.py b/tests/unit/utils/test_debug.py index 4a24d0c44..f81cc29d4 100644 --- a/tests/unit/utils/test_debug.py +++ b/tests/unit/utils/test_debug.py @@ -29,6 +29,7 @@ import pytest from qutebrowser.utils import debug from qutebrowser.misc import objects from qutebrowser.qt import QtWidgets, QtCore +from helpers import testutils @debug.log_events @@ -185,7 +186,7 @@ class TestQFlagsKey: No idea what's happening here exactly... """ - qwebpage = pytest.importorskip("PyQt5.QtWebKitWidgets").QWebPage + qwebpage = testutils.importorskip_ifnull("PyQt5.QtWebKitWidgets").QWebPage flags = qwebpage.FindWrapsAroundDocument flags |= qwebpage.FindBackward diff --git a/tests/unit/utils/test_version.py b/tests/unit/utils/test_version.py index d65a91082..9ed7e3b39 100644 --- a/tests/unit/utils/test_version.py +++ b/tests/unit/utils/test_version.py @@ -40,6 +40,7 @@ from qutebrowser.config import config, websettings from qutebrowser.utils import version, usertypes, utils, standarddir from qutebrowser.misc import pastebin, objects, elf from qutebrowser.browser import pdfjs +from helpers import testutils try: from qutebrowser.browser.webengine import webenginesettings @@ -1059,7 +1060,7 @@ class TestChromiumVersion: @pytest.fixture(autouse=True) def clear_parsed_ua(self, monkeypatch): - pytest.importorskip('PyQt5.QtWebEngineWidgets') + testutils.importorskip_ifnull('PyQt5.QtWebEngineWidgets') if webenginesettings is not None: # Not available with QtWebKit monkeypatch.setattr(webenginesettings, 'parsed_user_agent', None) @@ -1341,7 +1342,7 @@ class TestOpenGLInfo: def test_func(self, qapp): """Simply call version.opengl_info() and see if it doesn't crash.""" - pytest.importorskip("PyQt5.QtOpenGL") + testutils.importorskip_ifnull("PyQt5.QtOpenGL") version.opengl_info() def test_func_fake(self, qapp, monkeypatch): |