diff --git a/tests/unit/keyinput/key_data.py b/tests/unit/keyinput/key_data.py index cc5c249b5..0164a839b 100644 --- a/tests/unit/keyinput/key_data.py +++ b/tests/unit/keyinput/key_data.py @@ -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 = [ diff --git a/tests/unit/keyinput/test_keyutils.py b/tests/unit/keyinput/test_keyutils.py index df399497e..43d9bf879 100644 --- a/tests/unit/keyinput/test_keyutils.py +++ b/tests/unit/keyinput/test_keyutils.py @@ -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: