From f0ef68968cb0412e19337e7d167aa4398637e211 Mon Sep 17 00:00:00 2001 From: toofar Date: Mon, 20 Jun 2022 15:40:20 +1200 Subject: Adapt unittests for re-writing PyQt imports Firstly switch importorskip out for our own version that'll check if a module is None in qutebrowser.qt. Then a bunch of misc changes to get tests working: * change some ImportError checks in tests to look for None * some places that did importorskip when import qutebrowser modules, and then used the response, have been changed to first check the Qt module and then import the qutebrowser module. This is because some qutebrowser modules might throw AttributeErrors now that some Qt modules they depend on are None (probably type hints? I forget). * change a few stubs.ImportFake()s for the same reason * in test_ipc.py save the original enums to the mocked qlocal socket, for equality checks in the code, otherwise they were being returned as specced magick mocks Swapping out importorskip was done like: git grep -l pytest.importorskip tests/ | xargs sed -i -e 's/pytest.importorskip/testutils.qt_module_skip/' git grep -l "qt_module_skip('qutebrowser.qt" tests/ | xargs sed -i -e "s/qt_module_skip('qutebrowser.qt./qt_module_skip('/" git grep -l 'qt_module_skip("qutebrowser.qt' tests/ | xargs sed -i -e 's/qt_module_skip("qutebrowser.qt./qt_module_skip("/ Then manually changing a few back that weren't Qt related. --- qutebrowser/config/configfiles.py | 11 ++++----- qutebrowser/config/qtargs.py | 7 ++---- tests/conftest.py | 1 - tests/end2end/test_invocations.py | 5 ++--- tests/helpers/fixtures.py | 15 ++++++++----- tests/helpers/testutils.py | 14 ++++++++++++ tests/unit/browser/test_history.py | 11 +++++---- tests/unit/browser/test_notification.py | 5 ++++- .../browser/webengine/test_webengine_cookies.py | 7 ++++-- .../browser/webengine/test_webenginedownloads.py | 7 ++++-- .../browser/webengine/test_webengineinterceptor.py | 8 +++---- .../browser/webengine/test_webenginesettings.py | 8 ++++--- tests/unit/browser/webengine/test_webenginetab.py | 13 ++++++----- tests/unit/browser/webkit/test_mhtml.py | 3 +++ tests/unit/browser/webkit/test_tabhistory.py | 3 ++- tests/unit/browser/webkit/test_webkit_view.py | 8 ++++++- tests/unit/browser/webkit/test_webkitelem.py | 7 ++++-- tests/unit/browser/webkit/test_webkitsettings.py | 8 ++++--- tests/unit/completion/test_models.py | 3 ++- tests/unit/components/test_braveadblock.py | 2 +- tests/unit/config/test_configfiles.py | 3 +-- tests/unit/config/test_qtargs.py | 5 +++-- tests/unit/config/test_qtargs_locale_workaround.py | 3 ++- tests/unit/config/test_websettings.py | 5 +++-- .../position_caret/test_position_caret.py | 7 ++++-- .../javascript/stylesheet/test_stylesheet_js.py | 8 ++++--- tests/unit/misc/test_elf.py | 3 ++- tests/unit/misc/test_ipc.py | 6 +++-- tests/unit/misc/test_sessions.py | 3 ++- tests/unit/utils/test_debug.py | 3 ++- tests/unit/utils/test_log.py | 2 +- tests/unit/utils/test_qtutils.py | 1 + tests/unit/utils/test_standarddir.py | 4 ++-- tests/unit/utils/test_version.py | 26 ++++++++++------------ 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 . 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 . 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 . -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): -- cgit v1.2.3-54-g00ecf