swift
testinput.cpp
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (C) 2013 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
7 
8 #include <QString>
9 #include <QTest>
10 
11 #include "test.h"
12 
13 #include "misc/identifier.h"
17 #include "misc/input/keyboardkey.h"
18 #include "misc/input/keycodes.h"
20 #include "misc/variant.h"
21 
22 using namespace swift::misc;
23 using namespace swift::misc::input;
24 
25 namespace MiscTest
26 {
28  class CTestInput : public QObject
29  {
30  Q_OBJECT
31 
32  private slots:
34  void keyboardKey();
35 
37  void hotkeyCombination();
38 
39  void hotKeyEqual();
40  void hotKeyNonEqual();
41  void hotkeyEqualFromVariant();
42  void hotkeyFindSupersetOf();
43  void hotkeyFindSubsetOf();
44  };
45 
46  void CTestInput::keyboardKey()
47  {
48  CKeyboardKey key;
49  QVERIFY2(key.getKey() == Key_Unknown, "Default constructed object should have unknown key");
50  QVERIFY2(key.getKeyAsString() == QString(), "Default constructed object should return empty string");
51  QVERIFY2(key.hasKey() == false, "Default constructed object should return false");
52 
53  key.setKey('C');
54  QVERIFY2(key.getKey() == Key_C, "CKeyboardKey::setKey(char key) failed");
55 
56  CKeyboardKey key2(Key_5);
57  QVERIFY2(key2.getKey() == Key_5, "Returned key is wrong");
58  QVERIFY2(key2.getKeyAsString() == "5", "Key as string failed");
59  QVERIFY2(key2.hasKey() == true, "Should return true for key != Key_Unknown");
60 
61  CKeyboardKey key3(Key_AltRight);
62  QVERIFY2(key3.isModifier(), "RightAlt is a modifier");
63  }
64 
65  void CTestInput::hotkeyCombination()
66  {
67  CHotkeyCombination comb;
68  comb.addKeyboardKey(Key_5);
69  comb.addKeyboardKey(Key_AltLeft);
70  comb.addKeyboardKey(Key_ControlLeft);
71  QVERIFY2(comb.size() == 3, "Size is incorrect");
72  QVERIFY2(comb.toQString() == "CtrlLeft+AltLeft+5", "String representation failed");
73 
74  comb.replaceKey(Key_AltLeft, Key_AltRight);
75  QVERIFY2(comb.size() == 3, "Size is incorrect");
76  QVERIFY2(comb.toQString() == "CtrlLeft+AltRight+5", "String representation failed");
77 
78  comb.replaceKey(Key_AltRight, CKeyboardKey());
79  QVERIFY2(comb.size() == 2, "Size is incorrect");
80  QVERIFY2(comb.toQString() == "CtrlLeft+5", "String representation failed");
81 
82  comb.removeKeyboardKey(Key_5);
83  QVERIFY2(comb.size() == 1, "Size is incorrect");
84  QVERIFY2(comb.toQString() == "CtrlLeft", "String representation failed");
85  }
86 
87  void CTestInput::hotKeyEqual()
88  {
89  CHotkeyCombination comb1;
90  comb1.addKeyboardKey(Key_ControlLeft);
91  comb1.addKeyboardKey(Key_D);
92  CActionHotkey actionHotkey1(CIdentifier::anonymous(), comb1, "action");
93 
94  CHotkeyCombination comb2;
95  comb2.addKeyboardKey(Key_ControlLeft);
96  comb2.addKeyboardKey(Key_D);
97  CActionHotkey actionHotkey2(CIdentifier::anonymous(), comb2, "action");
98  QVERIFY2(actionHotkey1 == actionHotkey2, "Objects should equal");
99  }
100 
101  void CTestInput::hotKeyNonEqual()
102  {
103  CHotkeyCombination comb;
104  comb.addKeyboardKey(Key_ControlLeft);
105  comb.addKeyboardKey(Key_D);
106  CActionHotkey actionHotkey1(CIdentifier::anonymous(), comb, "action");
107 
108  CHotkeyCombination comb2;
109  comb2.addKeyboardKey(Key_ControlLeft);
110  comb2.addKeyboardKey(Key_C);
111  CActionHotkey actionHotkey2(CIdentifier::anonymous(), comb2, "action");
112  QVERIFY2(actionHotkey1 != actionHotkey2, "Objects should not be equal");
113 
114  CHotkeyCombination comb3;
115  comb3.addKeyboardKey(Key_ShiftLeft);
116  comb3.addKeyboardKey(Key_D);
117  CActionHotkey actionHotkey3(CIdentifier::anonymous(), comb2, "action");
118  QVERIFY2(actionHotkey1 != actionHotkey3, "Objects should not be equal");
119 
120  CHotkeyCombination comb4;
121  comb4.addKeyboardKey(Key_ControlLeft);
122  comb4.addKeyboardKey(Key_D);
123  CActionHotkey actionHotkey4(CIdentifier::anonymous(), comb2, "other_action");
124  QVERIFY2(actionHotkey1 != actionHotkey4, "Objects should not be equal");
125  }
126 
127  void CTestInput::hotkeyEqualFromVariant()
128  {
129  CHotkeyCombination comb1;
130  comb1.addKeyboardKey(Key_ControlLeft);
131  comb1.addKeyboardKey(Key_C);
132  CActionHotkey actionHotkey1(CIdentifier::anonymous(), comb1, "action");
133  CActionHotkeyList list1;
134  list1.push_back(actionHotkey1);
135 
136  CHotkeyCombination comb2;
137  comb2.addKeyboardKey(Key_ControlLeft);
138  comb2.addKeyboardKey(Key_D);
139  CActionHotkey actionHotkey2(CIdentifier::anonymous(), comb2, "action");
140  CActionHotkeyList list2;
141  list2.push_back(actionHotkey2);
142  QVERIFY2(CVariant::fromValue(list1) != CVariant::fromValue(list2), "List should not be equal");
143  }
144 
145  void CTestInput::hotkeyFindSupersetOf()
146  {
147  CHotkeyCombination comb1;
148  comb1.addKeyboardKey(Key_ControlLeft);
149  comb1.addKeyboardKey(Key_D);
150  CActionHotkey actionHotkey1(CIdentifier::anonymous(), comb1, "action");
151 
152  CHotkeyCombination comb2;
153  comb2.addKeyboardKey(Key_ControlLeft);
154  CActionHotkey actionHotkey2(CIdentifier::anonymous(), comb2, "action");
155 
156  CHotkeyCombination comb3;
157  comb3.addKeyboardKey(Key_ShiftLeft);
158  comb3.addKeyboardKey(Key_D);
159  CActionHotkey actionHotkey3(CIdentifier::anonymous(), comb3, "action");
160 
161  CActionHotkeyList list1;
162  list1.push_back(actionHotkey1);
163 
164  QVERIFY2(!list1.findSupersetsOf(actionHotkey2).isEmpty(), "CTRL+F is a superset of CTRL");
165  QVERIFY2(list1.findSupersetsOf(actionHotkey3).isEmpty(), "Shift+F is not a superset of CTRL");
166  }
167 
168  void CTestInput::hotkeyFindSubsetOf()
169  {
170  CHotkeyCombination comb1;
171  comb1.addKeyboardKey(Key_ControlLeft);
172  CActionHotkey actionHotkey1(CIdentifier::anonymous(), comb1, "action");
173 
174  CHotkeyCombination comb2;
175  comb2.addKeyboardKey(Key_ControlLeft);
176  comb2.addKeyboardKey(Key_D);
177  CActionHotkey actionHotkey2(CIdentifier::anonymous(), comb2, "action");
178 
179  CHotkeyCombination comb3;
180  comb3.addKeyboardKey(Key_ShiftLeft);
181  comb3.addKeyboardKey(Key_D);
182  CActionHotkey actionHotkey3(CIdentifier::anonymous(), comb3, "action");
183 
184  CActionHotkeyList list1;
185  list1.push_back(actionHotkey1);
186 
187  QVERIFY2(!list1.findSubsetsOf(actionHotkey2).isEmpty(), "CTRL+F is a subset of CTRL");
188  QVERIFY2(list1.findSubsetsOf(actionHotkey3).isEmpty(), "Shift+F is not a subset of CTRL");
189  }
190 } // namespace MiscTest
191 
194 
195 #include "testinput.moc"
196 
Input classes basic tests.
Definition: testinput.cpp:29
static const CIdentifier & anonymous()
Returns an anonymous identifier, which is a valid identifier without name.
Definition: identifier.cpp:78
void push_back(const T &value)
Appends an element at the end of the sequence.
Definition: sequence.h:305
bool isEmpty() const
Synonym for empty.
Definition: sequence.h:285
static CVariant fromValue(T &&value)
Construct a variant from a value.
Definition: variant.h:139
Value object encapsulating a action hotkey.
Definition: actionhotkey.h:25
Value object encapsulating a list of hotkeys.
CActionHotkeyList findSupersetsOf(const CActionHotkey &other) const
Returns true if this list has a hotkey with a combination for which other is a superset of other Exam...
CActionHotkeyList findSubsetsOf(const CActionHotkey &other) const
Returns true if this list has a action hotkey with a combination which is a subset of other Example: ...
Value object representing hotkey sequence.
int size() const
Get size of sequence.
void replaceKey(CKeyboardKey oldKey, CKeyboardKey newKey)
Replace oldKey with newKey.
void removeKeyboardKey(CKeyboardKey key)
Remove keyboard key.
void addKeyboardKey(const CKeyboardKey &key)
Add keyboard key.
Value object representing a keyboard key.
Definition: keyboardkey.h:25
void setKey(KeyCode key)
Set key code.
Definition: keyboardkey.h:48
KeyCode getKey() const
Get key code.
Definition: keyboardkey.h:42
QString getKeyAsString() const
Get key code.
Definition: keyboardkey.cpp:25
bool hasKey() const
with key?
Definition: keyboardkey.h:63
QString toQString(bool i18n=false) const
Cast as QString.
Definition: mixinstring.h:76
Free functions in swift::misc.
SWIFTTEST_APPLESS_MAIN(MiscTest::CTestInput)
main