Refactor keyutils tests involving all keys
This commit is contained in:
parent
50d2ef3b90
commit
a57fc5c746
@ -24,6 +24,7 @@
|
|||||||
|
|
||||||
|
|
||||||
import attr
|
import attr
|
||||||
|
from PyQt5.QtCore import Qt
|
||||||
|
|
||||||
|
|
||||||
@attr.s
|
@attr.s
|
||||||
@ -46,6 +47,9 @@ class Key:
|
|||||||
member = attr.ib(None)
|
member = attr.ib(None)
|
||||||
qtest = attr.ib(True)
|
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
|
# From enum Key in qt5/qtbase/src/corelib/global/qnamespace.h
|
||||||
KEYS = [
|
KEYS = [
|
||||||
|
@ -29,23 +29,25 @@ from qutebrowser.keyinput import keyutils
|
|||||||
@pytest.fixture(params=key_data.KEYS, ids=lambda k: k.attribute)
|
@pytest.fixture(params=key_data.KEYS, ids=lambda k: k.attribute)
|
||||||
def qt_key(request):
|
def qt_key(request):
|
||||||
key = request.param
|
key = request.param
|
||||||
member = getattr(Qt, 'Key_' + key.attribute, None)
|
if key.member is None:
|
||||||
if member is None:
|
|
||||||
pytest.skip("Did not find key {}".format(key.attribute))
|
pytest.skip("Did not find key {}".format(key.attribute))
|
||||||
key.member = member
|
|
||||||
return key
|
return key
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('upper', [False, True])
|
@pytest.fixture(params=[key for key in key_data.KEYS if key.qtest],
|
||||||
def test_key_text(qt_key, upper):
|
ids=lambda k: k.attribute)
|
||||||
modifiers = Qt.ShiftModifier if upper else Qt.KeyboardModifiers()
|
def qtest_key(request):
|
||||||
info = keyutils.KeyInfo(qt_key.member, modifiers=modifiers)
|
return request.param
|
||||||
expected = qt_key.uppertext if upper else qt_key.text
|
|
||||||
assert info.text() == expected
|
|
||||||
|
|
||||||
|
|
||||||
class KeyTestWidget(QWidget):
|
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()
|
got_text = pyqtSignal()
|
||||||
|
|
||||||
def keyPressEvent(self, e):
|
def keyPressEvent(self, e):
|
||||||
@ -53,22 +55,28 @@ class KeyTestWidget(QWidget):
|
|||||||
self.got_text.emit()
|
self.got_text.emit()
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
class TestKeyText:
|
||||||
def key_test(qtbot):
|
|
||||||
w = KeyTestWidget()
|
|
||||||
qtbot.add_widget(w)
|
|
||||||
return w
|
|
||||||
|
|
||||||
|
@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):
|
@pytest.fixture
|
||||||
if not qt_key.qtest:
|
def key_test(self, qtbot):
|
||||||
pytest.skip("Unsupported by QtTest")
|
w = KeyTestWidget()
|
||||||
|
qtbot.add_widget(w)
|
||||||
|
return w
|
||||||
|
|
||||||
with qtbot.wait_signal(key_test.got_text):
|
def test_key_test_qtest(self, qtest_key, qtbot, key_test):
|
||||||
qtbot.keyPress(key_test, qt_key.member)
|
with qtbot.wait_signal(key_test.got_text):
|
||||||
|
qtbot.keyPress(key_test, qtest_key.member)
|
||||||
|
|
||||||
info = keyutils.KeyInfo(qt_key.member, modifiers=Qt.KeyboardModifiers())
|
info = keyutils.KeyInfo(qtest_key.member,
|
||||||
assert info.text() == key_test.text.lower()
|
modifiers=Qt.KeyboardModifiers())
|
||||||
|
assert info.text() == key_test.text.lower()
|
||||||
|
|
||||||
|
|
||||||
class TestKeyToString:
|
class TestKeyToString:
|
||||||
|
Loading…
Reference in New Issue
Block a user