Resolve KeyError when deleting URL with space.

Resolves #2963.
This commit is contained in:
Ryan Roden-Corrent 2017-09-14 12:03:40 -04:00
parent 31bd4d7ffe
commit 5cd00f699e
2 changed files with 14 additions and 8 deletions

View File

@ -26,7 +26,7 @@ from PyQt5.QtCore import pyqtSlot, QUrl, QTimer
from qutebrowser.commands import cmdutils, cmdexc from qutebrowser.commands import cmdutils, cmdexc
from qutebrowser.utils import (utils, objreg, log, usertypes, message, from qutebrowser.utils import (utils, objreg, log, usertypes, message,
debug, standarddir) debug, standarddir, qtutils)
from qutebrowser.misc import objects, sql from qutebrowser.misc import objects, sql
@ -144,8 +144,10 @@ class WebHistory(sql.SqlTable):
Args: Args:
url: URL string to delete. url: URL string to delete.
""" """
self.delete('url', url) qurl = QUrl(url)
self.completion.delete('url', url) qtutils.ensure_valid(qurl)
self.delete('url', self._format_url(qurl))
self.completion.delete('url', self._format_completion_url(qurl))
@pyqtSlot(QUrl, QUrl, str) @pyqtSlot(QUrl, QUrl, str)
def add_from_tab(self, url, requested_url, title): def add_from_tab(self, url, requested_url, title):

View File

@ -127,21 +127,25 @@ def test_clear_force(qtbot, tmpdir, hist):
assert not len(hist.completion) assert not len(hist.completion)
def test_delete_url(hist): @pytest.mark.parametrize('raw, escaped', [
('http://example.com/1', 'http://example.com/1'),
('http://example.com/1 2', 'http://example.com/1%202'),
])
def test_delete_url(hist, raw, escaped):
hist.add_url(QUrl('http://example.com/'), atime=0) hist.add_url(QUrl('http://example.com/'), atime=0)
hist.add_url(QUrl('http://example.com/1'), atime=0) hist.add_url(QUrl(escaped), atime=0)
hist.add_url(QUrl('http://example.com/2'), atime=0) hist.add_url(QUrl('http://example.com/2'), atime=0)
before = set(hist) before = set(hist)
completion_before = set(hist.completion) completion_before = set(hist.completion)
hist.delete_url(QUrl('http://example.com/1')) hist.delete_url(QUrl(raw))
diff = before.difference(set(hist)) diff = before.difference(set(hist))
assert diff == {('http://example.com/1', '', 0, False)} assert diff == {(escaped, '', 0, False)}
completion_diff = completion_before.difference(set(hist.completion)) completion_diff = completion_before.difference(set(hist.completion))
assert completion_diff == {('http://example.com/1', '', 0)} assert completion_diff == {(raw, '', 0)}
@pytest.mark.parametrize( @pytest.mark.parametrize(