diff --git a/qutebrowser/keyinput/basekeyparser.py b/qutebrowser/keyinput/basekeyparser.py index 56b9cfaac..2b41dac65 100644 --- a/qutebrowser/keyinput/basekeyparser.py +++ b/qutebrowser/keyinput/basekeyparser.py @@ -186,9 +186,6 @@ class BaseKeyParser(QObject): match, binding = self._match_key(cmd_input) - if not isinstance(match, self.Match): - raise TypeError("Value {} is no Match member!".format(match)) - if match == self.Match.definitive: self._debug_log("Definitive match for '{}'.".format( self._keystring)) @@ -205,6 +202,8 @@ class BaseKeyParser(QObject): self._debug_log("Giving up with '{}', no matches".format( self._keystring)) self._keystring = '' + else: + raise AssertionError("Invalid match value {!r}".format(match)) return match def _match_key(self, cmd_input): diff --git a/tests/unit/keyinput/test_basekeyparser.py b/tests/unit/keyinput/test_basekeyparser.py index d5eadbb5e..9abba0e9c 100644 --- a/tests/unit/keyinput/test_basekeyparser.py +++ b/tests/unit/keyinput/test_basekeyparser.py @@ -27,9 +27,11 @@ from PyQt5.QtCore import Qt import pytest from qutebrowser.keyinput import basekeyparser +from qutebrowser.utils import utils CONFIG = {'input': {'timeout': 100}} +CONFIG_NO_TIMEOUT = {'input': {'timeout': 0}} @pytest.fixture @@ -131,6 +133,15 @@ class TestSpecialKeys: self.kp.handle(fake_keyevent_factory(Qt.Key_A)) assert not self.kp.execute.called + def test_no_binding(self, monkeypatch, fake_keyevent_factory): + """Test special key with no binding.""" + def none_return(binding): + return None + + monkeypatch.setattr(utils, 'keyevent_to_string', none_return) + self.kp.handle(fake_keyevent_factory(Qt.Key_A, Qt.NoModifier)) + assert not self.kp.execute.called + @pytest.mark.usefixtures('mock_timer') class TestKeyChain: @@ -205,6 +216,17 @@ class TestKeyChain: assert not timer.isActive() assert self.kp._keystring == '' + def test_ambiguous_keychain_no_timeout(self, fake_keyevent_factory, + config_stub, monkeypatch): + """Test ambiguous keychain with timeout equal to 0.""" + config_stub.data = CONFIG_NO_TIMEOUT + monkeypatch.setattr('qutebrowser.keyinput.basekeyparser.config', + config_stub) + self.kp.handle(fake_keyevent_factory(Qt.Key_A, text='a')) + assert self.kp.execute.called + timer = self.kp._ambiguous_timer + assert not timer.isActive() + def test_invalid_keychain(self, fake_keyevent_factory): """Test invalid keychain.""" self.kp.handle(fake_keyevent_factory(Qt.Key_B, text='b'))