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