diff options
34 files changed, 136 insertions, 89 deletions
diff --git a/qutebrowser/config/configfiles.py b/qutebrowser/config/configfiles.py index b82d74e74..da0c83b59 100644 --- a/qutebrowser/config/configfiles.py +++ b/qutebrowser/config/configfiles.py @@ -39,7 +39,7 @@ from qutebrowser.config import (configexc, config, configdata, configutils, configtypes) from qutebrowser.keyinput import keyutils from qutebrowser.utils import standarddir, utils, qtutils, log, urlmatch, version -from qutebrowser.qt import core +from qutebrowser.qt import core, webenginewidgets if TYPE_CHECKING: from qutebrowser.misc import savemanager @@ -120,12 +120,9 @@ class StateConfig(configparser.ConfigParser): Note that it's too early to use objects.backend here... """ - try: - # pylint: disable=unused-import,redefined-outer-name - import qutebrowser.qt.webenginewidgets - except ImportError: - return False - return True + if webenginewidgets: + return True + return False def _qtwe_versions(self) -> Optional[version.WebEngineVersions]: """Get the QtWebEngine versions.""" diff --git a/qutebrowser/config/qtargs.py b/qutebrowser/config/qtargs.py index 0935c0b11..cbe58706d 100644 --- a/qutebrowser/config/qtargs.py +++ b/qutebrowser/config/qtargs.py @@ -25,7 +25,7 @@ import argparse import pathlib from typing import Any, Dict, Iterator, List, Optional, Sequence, Tuple -from qutebrowser.qt import core +from qutebrowser.qt import core, webenginecore from qutebrowser.config import config from qutebrowser.misc import objects @@ -61,10 +61,7 @@ def qt_args(namespace: argparse.Namespace) -> List[str]: assert objects.backend == usertypes.Backend.QtWebKit, objects.backend return argv - try: - # pylint: disable=unused-import - from qutebrowser.browser.webengine import webenginesettings - except ImportError: + if not webenginecore: # This code runs before a QApplication is available, so before # backendproblem.py is run to actually inform the user of the missing # backend. Thus, we could end up in a situation where we're here, but diff --git a/tests/conftest.py b/tests/conftest.py index 6fe9d8243..2680207f7 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -271,7 +271,6 @@ def _select_backend(config): def _auto_select_backend(): - # pylint: disable=unused-import # Try to use QtWebKit as the default backend from qutebrowser.qt import webkit if webkit: diff --git a/tests/end2end/test_invocations.py b/tests/end2end/test_invocations.py index 072be4293..f53ed3129 100644 --- a/tests/end2end/test_invocations.py +++ b/tests/end2end/test_invocations.py @@ -23,7 +23,6 @@ import configparser import subprocess import sys import logging -import importlib import re import json import platform @@ -807,11 +806,11 @@ def test_unavailable_backend(request, quteproc_new): qtwk_module = "qutebrowser.qt.webkitwidgets" # Note we want to try the *opposite* backend here. if request.config.webengine: - pytest.importorskip(qtwe_module) + testutils.qt_module_skip(qtwe_module) module = qtwk_module backend = 'webkit' else: - pytest.importorskip(qtwk_module) + testutils.qt_module_skip(qtwk_module) module = qtwe_module backend = 'webengine' diff --git a/tests/helpers/fixtures.py b/tests/helpers/fixtures.py index 1daa8d741..1fd1be682 100644 --- a/tests/helpers/fixtures.py +++ b/tests/helpers/fixtures.py @@ -50,6 +50,7 @@ from qutebrowser.browser.webkit import cookies, cache from qutebrowser.misc import savemanager, sql, objects, sessions from qutebrowser.keyinput import modeman from qutebrowser.qt import core, sip +from helpers import testutils _qute_scheme_handler = None @@ -211,6 +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): + testutils.qt_module_skip('webkit') webkittab = pytest.importorskip('qutebrowser.browser.webkit.webkittab') monkeypatch.setattr(objects, 'backend', usertypes.Backend.QtWebKit) @@ -236,6 +238,7 @@ def webengine_tab(web_tab_setup, qtbot, redirect_webengine_data, tabwidget.current_index = 0 tabwidget.index_of = 0 + testutils.qt_module_skip('webenginecore') webenginetab = pytest.importorskip( 'qutebrowser.browser.webengine.webenginetab') @@ -263,10 +266,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.qt_module_skip('webkit') return request.getfixturevalue('webkit_tab') elif request.param == 'webengine': - pytest.importorskip('qutebrowser.browser.webengine.webenginetab') + testutils.qt_module_skip('webenginecore') return request.getfixturevalue('webengine_tab') else: raise utils.Unreachable @@ -441,7 +444,7 @@ def qnam(qapp): @pytest.fixture def webengineview(qtbot, monkeypatch, web_tab_setup): """Get a QWebEngineView if QtWebEngine is available.""" - QtWebEngineWidgets = pytest.importorskip('qutebrowser.qt.webenginewidgets') + QtWebEngineWidgets = testutils.qt_module_skip('webenginewidgets') monkeypatch.setattr(objects, 'backend', usertypes.Backend.QtWebEngine) view = QtWebEngineWidgets.QWebEngineView() qtbot.add_widget(view) @@ -451,7 +454,7 @@ def webengineview(qtbot, monkeypatch, web_tab_setup): @pytest.fixture def webpage(qnam, monkeypatch): """Get a new QWebPage object.""" - QtWebKitWidgets = pytest.importorskip('qutebrowser.qt.webkitwidgets') + QtWebKitWidgets = testutils.qt_module_skip('webkitwidgets') monkeypatch.setattr(objects, 'backend', usertypes.Backend.QtWebKit) class WebPageStub(QtWebKitWidgets.QWebPage): @@ -476,7 +479,7 @@ def webpage(qnam, monkeypatch): @pytest.fixture def webview(qtbot, webpage): """Get a new QWebView object.""" - QtWebKitWidgets = pytest.importorskip('qutebrowser.qt.webkitwidgets') + QtWebKitWidgets = testutils.qt_module_skip('webkitwidgets') view = QtWebKitWidgets.QWebView() qtbot.add_widget(view) @@ -733,7 +736,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('qutebrowser.qt.webenginewidgets') + testutils.qt_module_skip('webenginewidgets') return version.qtwebengine_versions() diff --git a/tests/helpers/testutils.py b/tests/helpers/testutils.py index d9e7d9a92..ee1b5455f 100644 --- a/tests/helpers/testutils.py +++ b/tests/helpers/testutils.py @@ -29,9 +29,11 @@ import contextlib import pathlib import importlib.util import importlib.machinery +from typing import Any, Optional import pytest +import qutebrowser.qt from qutebrowser.qt import gui, webenginecore from qutebrowser.utils import log, utils, version @@ -304,3 +306,15 @@ def enum_members(base, enumtype): for name, value in vars(base).items() if isinstance(value, enumtype) } + + +def qt_module_skip(modname: str, reason: Optional[str] = None) -> Any: + """Wraps return a PyQt module if is exists, else pytest.skip().""" + assert '.' not in modname, "`modname`: should be an attribute of qutebrowser.qt" + result = getattr(qutebrowser.qt, modname, None) + if result is None: + pytest.skip( + reason or f"Couldn't import {modname} from qutebrowser.qt", + allow_module_level=True, + ) + return result diff --git a/tests/unit/browser/test_history.py b/tests/unit/browser/test_history.py index 4865c778c..4e1dc59b4 100644 --- a/tests/unit/browser/test_history.py +++ b/tests/unit/browser/test_history.py @@ -28,6 +28,7 @@ from qutebrowser.browser import history from qutebrowser.utils import urlutils, usertypes from qutebrowser.api import cmdutils from qutebrowser.misc import sql, objects +from helpers import testutils @pytest.fixture(autouse=True) @@ -276,7 +277,7 @@ class TestHistoryInterface: @pytest.fixture def hist_interface(self, web_history): # pylint: disable=invalid-name - QtWebKit = pytest.importorskip('qutebrowser.qt.webkit') + QtWebKit = testutils.qt_module_skip('webkit') 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 webkit and webkit.QWebHistoryInterface: webkit.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('qutebrowser.qt.webkitwidgets') + testutils.qt_module_skip('webkitwidgets') else: assert backend == usertypes.Backend.QtWebEngine @@ -325,7 +324,7 @@ class TestInit: assert default_interface._history is history.web_history else: assert backend == usertypes.Backend.QtWebEngine - if webkit.QWebHistoryInterface is None: + if not webkit or not webkit.QWebHistoryInterface: default_interface = None else: default_interface = webkit.QWebHistoryInterface.defaultInterface() diff --git a/tests/unit/browser/test_notification.py b/tests/unit/browser/test_notification.py index f7c07b93d..f61aea24f 100644 --- a/tests/unit/browser/test_notification.py +++ b/tests/unit/browser/test_notification.py @@ -26,7 +26,6 @@ from typing import List, Dict, Any, Optional, TYPE_CHECKING import pytest from qutebrowser.qt import gui -pytest.importorskip("qutebrowser.qt.webenginecore") if TYPE_CHECKING: from qutebrowser.qt import QWebEngineNotification @@ -34,6 +33,10 @@ from qutebrowser.config import configdata from qutebrowser.misc import objects from qutebrowser.browser.webengine import notification from qutebrowser.qt import dbus, core +from helpers import testutils + + +testutils.qt_module_skip("webenginecore") class FakeDBusMessage: diff --git a/tests/unit/browser/webengine/test_webengine_cookies.py b/tests/unit/browser/webengine/test_webengine_cookies.py index 7aa3e5b8d..4c627ed24 100644 --- a/tests/unit/browser/webengine/test_webengine_cookies.py +++ b/tests/unit/browser/webengine/test_webengine_cookies.py @@ -18,11 +18,14 @@ # along with qutebrowser. If not, see <https://www.gnu.org/licenses/>. import pytest -from qutebrowser.qt import webenginecore, core -pytest.importorskip('qutebrowser.qt.webenginecore') +from qutebrowser.qt import webenginecore, core from qutebrowser.browser.webengine import cookies from qutebrowser.utils import urlmatch +from helpers import testutils + + +testutils.qt_module_skip('webenginecore') @pytest.fixture diff --git a/tests/unit/browser/webengine/test_webenginedownloads.py b/tests/unit/browser/webengine/test_webenginedownloads.py index 066637ee8..5da1fd2ea 100644 --- a/tests/unit/browser/webengine/test_webenginedownloads.py +++ b/tests/unit/browser/webengine/test_webenginedownloads.py @@ -21,11 +21,14 @@ import base64 import dataclasses import pytest -pytest.importorskip('qutebrowser.qt.webenginecore') -from qutebrowser.qt import webenginecore +from qutebrowser.qt import webenginecore from qutebrowser.utils import urlutils, usertypes, utils from qutebrowser.browser.webengine import webenginedownloads +from helpers import testutils + + +testutils.qt_module_skip('webenginecore') @pytest.mark.parametrize('path, expected', [ diff --git a/tests/unit/browser/webengine/test_webengineinterceptor.py b/tests/unit/browser/webengine/test_webengineinterceptor.py index 9a2963e9c..4f52e6a99 100644 --- a/tests/unit/browser/webengine/test_webengineinterceptor.py +++ b/tests/unit/browser/webengine/test_webengineinterceptor.py @@ -20,17 +20,15 @@ """Test interceptor.py for webengine.""" -import pytest - -pytest.importorskip('qutebrowser.qt.webenginecore') - from qutebrowser.qt import webenginecore - from qutebrowser.browser.webengine import interceptor from qutebrowser.utils import qtutils from helpers import testutils +testutils.qt_module_skip('webenginecore') + + def test_no_missing_resource_types(): request_interceptor = interceptor.RequestInterceptor() qb_keys = set(request_interceptor._resource_types.keys()) diff --git a/tests/unit/browser/webengine/test_webenginesettings.py b/tests/unit/browser/webengine/test_webenginesettings.py index 838ddd1b2..d7bd0e616 100644 --- a/tests/unit/browser/webengine/test_webenginesettings.py +++ b/tests/unit/browser/webengine/test_webenginesettings.py @@ -21,12 +21,14 @@ import logging import pytest -QtWebEngineCore = pytest.importorskip('qutebrowser.qt.webenginecore') -QWebEngineSettings = QtWebEngineCore.QWebEngineSettings - from qutebrowser.browser.webengine import webenginesettings from qutebrowser.utils import usertypes from qutebrowser.config import configdata +from helpers import testutils + + +QtWebEngineCore = testutils.qt_module_skip('webenginecore') +QWebEngineSettings = QtWebEngineCore.QWebEngineSettings @pytest.fixture diff --git a/tests/unit/browser/webengine/test_webenginetab.py b/tests/unit/browser/webengine/test_webenginetab.py index c5c611065..ce108ba1c 100644 --- a/tests/unit/browser/webengine/test_webenginetab.py +++ b/tests/unit/browser/webengine/test_webenginetab.py @@ -23,15 +23,18 @@ import logging import textwrap import pytest -QtWebEngineCore = pytest.importorskip("qutebrowser.qt.webenginecore") + +from qutebrowser.browser import greasemonkey +from qutebrowser.browser.webengine import webenginetab +from qutebrowser.utils import usertypes +from helpers import testutils + + +QtWebEngineCore = testutils.qt_module_skip("webenginecore") QWebEnginePage = QtWebEngineCore.QWebEnginePage QWebEngineScriptCollection = QtWebEngineCore.QWebEngineScriptCollection QWebEngineScript = QtWebEngineCore.QWebEngineScript -from qutebrowser.browser import greasemonkey -from qutebrowser.utils import usertypes -webenginetab = pytest.importorskip( - "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..e468d5788 100644 --- a/tests/unit/browser/webkit/test_mhtml.py +++ b/tests/unit/browser/webkit/test_mhtml.py @@ -25,6 +25,9 @@ import uuid import pytest +from helpers import testutils + +testutils.qt_module_skip('webkit') mhtml = pytest.importorskip('qutebrowser.browser.webkit.mhtml') diff --git a/tests/unit/browser/webkit/test_tabhistory.py b/tests/unit/browser/webkit/test_tabhistory.py index 43788d0a2..195361014 100644 --- a/tests/unit/browser/webkit/test_tabhistory.py +++ b/tests/unit/browser/webkit/test_tabhistory.py @@ -26,15 +26,16 @@ import dataclasses from typing import Any import pytest -pytest.importorskip('qutebrowser.qt.webkit') from qutebrowser.qt import webkit from qutebrowser.browser.webkit import tabhistory from qutebrowser.misc.sessions import TabHistoryItem as Item from qutebrowser.utils import qtutils from qutebrowser.qt import core +from helpers import testutils +testutils.qt_module_skip('webkit') pytestmark = pytest.mark.qt_log_ignore('QIODevice::read.*: device not open') diff --git a/tests/unit/browser/webkit/test_webkit_view.py b/tests/unit/browser/webkit/test_webkit_view.py index fcaaa2256..7c9249400 100644 --- a/tests/unit/browser/webkit/test_webkit_view.py +++ b/tests/unit/browser/webkit/test_webkit_view.py @@ -18,7 +18,13 @@ # along with qutebrowser. If not, see <https://www.gnu.org/licenses/>. import pytest -webview = pytest.importorskip('qutebrowser.browser.webkit.webview') + +from helpers import testutils + + +webkit = testutils.qt_module_skip('webkit') +if webkit: + from qutebrowser.browser.webkit import webview @pytest.fixture diff --git a/tests/unit/browser/webkit/test_webkitelem.py b/tests/unit/browser/webkit/test_webkitelem.py index 85947f03f..042883645 100644 --- a/tests/unit/browser/webkit/test_webkitelem.py +++ b/tests/unit/browser/webkit/test_webkitelem.py @@ -27,17 +27,20 @@ import itertools import dataclasses import pytest -QWebElement = pytest.importorskip('qutebrowser.qt.webkit').QWebElement from qutebrowser.browser import browsertab -from qutebrowser.browser.webkit import webkitelem from qutebrowser.misc import objects from qutebrowser.utils import usertypes from qutebrowser.qt import core +from helpers import testutils if TYPE_CHECKING: from helpers import stubs +QWebElement = testutils.qt_module_skip('webkit').QWebElement +if QWebElement: + from qutebrowser.browser.webkit import webkitelem + def get_webelem(geometry=None, frame=None, *, null=False, style=None, attributes=None, tagname=None, classes=None, diff --git a/tests/unit/browser/webkit/test_webkitsettings.py b/tests/unit/browser/webkit/test_webkitsettings.py index 5fb6567d7..4f04ff117 100644 --- a/tests/unit/browser/webkit/test_webkitsettings.py +++ b/tests/unit/browser/webkit/test_webkitsettings.py @@ -17,10 +17,12 @@ # 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('qutebrowser.qt.webkitwidgets') -from qutebrowser.browser.webkit import webkitsettings +from helpers import testutils + + +if testutils.qt_module_skip('webkitwidgets'): + from qutebrowser.browser.webkit import webkitsettings def test_parsed_user_agent(qapp): diff --git a/tests/unit/completion/test_models.py b/tests/unit/completion/test_models.py index 572dfc91e..ad3fc31f9 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 webenginecore, core +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('qutebrowser.qt.webenginewidgets') + testutils.qt_module_skip('webenginewidgets') tab = fake_web_tab(core.QUrl('https://github.com'), 'GitHub', 0) current_idx = 2 monkeypatch.setattr( diff --git a/tests/unit/components/test_braveadblock.py b/tests/unit/components/test_braveadblock.py index cafb2a7d7..65cdb1681 100644 --- a/tests/unit/components/test_braveadblock.py +++ b/tests/unit/components/test_braveadblock.py @@ -169,7 +169,7 @@ def easylist_easyprivacy(easylist_easyprivacy_both): @pytest.fixture def ad_blocker(config_stub, data_tmpdir): - pytest.importorskip("adblock") + testutils.qt_module_skip("adblock") return braveadblock.BraveAdBlocker(data_dir=pathlib.Path(str(data_tmpdir))) diff --git a/tests/unit/config/test_configfiles.py b/tests/unit/config/test_configfiles.py index c744eaa8f..a8071ea25 100644 --- a/tests/unit/config/test_configfiles.py +++ b/tests/unit/config/test_configfiles.py @@ -247,8 +247,7 @@ def test_qtwe_version_changed(state_writer, qtwe_version_patcher, @pytest.mark.parametrize("value", ["no", None]) def test_version_changed_webkit(stubs, monkeypatch, state_writer, key, value, attribute, expected): - fake = stubs.ImportFake({'qutebrowser.qt.webenginewidgets': False}, monkeypatch) - fake.patch() + monkeypatch.setattr(configfiles, 'webenginewidgets', None) if value is not None: state_writer(key, value) diff --git a/tests/unit/config/test_qtargs.py b/tests/unit/config/test_qtargs.py index 22a23d437..5df191496 100644 --- a/tests/unit/config/test_qtargs.py +++ b/tests/unit/config/test_qtargs.py @@ -25,6 +25,7 @@ import pytest from qutebrowser import qutebrowser from qutebrowser.config import qtargs, configdata from qutebrowser.utils import usertypes, version +from helpers import testutils @pytest.fixture @@ -110,7 +111,7 @@ def test_no_webengine_available(monkeypatch, config_stub, parser, stubs): here. """ monkeypatch.setattr(qtargs.objects, 'backend', usertypes.Backend.QtWebEngine) - monkeypatch.setattr(qtargs, 'webengine', None) + monkeypatch.setattr(qtargs, 'webenginecore', None) parsed = parser.parse_args([]) args = qtargs.qt_args(parsed) @@ -123,7 +124,7 @@ class TestWebEngineArgs: @pytest.fixture(autouse=True) def ensure_webengine(self, monkeypatch): """Skip all tests if QtWebEngine is unavailable.""" - pytest.importorskip("qutebrowser.qt.webenginecore") + testutils.qt_module_skip("webenginecore") monkeypatch.setattr(qtargs.objects, 'backend', usertypes.Backend.QtWebEngine) @pytest.mark.parametrize("setting, values", qtargs._WEBENGINE_SETTINGS.items()) diff --git a/tests/unit/config/test_qtargs_locale_workaround.py b/tests/unit/config/test_qtargs_locale_workaround.py index b6833c42a..fad3882e0 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 core from qutebrowser.utils import utils from qutebrowser.config import qtargs +from helpers import testutils -pytest.importorskip('qutebrowser.qt.webenginewidgets') +testutils.qt_module_skip('webenginewidgets') @pytest.fixture(autouse=True) diff --git a/tests/unit/config/test_websettings.py b/tests/unit/config/test_websettings.py index f42563727..87d7b32e1 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,8 +81,8 @@ def test_parse_user_agent(user_agent, os_info, webkit_version, def test_user_agent(monkeypatch, config_stub, qapp): - webenginesettings = pytest.importorskip( - "qutebrowser.browser.webengine.webenginesettings") + webenginesettings = testutils.qt_module_skip( + "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 1c399392f..0b3e6152d 100644 --- a/tests/unit/javascript/position_caret/test_position_caret.py +++ b/tests/unit/javascript/position_caret/test_position_caret.py @@ -21,8 +21,11 @@ import pytest -QWebSettings = pytest.importorskip("qutebrowser.qt.webkit").QWebSettings -QWebPage = pytest.importorskip("qutebrowser.qt.webkitwidgets").QWebPage +from helpers import testutils + + +QWebSettings = testutils.qt_module_skip("webkit").QWebSettings +QWebPage = testutils.qt_module_skip("webkitwidgets").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 fd0189919..9698f644e 100644 --- a/tests/unit/javascript/stylesheet/test_stylesheet_js.py +++ b/tests/unit/javascript/stylesheet/test_stylesheet_js.py @@ -22,10 +22,12 @@ import pathlib import pytest -QtWebEngineCore = pytest.importorskip("qutebrowser.qt.webenginecore") -QWebEngineProfile = QtWebEngineCore.QWebEngineProfile - from qutebrowser.utils import javascript +from helpers import testutils + + +QtWebEngineCore = testutils.qt_module_skip("webenginecore") +QWebEngineProfile = QtWebEngineCore.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 2c082440f..887cb53cc 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('qutebrowser.qt.webenginecore') + testutils.qt_module_skip('webenginecore') versions = elf.parse_webenginecore() assert versions is not None diff --git a/tests/unit/misc/test_ipc.py b/tests/unit/misc/test_ipc.py index 9e789bb57..fa3d6599b 100644 --- a/tests/unit/misc/test_ipc.py +++ b/tests/unit/misc/test_ipc.py @@ -662,10 +662,12 @@ class TestSendOrListen: @pytest.fixture def qlocalsocket_mock(self, mocker): + orig_errors = network.QLocalSocket.LocalSocketError + orig_states = network.QLocalSocket.LocalSocketState m = mocker.patch('qutebrowser.misc.ipc.network.QLocalSocket', autospec=True) m().errorString.return_value = "Error string" - m.LocalSocketError = network.QLocalSocket.LocalSocketError - m.LocalSocketState = network.QLocalSocket.LocalSocketState + m.LocalSocketError = orig_errors + m.LocalSocketState = orig_states return m @pytest.mark.linux(reason="Flaky on Windows and macOS") diff --git a/tests/unit/misc/test_sessions.py b/tests/unit/misc/test_sessions.py index a3304d565..c62cd0655 100644 --- a/tests/unit/misc/test_sessions.py +++ b/tests/unit/misc/test_sessions.py @@ -23,15 +23,16 @@ import logging import pytest import yaml -QWebView = pytest.importorskip('qutebrowser.qt.webkitwidgets').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 core +from helpers import testutils +QWebView = testutils.qt_module_skip('webkitwidgets').QWebView 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 e81fbd15d..bd0c236d4 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, qtutils from qutebrowser.misc import objects from qutebrowser.qt import widgets, core +from helpers import testutils @debug.log_events @@ -189,7 +190,7 @@ class TestQFlagsKey: No idea what's happening here exactly... """ - qwebpage = pytest.importorskip("qutebrowser.qt.webkitwidgets").QWebPage + qwebpage = testutils.qt_module_skip("webkitwidgets").QWebPage flags = qwebpage.FindWrapsAroundDocument flags |= qwebpage.FindBackward diff --git a/tests/unit/utils/test_log.py b/tests/unit/utils/test_log.py index f00c5cee3..259d9a04b 100644 --- a/tests/unit/utils/test_log.py +++ b/tests/unit/utils/test_log.py @@ -243,7 +243,7 @@ class TestInitLog: @pytest.fixture(autouse=True) def setup(self, mocker): - mocker.patch('qutebrowser.utils.log.qtcore.qInstallMessageHandler', + mocker.patch('qutebrowser.utils.log.core.qInstallMessageHandler', autospec=True) yield # Make sure logging is in a sensible default state diff --git a/tests/unit/utils/test_qtutils.py b/tests/unit/utils/test_qtutils.py index d730ebd53..7af96f5dc 100644 --- a/tests/unit/utils/test_qtutils.py +++ b/tests/unit/utils/test_qtutils.py @@ -108,6 +108,7 @@ def test_version_check_compiled_and_exact(): ('602.1', True) # new QtWebKit TP5, 5.212 Alpha ]) def test_is_new_qtwebkit(monkeypatch, version, is_new): + testutils.qt_module_skip('webkit') monkeypatch.setattr(qtutils, 'qWebKitVersion', lambda: version) assert qtutils.is_new_qtwebkit() == is_new diff --git a/tests/unit/utils/test_standarddir.py b/tests/unit/utils/test_standarddir.py index 7330d3fd8..e5cfd4b51 100644 --- a/tests/unit/utils/test_standarddir.py +++ b/tests/unit/utils/test_standarddir.py @@ -456,10 +456,10 @@ def test_no_qapplication(qapp, tmpdir, monkeypatch): sys.path = sys.argv[1:] # make sure we have the same python path - from qutebrowser.qt.widgets import QApplication + from qutebrowser.qt import widgets from qutebrowser.utils import standarddir - assert QApplication.instance() is None + assert widgets.QApplication.instance() is None standarddir.APPNAME = 'qute_test' standarddir._init_dirs() diff --git a/tests/unit/utils/test_version.py b/tests/unit/utils/test_version.py index 3f2e7d7ad..d48fe047a 100644 --- a/tests/unit/utils/test_version.py +++ b/tests/unit/utils/test_version.py @@ -40,10 +40,14 @@ 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 -except ImportError: + +if webenginecore: + webenginesettings = pytest.importorskip( + 'qutebrowser.browser.webengine.webenginesettings' + ) +else: webenginesettings = None @@ -762,7 +766,7 @@ class TestModuleVersions: name: The name of the module to check. has_version: Whether a __version__ attribute is expected. """ - module = pytest.importorskip(name) + module = testutils.pytest.importorskip(name) assert hasattr(module, '__version__') == has_version def test_existing_sip_attribute(self): @@ -1001,18 +1005,12 @@ class TestWebEngineVersions: def test_real_chromium_version(self, qapp): """Compare the inferred Chromium version with the real one.""" + testutils.qt_module_skip('webenginecore') pyqt_webengine_version = version._get_pyqt_webengine_qt_version() if pyqt_webengine_version is None: if '.dev' in core.PYQT_VERSION_STR: pytest.skip("dev version of PyQt") - try: - from qutebrowser.qt.webenginecore import ( - PYQT_WEBENGINE_VERSION_STR, PYQT_WEBENGINE_VERSION) - except ImportError as e: - # QtWebKit - pytest.skip(str(e)) - if 0x060000 > webenginecore.PYQT_WEBENGINE_VERSION >= 0x050F02: # Starting with Qt 5.15.2, we can only do bad guessing anyways... pytest.skip("Could be QtWebEngine 5.15.2 or 5.15.3") @@ -1061,7 +1059,7 @@ class TestChromiumVersion: @pytest.fixture(autouse=True) def clear_parsed_ua(self, monkeypatch): - pytest.importorskip('qutebrowser.qt.webenginewidgets') + testutils.qt_module_skip('webenginewidgets') if webenginesettings is not None: # Not available with QtWebKit monkeypatch.setattr(webenginesettings, 'parsed_user_agent', None) @@ -1257,7 +1255,7 @@ def test_version_info(params, stubs, monkeypatch, config_stub): 'earlyinit.qt_version': lambda: 'QT VERSION', '_module_versions': lambda: ['MODULE VERSION 1', 'MODULE VERSION 2'], '_pdfjs_version': lambda: 'PDFJS VERSION', - 'QtNetwork.QSslSocket': FakeQSslSocket('SSL VERSION', params.ssl_support), + 'network.QSslSocket': FakeQSslSocket('SSL VERSION', params.ssl_support), 'platform.platform': lambda: 'PLATFORM', 'platform.architecture': lambda: ('ARCHITECTURE', ''), '_os_info': lambda: ['OS INFO 1', 'OS INFO 2'], @@ -1372,7 +1370,7 @@ class TestOpenGLInfo: def test_func(self, qapp): """Simply call version.opengl_info() and see if it doesn't crash.""" - pytest.importorskip("qutebrowser.qt.opengl") + testutils.qt_module_skip("opengl") version.opengl_info() def test_func_fake(self, qapp, monkeypatch): |