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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
#include "testUtils.h"
#include <QtCore>
#include "keymap/KeymapEvaluator.hpp"
// NOLINTBEGIN
class KeymapEvaluatorSpec : public QObject {
Q_OBJECT
private slots:
void test_evaluate_single_key_chord() {
context("when the key sequence is mapped");
it("calls mapping") {
auto keymap_was_called = false;
KeymapEvaluator evaluator;
evaluator.add_keymap(KeyMode::Normal, "<c-t>", [&keymap_was_called]() {
keymap_was_called = true;
});
evaluator.evaluate(Qt::ControlModifier, Qt::Key_T);
QVERIFY(keymap_was_called);
}
context("when the key sequence is not mapped");
it("does not call mapping") {
auto keymap_was_called = false;
KeymapEvaluator evaluator;
evaluator.add_keymap(KeyMode::Normal, "<c-t>", [&keymap_was_called]() {
keymap_was_called = true;
});
evaluator.evaluate(Qt::ControlModifier, Qt::Key_K);
QVERIFY(NOT keymap_was_called);
}
}
void test_evaluate_multi_key_sequence() {
context("when the full key sequence is mapped");
it("calls mapping") {
auto keymap_was_called = false;
KeymapEvaluator evaluator;
evaluator.add_keymap(KeyMode::Normal, "<c-t>a", [&keymap_was_called]() {
keymap_was_called = true;
});
evaluator.evaluate(Qt::ControlModifier, Qt::Key_T);
evaluator.evaluate(Qt::NoModifier, Qt::Key_A);
QVERIFY(keymap_was_called);
}
context("when only part of a mapped key sequence is entered");
it("does not call mapping") {
auto keymap_was_called = false;
KeymapEvaluator evaluator;
evaluator.add_keymap(KeyMode::Normal, "<c-t>a", [&keymap_was_called]() {
keymap_was_called = true;
});
evaluator.evaluate(Qt::ControlModifier, Qt::Key_T);
QVERIFY(NOT keymap_was_called);
}
context("when the key sequence is not mapped");
it("does not call mapping") {
auto keymap_was_called = false;
KeymapEvaluator evaluator;
evaluator.add_keymap(KeyMode::Normal, "<c-t>a", [&keymap_was_called]() {
keymap_was_called = true;
});
evaluator.evaluate(Qt::ControlModifier, Qt::Key_K);
QVERIFY(NOT keymap_was_called);
}
context("when the key sequence is not mapped");
it("does not call mapping") {
auto keymap_was_called = false;
KeymapEvaluator evaluator;
evaluator.add_keymap(KeyMode::Normal, "<c-t>a", [&keymap_was_called]() {
keymap_was_called = true;
});
evaluator.evaluate(Qt::ControlModifier, Qt::Key_T);
evaluator.evaluate(Qt::NoModifier, Qt::Key_B);
QVERIFY(NOT keymap_was_called);
}
context("when an incorrect sequence is entered before the correct one");
it("calls mapping") {
auto keymap_was_called = false;
KeymapEvaluator evaluator;
evaluator.add_keymap(KeyMode::Normal, "<c-t>a", [&keymap_was_called]() {
keymap_was_called = true;
});
evaluator.evaluate(Qt::ControlModifier, Qt::Key_T);
evaluator.evaluate(Qt::NoModifier, Qt::Key_B);
evaluator.evaluate(Qt::ControlModifier, Qt::Key_T);
evaluator.evaluate(Qt::NoModifier, Qt::Key_A);
QVERIFY(keymap_was_called);
}
// TODO: maybe fix this behavior
context(
"when partial mapped sequence is entered before an entire sequence");
it("does not call mapping") {
auto keymap_was_called = false;
KeymapEvaluator evaluator;
evaluator.add_keymap(KeyMode::Normal, "<c-t>a", [&keymap_was_called]() {
keymap_was_called = true;
});
evaluator.evaluate(Qt::ControlModifier, Qt::Key_T);
evaluator.evaluate(Qt::ControlModifier, Qt::Key_T);
evaluator.evaluate(Qt::NoModifier, Qt::Key_A);
QVERIFY(NOT keymap_was_called);
}
}
};
QTEST_REGISTER(KeymapEvaluatorSpec)
#include "KeymapEvaluatorSpec.moc"
// NOLINTEND
|