diff options
author | Árni Dagur <agudmundsson@fc-md.umd.edu> | 2020-06-21 01:44:24 -0400 |
---|---|---|
committer | Árni Dagur <arni@dagur.eu> | 2020-12-19 20:23:17 +0000 |
commit | 12e1b157e746658faef3b491da848dff18fa91c7 (patch) | |
tree | d7d5e873e4c4e63ff778ccde2a8d2c8317c499eb /tests/helpers | |
parent | 2ac0edb68e675a93575c60a0481a768a4f8a64ba (diff) | |
parent | a6817bd0865719bc1dc3a272fd8ab85c0d139937 (diff) | |
download | qutebrowser-12e1b157e746658faef3b491da848dff18fa91c7.tar.gz qutebrowser-12e1b157e746658faef3b491da848dff18fa91c7.zip |
Merge branch 'master' into more-sophisticated-adblock
Diffstat (limited to 'tests/helpers')
-rw-r--r-- | tests/helpers/fixtures.py | 34 | ||||
-rw-r--r-- | tests/helpers/stubs.py | 29 | ||||
-rw-r--r-- | tests/helpers/utils.py | 12 |
3 files changed, 67 insertions, 8 deletions
diff --git a/tests/helpers/fixtures.py b/tests/helpers/fixtures.py index 3bb2ad3e5..60a4f02ba 100644 --- a/tests/helpers/fixtures.py +++ b/tests/helpers/fixtures.py @@ -45,11 +45,12 @@ import helpers.stubs as stubsmod from qutebrowser.config import (config, configdata, configtypes, configexc, configfiles, configcache, stylesheet) from qutebrowser.api import config as configapi -from qutebrowser.utils import objreg, standarddir, utils, usertypes +from qutebrowser.utils import objreg, standarddir, utils, usertypes, qtutils from qutebrowser.browser import greasemonkey, history, qutescheme from qutebrowser.browser.webkit import cookies, cache from qutebrowser.misc import savemanager, sql, objects, sessions from qutebrowser.keyinput import modeman +from qutebrowser.qt import sip _qute_scheme_handler = None @@ -64,14 +65,17 @@ class WidgetContainer(QWidget): self._qtbot = qtbot self.vbox = QVBoxLayout(self) qtbot.add_widget(self) + self._widget = None def set_widget(self, widget): self.vbox.addWidget(widget) widget.container = self + self._widget = widget def expose(self): with self._qtbot.waitExposed(self): self.show() + self._widget.setFocus() @pytest.fixture @@ -204,19 +208,23 @@ 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, webpage): + widget_container, download_stub, webpage): webkittab = pytest.importorskip('qutebrowser.browser.webkit.webkittab') tab = webkittab.WebKitTab(win_id=0, mode_manager=mode_manager, private=False) widget_container.set_widget(tab) - return tab + yield tab + + # Make sure the tab shuts itself down properly + tab.private_api.shutdown() @pytest.fixture def webengine_tab(web_tab_setup, qtbot, redirect_webengine_data, - tabbed_browser_stubs, mode_manager, widget_container): + tabbed_browser_stubs, mode_manager, widget_container, + monkeypatch): tabwidget = tabbed_browser_stubs[0].widget tabwidget.current_index = 0 tabwidget.index_of = 0 @@ -227,18 +235,34 @@ def webengine_tab(web_tab_setup, qtbot, redirect_webengine_data, tab = webenginetab.WebEngineTab(win_id=0, mode_manager=mode_manager, private=False) widget_container.set_widget(tab) + yield tab + # If a page is still loading here, _on_load_finished could get called # during teardown when session_manager_stub is already deleted. tab.stop() + # Make sure the tab shuts itself down properly + tab.private_api.shutdown() + + # If we wait for the GC to clean things up, there's a segfault inside + # QtWebEngine sometimes (e.g. if we only run + # tests/unit/browser/test_caret.py). + # However, with Qt < 5.12, doing this here will lead to an immediate + # segfault... + monkeypatch.undo() # version_check could be patched + if qtutils.version_check('5.12'): + sip.delete(tab._widget) + @pytest.fixture(params=['webkit', 'webengine']) def web_tab(request): """A WebKitTab/WebEngineTab.""" if request.param == 'webkit': + pytest.importorskip('qutebrowser.browser.webkit.webkittab') return request.getfixturevalue('webkit_tab') elif request.param == 'webengine': + pytest.importorskip('qutebrowser.browser.webengine.webenginetab') return request.getfixturevalue('webengine_tab') else: raise utils.Unreachable @@ -313,7 +337,7 @@ def config_stub(stubs, monkeypatch, configdata_init, yaml_config_stub, qapp): monkeypatch.setattr(config, 'cache', cache) try: - configtypes.Font.set_defaults(None, '10pt') + configtypes.FontBase.set_defaults(None, '10pt') except configexc.NoOptionError: # Completion tests patch configdata so fonts.default_family is # unavailable. diff --git a/tests/helpers/stubs.py b/tests/helpers/stubs.py index ff6690da5..bc8044461 100644 --- a/tests/helpers/stubs.py +++ b/tests/helpers/stubs.py @@ -115,8 +115,8 @@ class FakeQApplication: UNSET = object() - def __init__(self, style=None, all_widgets=None, active_window=None, - instance=UNSET, arguments=None): + def __init__(self, *, style=None, all_widgets=None, active_window=None, + instance=UNSET, arguments=None, platform_name=None): if instance is self.UNSET: self.instance = mock.Mock(return_value=self) @@ -129,6 +129,7 @@ class FakeQApplication: self.allWidgets = lambda: all_widgets self.activeWindow = lambda: active_window self.arguments = lambda: arguments + self.platformName = lambda: platform_name class FakeNetworkReply: @@ -256,7 +257,7 @@ class FakeWebTab(browsertab.AbstractTab): scroll_pos_perc=(0, 0), load_status=usertypes.LoadStatus.success, progress=0, can_go_back=None, can_go_forward=None): - super().__init__(win_id=0, private=False) + super().__init__(win_id=0, mode_manager=None, private=False) self._load_status = load_status self._title = title self._url = url @@ -614,6 +615,10 @@ class FakeDownloadManager: self.downloads.append(download_item) return download_item + def has_downloads_with_nam(self, _nam): + """Needed during WebView.shutdown().""" + return False + class FakeHistoryProgress: @@ -651,3 +656,21 @@ class FakeHintManager: def handle_partial_key(self, keystr): self.keystr = keystr + + def current_mode(self): + return 'letter' + + +class FakeWebEngineProfile: + + def __init__(self, cookie_store): + self.cookieStore = lambda: cookie_store + + +class FakeCookieStore: + + def __init__(self, has_cookie_filter): + self.cookie_filter = None + if has_cookie_filter: + self.setCookieFilter = ( + lambda func: setattr(self, 'cookie_filter', func)) # noqa diff --git a/tests/helpers/utils.py b/tests/helpers/utils.py index 1d3f0bfac..dd30d9921 100644 --- a/tests/helpers/utils.py +++ b/tests/helpers/utils.py @@ -25,6 +25,7 @@ import gzip import pprint import os.path import contextlib +import pathlib import pytest @@ -187,6 +188,17 @@ def nop_contextmanager(): @contextlib.contextmanager +def change_cwd(path): + """Use a path as current working directory.""" + old_cwd = pathlib.Path.cwd() + os.chdir(str(path)) + try: + yield + finally: + os.chdir(str(old_cwd)) + + +@contextlib.contextmanager def ignore_bs4_warning(): """WORKAROUND for https://bugs.launchpad.net/beautifulsoup/+bug/1847592.""" with log.ignore_py_warnings( |