tst_input_win32.cpp
1 #include <QtTest/QtTest> 2 3 #include <gui/input.h> 4 #include "tst_input.h" 5 6 class TestInputWin32 : public QObject 7 { 8 Q_OBJECT 9 10 private slots: 11 void LessThanModifierKeys() noexcept; 12 void SpecialKeys() noexcept; 13 void CtrlCaretWellFormed() noexcept; 14 void ShiftModifierLetter() noexcept; 15 void GermanKeyboardLayout() noexcept; 16 void FrenchBepoKeyboardLayout() noexcept; 17 }; 18 19 void TestInputWin32::LessThanModifierKeys() noexcept 20 { 21 QKeyEvent evLessThanControl{ QEvent::KeyPress, Qt::Key::Key_Less, Qt::ShiftModifier | Qt::ControlModifier, "<" }; 22 QCOMPARE(NeovimQt::Input::convertKey(evLessThanControl), QString{ "<C-lt>" }); 23 24 QKeyEvent evLessThanAlt{ QEvent::KeyPress, Qt::Key::Key_Less, Qt::ShiftModifier | Qt::AltModifier, "<" }; 25 QCOMPARE(NeovimQt::Input::convertKey(evLessThanAlt), QString{ "<A-lt>" }); 26 27 QKeyEvent evLessThanMeta{ QEvent::KeyPress, Qt::Key::Key_Less, Qt::ShiftModifier | Qt::MetaModifier, "<" }; 28 QCOMPARE(NeovimQt::Input::convertKey(evLessThanMeta), QString{ "<lt>" }); 29 } 30 31 void TestInputWin32::SpecialKeys() noexcept 32 { 33 const QList<int> specialKeys{ NeovimQt::Input::GetSpecialKeysMap().keys() }; 34 35 for (const auto k : specialKeys) { 36 // On Mac Meta is the Control key, treated as C-. 37 QList<InputTest> keyEventList{ 38 { QEvent::KeyPress, k, Qt::NoModifier, "<%1>" }, 39 { QEvent::KeyPress, k, Qt::ControlModifier, "<C-%1>" }, 40 { QEvent::KeyPress, k, Qt::AltModifier, "<A-%1>" }, 41 { QEvent::KeyPress, k, Qt::MetaModifier, "<%1>" }, 42 }; 43 44 for (const auto& keyTest : keyEventList) { 45 auto event = QKeyEvent(keyTest.event_type, keyTest.key, keyTest.modifiers); 46 QCOMPARE(NeovimQt::Input::convertKey(event), 47 keyTest.expected_input.arg(NeovimQt::Input::GetSpecialKeysMap().value(k))); 48 } 49 } 50 } 51 52 void TestInputWin32::CtrlCaretWellFormed() noexcept 53 { 54 QKeyEvent evCtrl6{ QEvent::KeyPress, Qt::Key_6, Qt::ControlModifier, { "6" } }; 55 QCOMPARE(NeovimQt::Input::convertKey(evCtrl6), QString{ "<C-^>" }); 56 57 QKeyEvent evCtrlShift6{ QEvent::KeyPress, Qt::Key_AsciiCircum, Qt::ControlModifier | Qt::ShiftModifier, { "\u001E" } }; 58 QCOMPARE(NeovimQt::Input::convertKey(evCtrlShift6), QString{ "<C-^>" }); 59 } 60 61 void TestInputWin32::ShiftModifierLetter() noexcept 62 { 63 // CTRL + B 64 QKeyEvent evCtrlB{ QEvent::KeyPress, Qt::Key_B, Qt::ControlModifier, QString{ "\u0002" } }; 65 QCOMPARE(NeovimQt::Input::convertKey(evCtrlB), QString{ "<C-b>" }); 66 67 // CTRL + SHIFT + B 68 QKeyEvent evCtrlShiftB{ QEvent::KeyPress, Qt::Key_B, Qt::ControlModifier | Qt::ShiftModifier, 69 QString{ "\u0002" } }; 70 QCOMPARE(NeovimQt::Input::convertKey(evCtrlShiftB), QString{ "<C-S-B>" }); 71 } 72 73 void TestInputWin32::GermanKeyboardLayout() noexcept 74 { 75 QKeyEvent evAlt7{ QEvent::KeyPress, Qt::Key_BraceLeft, Qt::ControlModifier | Qt::AltModifier, "{" }; 76 QCOMPARE(NeovimQt::Input::convertKey(evAlt7), QString{ "{" }); 77 78 QKeyEvent evAlt8{ QEvent::KeyPress, Qt::Key_BracketLeft, Qt::ControlModifier | Qt::AltModifier, "[" }; 79 QCOMPARE(NeovimQt::Input::convertKey(evAlt8), QString{ "[" }); 80 81 QKeyEvent evAlt9{ QEvent::KeyPress, Qt::Key_BracketRight, Qt::ControlModifier | Qt::AltModifier, "]" }; 82 QCOMPARE(NeovimQt::Input::convertKey(evAlt9), QString{ "]" }); 83 84 QKeyEvent evAlt0{ QEvent::KeyPress, Qt::Key_BraceRight, Qt::ControlModifier | Qt::AltModifier, "}" }; 85 QCOMPARE(NeovimQt::Input::convertKey(evAlt0), QString{ "}" }); 86 87 QKeyEvent evKeyAt{ QEvent::KeyPress, Qt::Key_At, Qt::ControlModifier | Qt::AltModifier, "@" }; 88 QCOMPARE(NeovimQt::Input::convertKey(evKeyAt), QString{ "@" }); 89 90 QKeyEvent evKeyBSlash{ QEvent::KeyPress, Qt::Key_Backslash, Qt::ControlModifier | Qt::AltModifier, "\\" }; 91 QCOMPARE(NeovimQt::Input::convertKey(evKeyBSlash), QString{ "<Bslash>" }); 92 93 QKeyEvent evKeyTilde{ QEvent::KeyPress, Qt::Key_AsciiTilde, Qt::ControlModifier | Qt::AltModifier, "~" }; 94 QCOMPARE(NeovimQt::Input::convertKey(evKeyTilde), QString{ "~" }); 95 96 QKeyEvent evLeftAlt8{ QEvent::KeyPress, Qt::Key_8, Qt::AltModifier, "8" }; 97 QCOMPARE(NeovimQt::Input::convertKey(evLeftAlt8), QString{ "<A-8>" }); 98 } 99 100 void TestInputWin32::FrenchBepoKeyboardLayout() noexcept 101 { 102 QKeyEvent evTilde{ QEvent::KeyPress, Qt::Key_Space, Qt::NoModifier, "~" }; 103 QCOMPARE(NeovimQt::Input::convertKey(evTilde), QString{ "~" }); 104 105 QKeyEvent evCircum{ QEvent::KeyPress, Qt::Key_Space, Qt::NoModifier, "^" }; 106 QCOMPARE(NeovimQt::Input::convertKey(evCircum), QString{ "^" }); 107 108 QKeyEvent evShiftCircum{ QEvent::KeyPress, Qt::Key_Space, Qt::ShiftModifier, "^" }; 109 QCOMPARE(NeovimQt::Input::convertKey(evShiftCircum), QString{ "<S-^>" }); 110 111 QKeyEvent evSpace{ QEvent::KeyPress, Qt::Key_Space, Qt::NoModifier, " " }; 112 QCOMPARE(NeovimQt::Input::convertKey(evSpace), QString{ "<Space>" }); 113 } 114 115 #include "tst_input_win32.moc" 116 QTEST_MAIN(TestInputWin32)