diff options
author | Florian Bruhin <me@the-compiler.org> | 2020-05-22 18:26:58 +0200 |
---|---|---|
committer | Florian Bruhin <me@the-compiler.org> | 2020-05-22 20:48:06 +0200 |
commit | 781a68a10e10f559575f23c6ed8faa2fb46ab7d9 (patch) | |
tree | 8dbd2be40c0cb13542101f6d683a868654d24c93 | |
parent | d2f3bc4bad6b519b972472b9fb32dcb0b4f2f85a (diff) | |
download | qutebrowser-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.
-rw-r--r-- | tests/helpers/fixtures.py | 23 | ||||
-rw-r--r-- | tests/helpers/stubs.py | 4 |
2 files changed, 24 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): diff --git a/tests/helpers/stubs.py b/tests/helpers/stubs.py index caa7aac3f..f775092f5 100644 --- a/tests/helpers/stubs.py +++ b/tests/helpers/stubs.py @@ -615,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: |