summaryrefslogtreecommitdiff
path: root/tests/helpers
diff options
context:
space:
mode:
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
commit12e1b157e746658faef3b491da848dff18fa91c7 (patch)
treed7d5e873e4c4e63ff778ccde2a8d2c8317c499eb /tests/helpers
parent2ac0edb68e675a93575c60a0481a768a4f8a64ba (diff)
parenta6817bd0865719bc1dc3a272fd8ab85c0d139937 (diff)
downloadqutebrowser-12e1b157e746658faef3b491da848dff18fa91c7.tar.gz
qutebrowser-12e1b157e746658faef3b491da848dff18fa91c7.zip
Merge branch 'master' into more-sophisticated-adblock
Diffstat (limited to 'tests/helpers')
-rw-r--r--tests/helpers/fixtures.py34
-rw-r--r--tests/helpers/stubs.py29
-rw-r--r--tests/helpers/utils.py12
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(