Fix URL/renderer crash tests with Qt 5.9

The behavior in Qt changed there (in a good way), so we need to adjust the tests
accordingly.

Fixes #2514
This commit is contained in:
Florian Bruhin 2017-05-19 08:10:17 +02:00
parent f67cf17055
commit c4fb2bc609
6 changed files with 41 additions and 20 deletions

View File

@ -685,6 +685,7 @@ class TabbedBrowser(tabwidget.TabWidget):
'error.html', title="Error loading {}".format(url_string), 'error.html', title="Error loading {}".format(url_string),
url=url_string, error=msg, icon='') url=url_string, error=msg, icon='')
QTimer.singleShot(0, lambda: tab.set_html(error_page)) QTimer.singleShot(0, lambda: tab.set_html(error_page))
log.webview.error(msg)
else: else:
# WORKAROUND for https://bugreports.qt.io/browse/QTBUG-58698 # WORKAROUND for https://bugreports.qt.io/browse/QTBUG-58698
message.error(msg) message.error(msg)

View File

@ -674,16 +674,29 @@ Feature: Various utility commands.
## Renderer crashes ## Renderer crashes
# Skipped on Windows as "... has stopped working" hangs. # Skipped on Windows as "... has stopped working" hangs.
@qtwebkit_skip @no_invalid_lines @posix @qtwebkit_skip @no_invalid_lines @posix @qt<5.9
Scenario: Renderer crash Scenario: Renderer crash
When I run :open -t chrome://crash When I run :open -t chrome://crash
Then the error "Renderer process crashed" should be shown Then the error "Renderer process crashed" should be shown
@qtwebkit_skip @no_invalid_lines @qtwebkit_skip @no_invalid_lines @qt<5.9
Scenario: Renderer kill Scenario: Renderer kill
When I run :open -t chrome://kill When I run :open -t chrome://kill
Then the error "Renderer process was killed" should be shown Then the error "Renderer process was killed" should be shown
# Skipped on Windows as "... has stopped working" hangs.
@qtwebkit_skip @no_invalid_lines @posix @qt>=5.9
Scenario: Renderer crash (5.9)
When I run :open -t chrome://crash
Then "Renderer process crashed" should be logged
And "* 'Error loading chrome://crash/'" should be logged
@qtwebkit_skip @no_invalid_lines @qt>=5.9
Scenario: Renderer kill (5.9)
When I run :open -t chrome://kill
Then "Renderer process was killed" should be logged
And "* 'Error loading chrome://kill/'" should be logged
# https://github.com/qutebrowser/qutebrowser/issues/2290 # https://github.com/qutebrowser/qutebrowser/issues/2290
@qtwebkit_skip @no_invalid_lines @qtwebkit_skip @no_invalid_lines
Scenario: Navigating to URL after renderer process is gone Scenario: Navigating to URL after renderer process is gone
@ -694,5 +707,3 @@ Feature: Various utility commands.
And I wait for "Renderer process was killed" in the log And I wait for "Renderer process was killed" in the log
And I open data/numbers/3.txt And I open data/numbers/3.txt
Then no crash should happen Then no crash should happen
And the following tabs should be open:
- data/numbers/3.txt (active)

View File

@ -26,6 +26,14 @@ import os.path
import pytest import pytest
from qutebrowser.utils import qtutils
qt58 = pytest.mark.skipif(
qtutils.version_check('5.9'), reason="Needs Qt 5.8 or earlier")
qt59 = pytest.mark.skipif(
not qtutils.version_check('5.9'), reason="Needs Qt 5.9 or newer")
class PartialCompareOutcome: class PartialCompareOutcome:

View File

@ -24,12 +24,7 @@ import pytest
pytest.importorskip('PyQt5.QtWebEngineWidgets') pytest.importorskip('PyQt5.QtWebEngineWidgets')
from qutebrowser.browser.webengine import webenginedownloads from qutebrowser.browser.webengine import webenginedownloads
from qutebrowser.utils import qtutils from helpers import utils
qt58 = pytest.mark.skipif(
qtutils.version_check('5.9'), reason="Needs Qt 5.8 or earlier")
qt59 = pytest.mark.skipif(
not qtutils.version_check('5.9'), reason="Needs Qt 5.9 or newer")
@pytest.mark.parametrize('path, expected', [ @pytest.mark.parametrize('path, expected', [
@ -37,10 +32,10 @@ qt59 = pytest.mark.skipif(
('foo(1)', 'foo'), ('foo(1)', 'foo'),
('foo(a)', 'foo(a)'), ('foo(a)', 'foo(a)'),
('foo1', 'foo1'), ('foo1', 'foo1'),
qt58(('foo%20bar', 'foo bar')), utils.qt58(('foo%20bar', 'foo bar')),
qt58(('foo%2Fbar', 'bar')), utils.qt58(('foo%2Fbar', 'bar')),
qt59(('foo%20bar', 'foo%20bar')), utils.qt59(('foo%20bar', 'foo%20bar')),
qt59(('foo%2Fbar', 'foo%2Fbar')), utils.qt59(('foo%2Fbar', 'foo%2Fbar')),
]) ])
def test_get_suggested_filename(path, expected): def test_get_suggested_filename(path, expected):
assert webenginedownloads._get_suggested_filename(path) == expected assert webenginedownloads._get_suggested_filename(path) == expected

View File

@ -22,10 +22,11 @@
import pytest import pytest
from PyQt5.QtCore import QUrl
from qutebrowser.utils import usertypes, urlutils from qutebrowser.utils import usertypes, urlutils
from qutebrowser.mainwindow.statusbar import url from qutebrowser.mainwindow.statusbar import url
from helpers import utils
from PyQt5.QtCore import QUrl
@pytest.fixture @pytest.fixture
@ -60,8 +61,10 @@ def url_widget(qtbot, monkeypatch, config_stub):
('http://username:secret%20password@test.com', 'http://username@test.com'), ('http://username:secret%20password@test.com', 'http://username@test.com'),
('http://example.com%5b/', '(invalid URL!) http://example.com%5b/'), ('http://example.com%5b/', '(invalid URL!) http://example.com%5b/'),
# https://bugreports.qt.io/browse/QTBUG-60364 # https://bugreports.qt.io/browse/QTBUG-60364
('http://www.xn--80ak6aa92e.com', utils.qt58(('http://www.xn--80ak6aa92e.com',
'(unparseable URL!) http://www.аррӏе.com'), '(unparseable URL!) http://www.аррӏе.com')),
utils.qt59(('http://www.xn--80ak6aa92e.com',
'http://www.xn--80ak6aa92e.com')),
# IDN URL # IDN URL
('http://www.ä.com', '(www.xn--4ca.com) http://www.ä.com'), ('http://www.ä.com', '(www.xn--4ca.com) http://www.ä.com'),
(None, ''), (None, ''),

View File

@ -30,6 +30,7 @@ import pytest
from qutebrowser.commands import cmdexc from qutebrowser.commands import cmdexc
from qutebrowser.browser.network import pac from qutebrowser.browser.network import pac
from qutebrowser.utils import utils, urlutils, qtutils, usertypes from qutebrowser.utils import utils, urlutils, qtutils, usertypes
from helpers import utils
class FakeDNS: class FakeDNS:
@ -755,8 +756,10 @@ def test_data_url():
(QUrl('http://www.example.xn--p1ai'), (QUrl('http://www.example.xn--p1ai'),
'(www.example.xn--p1ai) http://www.example.рф'), '(www.example.xn--p1ai) http://www.example.рф'),
# https://bugreports.qt.io/browse/QTBUG-60364 # https://bugreports.qt.io/browse/QTBUG-60364
(QUrl('http://www.xn--80ak6aa92e.com'), utils.qt58((QUrl('http://www.xn--80ak6aa92e.com'),
'(unparseable URL!) http://www.аррӏе.com'), '(unparseable URL!) http://www.аррӏе.com')),
utils.qt59((QUrl('http://www.xn--80ak6aa92e.com'),
'http://www.xn--80ak6aa92e.com')),
]) ])
def test_safe_display_string(url, expected): def test_safe_display_string(url, expected):
assert urlutils.safe_display_string(url) == expected assert urlutils.safe_display_string(url) == expected