summaryrefslogtreecommitdiff
path: root/tests/helpers/fixtures.py
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2020-05-22 18:26:58 +0200
committerFlorian Bruhin <me@the-compiler.org>2020-05-22 20:48:06 +0200
commit781a68a10e10f559575f23c6ed8faa2fb46ab7d9 (patch)
tree8dbd2be40c0cb13542101f6d683a868654d24c93 /tests/helpers/fixtures.py
parentd2f3bc4bad6b519b972472b9fb32dcb0b4f2f85a (diff)
downloadqutebrowser-781a68a10e10f559575f23c6ed8faa2fb46ab7d9.tar.gz
qutebrowser-781a68a10e10f559575f23c6ed8faa2fb46ab7d9.zip
tests: make sure webengine_tab/webkit_tab take care of shutdown
This still doesn't help with this inside Xvfb: XIO: fatal IO error 0 (Success) on X server ":1001" But at least it prevents an unknown segfault inside QtWebEngine.
Diffstat (limited to 'tests/helpers/fixtures.py')
-rw-r--r--tests/helpers/fixtures.py23
1 files changed, 20 insertions, 3 deletions
diff --git a/tests/helpers/fixtures.py b/tests/helpers/fixtures.py
index eb4186894..0624ef698 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
@@ -207,14 +208,17 @@ 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
@@ -230,11 +234,24 @@ 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...
+ if qtutils.version_check('5.12'):
+ sip.delete(tab._widget)
+
@pytest.fixture(params=['webkit', 'webengine'])
def web_tab(request):