Refactor keyutils tests involving all keys

This commit is contained in:
Florian Bruhin 2018-03-01 08:12:19 +01:00
parent 50d2ef3b90
commit a57fc5c746
2 changed files with 33 additions and 21 deletions

View File

@ -24,6 +24,7 @@
import attr
from PyQt5.QtCore import Qt
@attr.s
@ -46,6 +47,9 @@ class Key:
member = attr.ib(None)
qtest = attr.ib(True)
def __attrs_post_init__(self):
self.member = getattr(Qt, 'Key_' + self.attribute, None)
# From enum Key in qt5/qtbase/src/corelib/global/qnamespace.h
KEYS = [

View File

@ -29,23 +29,25 @@ from qutebrowser.keyinput import keyutils
@pytest.fixture(params=key_data.KEYS, ids=lambda k: k.attribute)
def qt_key(request):
key = request.param
member = getattr(Qt, 'Key_' + key.attribute, None)
if member is None:
if key.member is None:
pytest.skip("Did not find key {}".format(key.attribute))
key.member = member
return key
@pytest.mark.parametrize('upper', [False, True])
def test_key_text(qt_key, upper):
modifiers = Qt.ShiftModifier if upper else Qt.KeyboardModifiers()
info = keyutils.KeyInfo(qt_key.member, modifiers=modifiers)
expected = qt_key.uppertext if upper else qt_key.text
assert info.text() == expected
@pytest.fixture(params=[key for key in key_data.KEYS if key.qtest],
ids=lambda k: k.attribute)
def qtest_key(request):
return request.param
class KeyTestWidget(QWidget):
"""Widget to get the text of QKeyPressEvents.
This is done so we can check QTest::keyToAscii (qasciikey.cpp) as we can't
call that directly, only via QTest::keyPress.
"""
got_text = pyqtSignal()
def keyPressEvent(self, e):
@ -53,22 +55,28 @@ class KeyTestWidget(QWidget):
self.got_text.emit()
@pytest.fixture
def key_test(qtbot):
w = KeyTestWidget()
qtbot.add_widget(w)
return w
class TestKeyText:
@pytest.mark.parametrize('upper', [False, True])
def test_key_text(self, qt_key, upper):
modifiers = Qt.ShiftModifier if upper else Qt.KeyboardModifiers()
info = keyutils.KeyInfo(qt_key.member, modifiers=modifiers)
expected = qt_key.uppertext if upper else qt_key.text
assert info.text() == expected
def test_key_test_qtest(qt_key, qtbot, key_test):
if not qt_key.qtest:
pytest.skip("Unsupported by QtTest")
@pytest.fixture
def key_test(self, qtbot):
w = KeyTestWidget()
qtbot.add_widget(w)
return w
with qtbot.wait_signal(key_test.got_text):
qtbot.keyPress(key_test, qt_key.member)
def test_key_test_qtest(self, qtest_key, qtbot, key_test):
with qtbot.wait_signal(key_test.got_text):
qtbot.keyPress(key_test, qtest_key.member)
info = keyutils.KeyInfo(qt_key.member, modifiers=Qt.KeyboardModifiers())
assert info.text() == key_test.text.lower()
info = keyutils.KeyInfo(qtest_key.member,
modifiers=Qt.KeyboardModifiers())
assert info.text() == key_test.text.lower()
class TestKeyToString: