GCC Code Coverage Report


Directory: ./
File: autotests/client/fake_input.cpp
Date: 2024-01-22 17:25:27
Exec Total Coverage
Lines: 306 306 100.0%
Branches: 570 1138 50.1%

Line Branch Exec Source
1 /********************************************************************
2 Copyright 2016 Martin Gräßlin <mgraesslin@kde.org>
3
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) version 3, or any
8 later version accepted by the membership of KDE e.V. (or its
9 successor approved by the membership of KDE e.V.), which shall
10 act as a proxy defined in Section 6 of version 3 of the license.
11
12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Lesser General Public License for more details.
16
17 You should have received a copy of the GNU Lesser General Public
18 License along with this library. If not, see <http://www.gnu.org/licenses/>.
19 *********************************************************************/
20 #include <QtTest>
21
22 #include "../../src/client/connection_thread.h"
23 #include "../../src/client/event_queue.h"
24 #include "../../src/client/fakeinput.h"
25 #include "../../src/client/registry.h"
26
27 #include "../../server/display.h"
28 #include "../../server/fake_input.h"
29
30 #include "../../tests/globals.h"
31
32 #include <linux/input.h>
33
34 using namespace Wrapland::Client;
35 using namespace Wrapland::Server;
36 namespace Clt = Wrapland::Client;
37 namespace Srv = Wrapland::Server;
38
39
3/6
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 Q_DECLARE_METATYPE(Qt::MouseButton)
40
41 1 class FakeInputTest : public QObject
42 {
43 Q_OBJECT
44 private Q_SLOTS:
45 void init();
46 void cleanup();
47
48 void testAuthenticate();
49 void testMotion();
50 void testMotionAbsolute();
51 void testPointerButtonQt_data();
52 void testPointerButtonQt();
53 void testPointerButtonLinux_data();
54 void testPointerButtonLinux();
55 void testAxis_data();
56 void testAxis();
57 void testTouch();
58 void testKeyboardKeyLinux_data();
59 void testKeyboardKeyLinux();
60
61 private:
62 1 struct {
63 std::unique_ptr<Wrapland::Server::Display> display;
64 Wrapland::Server::globals globals;
65 1 Wrapland::Server::FakeInputDevice* device{nullptr};
66 } server;
67
68 1 ConnectionThread* m_connection = nullptr;
69 1 QThread* m_thread = nullptr;
70 1 EventQueue* m_queue = nullptr;
71 1 Clt::FakeInput* m_fakeInput = nullptr;
72 };
73
74 constexpr auto socket_name{"wrapland-test-fake-input-0"};
75
76 23 void FakeInputTest::init()
77 {
78 23 server.display = std::make_unique<Wrapland::Server::Display>();
79
2/4
✓ Branch 0 taken 23 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 23 times.
✗ Branch 3 not taken.
23 server.display->set_socket_name(std::string(socket_name));
80 23 server.display->start();
81
1/2
✓ Branch 0 taken 23 times.
✗ Branch 1 not taken.
23 QVERIFY(server.display->running());
82
83 23 server.display->createShm();
84 23 server.globals.fake_input = std::make_unique<Wrapland::Server::FakeInput>(server.display.get());
85
86 23 QSignalSpy deviceCreatedSpy(server.globals.fake_input.get(), &Srv::FakeInput::deviceCreated);
87
3/6
✓ Branch 0 taken 23 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 23 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 23 times.
✗ Branch 5 not taken.
23 QVERIFY(deviceCreatedSpy.isValid());
88
89 // setup connection
90
2/4
✓ Branch 0 taken 23 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 23 times.
✗ Branch 3 not taken.
23 m_connection = new Wrapland::Client::ConnectionThread;
91
1/2
✓ Branch 0 taken 23 times.
✗ Branch 1 not taken.
23 QSignalSpy connectedSpy(m_connection, &ConnectionThread::establishedChanged);
92
3/6
✓ Branch 0 taken 23 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 23 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 23 times.
✗ Branch 5 not taken.
23 QVERIFY(connectedSpy.isValid());
93
2/4
✓ Branch 0 taken 23 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 23 times.
✗ Branch 3 not taken.
23 m_connection->setSocketName(socket_name);
94
95
2/4
✓ Branch 0 taken 23 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 23 times.
✗ Branch 3 not taken.
23 m_thread = new QThread(this);
96
1/2
✓ Branch 0 taken 23 times.
✗ Branch 1 not taken.
23 m_connection->moveToThread(m_thread);
97
1/2
✓ Branch 0 taken 23 times.
✗ Branch 1 not taken.
23 m_thread->start();
98
99
1/2
✓ Branch 0 taken 23 times.
✗ Branch 1 not taken.
23 m_connection->establishConnection();
100
6/12
✓ Branch 0 taken 23 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 23 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 23 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 23 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 23 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 23 times.
23 QVERIFY(connectedSpy.count() || connectedSpy.wait());
101
2/4
✓ Branch 0 taken 23 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 23 times.
23 QCOMPARE(connectedSpy.count(), 1);
102
103
2/4
✓ Branch 0 taken 23 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 23 times.
✗ Branch 3 not taken.
23 m_queue = new EventQueue(this);
104
1/2
✓ Branch 0 taken 23 times.
✗ Branch 1 not taken.
23 m_queue->setup(m_connection);
105
106
1/2
✓ Branch 0 taken 23 times.
✗ Branch 1 not taken.
23 Registry registry;
107
1/2
✓ Branch 0 taken 23 times.
✗ Branch 1 not taken.
23 QSignalSpy interfacesAnnouncedSpy(&registry, &Registry::interfacesAnnounced);
108
3/6
✓ Branch 0 taken 23 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 23 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 23 times.
✗ Branch 5 not taken.
23 QVERIFY(interfacesAnnouncedSpy.isValid());
109
1/2
✓ Branch 0 taken 23 times.
✗ Branch 1 not taken.
23 registry.setEventQueue(m_queue);
110
1/2
✓ Branch 0 taken 23 times.
✗ Branch 1 not taken.
23 registry.create(m_connection);
111
3/6
✓ Branch 0 taken 23 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 23 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 23 times.
✗ Branch 5 not taken.
23 QVERIFY(registry.isValid());
112
1/2
✓ Branch 0 taken 23 times.
✗ Branch 1 not taken.
23 registry.setup();
113
5/10
✓ Branch 0 taken 23 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 23 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 23 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 23 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 23 times.
23 QVERIFY(interfacesAnnouncedSpy.wait());
114
115 23 m_fakeInput
116
2/4
✓ Branch 0 taken 23 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 23 times.
✗ Branch 3 not taken.
23 = registry.createFakeInput(registry.interface(Registry::Interface::FakeInput).name,
117
1/2
✓ Branch 0 taken 23 times.
✗ Branch 1 not taken.
23 registry.interface(Registry::Interface::FakeInput).version,
118 this);
119
3/6
✓ Branch 0 taken 23 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 23 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 23 times.
✗ Branch 5 not taken.
23 QVERIFY(m_fakeInput->isValid());
120
121
5/10
✓ Branch 0 taken 23 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 23 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 23 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 23 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 23 times.
23 QVERIFY(deviceCreatedSpy.wait());
122
3/6
✓ Branch 0 taken 23 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 23 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 23 times.
✗ Branch 5 not taken.
23 server.device = deviceCreatedSpy.first().first().value<FakeInputDevice*>();
123
2/4
✓ Branch 0 taken 23 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 23 times.
✗ Branch 3 not taken.
23 QVERIFY(server.device);
124
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 23 times.
23 }
125
126 23 void FakeInputTest::cleanup()
127 {
128 #define CLEANUP(variable) \
129 if (variable) { \
130 delete variable; \
131 variable = nullptr; \
132 }
133
3/4
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 22 times.
23 CLEANUP(m_fakeInput)
134
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 23 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 23 times.
23 CLEANUP(m_queue)
135
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 23 times.
23 if (m_connection) {
136 23 m_connection->deleteLater();
137 23 m_connection = nullptr;
138 23 }
139
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 23 times.
23 if (m_thread) {
140 23 m_thread->quit();
141 23 m_thread->wait();
142
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 23 times.
23 delete m_thread;
143 23 m_thread = nullptr;
144 23 }
145 #undef CLEANUP
146
147
1/2
✓ Branch 0 taken 23 times.
✗ Branch 1 not taken.
23 server = {};
148 23 }
149
150 1 void FakeInputTest::testAuthenticate()
151 {
152 // this test verifies that an authenticate request is passed to the Server
153
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QVERIFY(!server.device->isAuthenticated());
154 1 QSignalSpy authenticationRequestedSpy(server.device, &FakeInputDevice::authenticationRequested);
155
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(authenticationRequestedSpy.isValid());
156
157
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
1 m_fakeInput->authenticate(QStringLiteral("test-case"), QStringLiteral("to test"));
158
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(authenticationRequestedSpy.wait());
159
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(authenticationRequestedSpy.count(), 1);
160
6/12
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
1 QCOMPARE(authenticationRequestedSpy.first().at(0).toString(), QStringLiteral("test-case"));
161
6/12
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
1 QCOMPARE(authenticationRequestedSpy.first().at(1).toString(), QStringLiteral("to test"));
162
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server.device->setAuthentication(true);
163
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(server.device->isAuthenticated());
164
165
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy device_destroy_spy(server.globals.fake_input.get(),
166 &Wrapland::Server::FakeInput::device_destroyed);
167
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(device_destroy_spy.isValid());
168
169
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 delete m_fakeInput;
170 1 m_fakeInput = nullptr;
171
172
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QEXPECT_FAIL("", "Without the dtor in the protocol nothing is sent.", Continue);
173
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(device_destroy_spy.wait(500));
174 1 server.device = nullptr;
175
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
176
177 1 void FakeInputTest::testMotion()
178 {
179 // this test verifies that motion is properly passed to the server
180
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QVERIFY(!server.device->isAuthenticated());
181 1 QSignalSpy motionSpy(server.device, &FakeInputDevice::pointerMotionRequested);
182
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(motionSpy.isValid());
183
184 // without an authentication we shouldn't get the signals
185
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_fakeInput->requestPointerMove(QSizeF(1, 2));
186
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(!motionSpy.wait(100));
187
188 // now let's authenticate the interface
189
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server.device->setAuthentication(true);
190
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_fakeInput->requestPointerMove(QSizeF(1, 2));
191
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(motionSpy.wait());
192
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(motionSpy.count(), 1);
193
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QCOMPARE(motionSpy.last().first().toSizeF(), QSizeF(1, 2));
194
195 // just for the fun: once more
196
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_fakeInput->requestPointerMove(QSizeF(0, 0));
197
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(motionSpy.wait());
198
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(motionSpy.count(), 2);
199
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QCOMPARE(motionSpy.last().first().toSizeF(), QSizeF(0, 0));
200
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
201
202 1 void FakeInputTest::testMotionAbsolute()
203 {
204 // this test verifies that motion is properly passed to the server
205
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QVERIFY(!server.device->isAuthenticated());
206 1 QSignalSpy motionSpy(server.device, &FakeInputDevice::pointerMotionAbsoluteRequested);
207
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(motionSpy.isValid());
208
209 // without an authentication we shouldn't get the signals
210
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_fakeInput->requestPointerMoveAbsolute(QPointF(1, 2));
211
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(!motionSpy.wait(100));
212
213 // now let's authenticate the interface
214
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server.device->setAuthentication(true);
215
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_fakeInput->requestPointerMoveAbsolute(QPointF(1, 2));
216
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(motionSpy.wait());
217
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(motionSpy.count(), 1);
218
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QCOMPARE(motionSpy.last().first().toPointF(), QPointF(1, 2));
219
220 // just for the fun: once more
221
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_fakeInput->requestPointerMoveAbsolute(QPointF(0, 0));
222
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(motionSpy.wait());
223
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(motionSpy.count(), 2);
224
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QCOMPARE(motionSpy.last().first().toPointF(), QPointF(0, 0));
225
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
226
227 1 void FakeInputTest::testPointerButtonQt_data()
228 {
229 1 QTest::addColumn<Qt::MouseButton>("qtButton");
230 1 QTest::addColumn<quint32>("linuxButton");
231
232 1 QTest::newRow("left") << Qt::LeftButton << quint32(BTN_LEFT);
233 1 QTest::newRow("right") << Qt::RightButton << quint32(BTN_RIGHT);
234 1 QTest::newRow("middle") << Qt::MiddleButton << quint32(BTN_MIDDLE);
235 1 }
236
237 3 void FakeInputTest::testPointerButtonQt()
238 {
239 // this test verifies that pointer button events are properly passed to the server with Qt
240 // button codes
241
1/2
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
3 QVERIFY(!server.device->isAuthenticated());
242 3 QSignalSpy pressedSpy(server.device, &FakeInputDevice::pointerButtonPressRequested);
243
3/6
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
3 QVERIFY(pressedSpy.isValid());
244
1/2
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
3 QSignalSpy releasedSpy(server.device, &FakeInputDevice::pointerButtonReleaseRequested);
245
3/6
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
3 QVERIFY(releasedSpy.isValid());
246
247 // without an authentication we shouldn't get the signals
248
2/4
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
3 QFETCH(Qt::MouseButton, qtButton);
249
1/2
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
3 m_fakeInput->requestPointerButtonClick(qtButton);
250
3/6
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
3 QVERIFY(!pressedSpy.wait(100));
251
2/4
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
3 QVERIFY(pressedSpy.isEmpty());
252
2/4
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
3 QVERIFY(releasedSpy.isEmpty());
253
254 // now authenticate
255
1/2
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
3 server.device->setAuthentication(true);
256 // now our click should work
257
1/2
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
3 m_fakeInput->requestPointerButtonClick(qtButton);
258
5/10
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 3 times.
3 QVERIFY(releasedSpy.wait());
259
2/4
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 3 times.
3 QCOMPARE(pressedSpy.count(), 1);
260
2/4
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 3 times.
3 QCOMPARE(releasedSpy.count(), 1);
261
5/10
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 3 times.
3 QTEST(pressedSpy.last().first().value<quint32>(), "linuxButton");
262
5/10
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 3 times.
3 QTEST(releasedSpy.last().first().value<quint32>(), "linuxButton");
263
264 // and a press/release "manually"
265
1/2
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
3 m_fakeInput->requestPointerButtonPress(qtButton);
266
5/10
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 3 times.
3 QVERIFY(pressedSpy.wait());
267
2/4
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 3 times.
3 QCOMPARE(pressedSpy.count(), 2);
268
2/4
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 3 times.
3 QCOMPARE(releasedSpy.count(), 1);
269
5/10
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 3 times.
3 QTEST(pressedSpy.last().first().value<quint32>(), "linuxButton");
270 // and release
271
1/2
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
3 m_fakeInput->requestPointerButtonRelease(qtButton);
272
5/10
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 3 times.
3 QVERIFY(releasedSpy.wait());
273
2/4
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 3 times.
3 QCOMPARE(pressedSpy.count(), 2);
274
2/4
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 3 times.
3 QCOMPARE(releasedSpy.count(), 2);
275
5/10
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 3 times.
3 QTEST(releasedSpy.last().first().value<quint32>(), "linuxButton");
276
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 3 times.
3 }
277
278 1 void FakeInputTest::testPointerButtonLinux_data()
279 {
280 1 QTest::addColumn<quint32>("linuxButton");
281
282 1 QTest::newRow("left") << quint32(BTN_LEFT);
283 1 QTest::newRow("right") << quint32(BTN_RIGHT);
284 1 QTest::newRow("middle") << quint32(BTN_MIDDLE);
285 1 QTest::newRow("side") << quint32(BTN_SIDE);
286 1 QTest::newRow("extra") << quint32(BTN_EXTRA);
287 1 QTest::newRow("forward") << quint32(BTN_FORWARD);
288 1 QTest::newRow("back") << quint32(BTN_BACK);
289 1 QTest::newRow("task") << quint32(BTN_TASK);
290 1 }
291
292 8 void FakeInputTest::testPointerButtonLinux()
293 {
294 // this test verifies that pointer button events are properly passed to the server with Qt
295 // button codes
296
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
8 QVERIFY(!server.device->isAuthenticated());
297 8 QSignalSpy pressedSpy(server.device, &FakeInputDevice::pointerButtonPressRequested);
298
3/6
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
8 QVERIFY(pressedSpy.isValid());
299
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
8 QSignalSpy releasedSpy(server.device, &FakeInputDevice::pointerButtonReleaseRequested);
300
3/6
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
8 QVERIFY(releasedSpy.isValid());
301
302 // without an authentication we shouldn't get the signals
303
2/4
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
8 QFETCH(quint32, linuxButton);
304
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
8 m_fakeInput->requestPointerButtonClick(linuxButton);
305
3/6
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
8 QVERIFY(!pressedSpy.wait(100));
306
2/4
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
8 QVERIFY(pressedSpy.isEmpty());
307
2/4
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
8 QVERIFY(releasedSpy.isEmpty());
308
309 // now authenticate
310
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
8 server.device->setAuthentication(true);
311 // now our click should work
312
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
8 m_fakeInput->requestPointerButtonClick(linuxButton);
313
5/10
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 8 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 8 times.
8 QVERIFY(releasedSpy.wait());
314
2/4
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 8 times.
8 QCOMPARE(pressedSpy.count(), 1);
315
2/4
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 8 times.
8 QCOMPARE(releasedSpy.count(), 1);
316
5/10
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 8 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 8 times.
8 QTEST(pressedSpy.last().first().value<quint32>(), "linuxButton");
317
5/10
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 8 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 8 times.
8 QTEST(releasedSpy.last().first().value<quint32>(), "linuxButton");
318
319 // and a press/release "manually"
320
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
8 m_fakeInput->requestPointerButtonPress(linuxButton);
321
5/10
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 8 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 8 times.
8 QVERIFY(pressedSpy.wait());
322
2/4
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 8 times.
8 QCOMPARE(pressedSpy.count(), 2);
323
2/4
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 8 times.
8 QCOMPARE(releasedSpy.count(), 1);
324
5/10
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 8 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 8 times.
8 QTEST(pressedSpy.last().first().value<quint32>(), "linuxButton");
325 // and release
326
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
8 m_fakeInput->requestPointerButtonRelease(linuxButton);
327
5/10
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 8 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 8 times.
8 QVERIFY(releasedSpy.wait());
328
2/4
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 8 times.
8 QCOMPARE(pressedSpy.count(), 2);
329
2/4
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 8 times.
8 QCOMPARE(releasedSpy.count(), 2);
330
5/10
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 8 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 8 times.
8 QTEST(releasedSpy.last().first().value<quint32>(), "linuxButton");
331
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
8 }
332
333 1 void FakeInputTest::testAxis_data()
334 {
335 1 QTest::addColumn<Qt::Orientation>("orientation");
336 1 QTest::addColumn<qreal>("delta");
337
338 1 QTest::newRow("horizontal/1") << Qt::Horizontal << 1.0;
339 1 QTest::newRow("horizontal/-2") << Qt::Horizontal << -2.0;
340 1 QTest::newRow("vertical/10") << Qt::Vertical << 10.0;
341 1 QTest::newRow("vertical/-20") << Qt::Vertical << -22.0;
342 1 }
343
344 4 void FakeInputTest::testAxis()
345 {
346 // this test verifies that pointer axis events are properly passed to the server
347
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 QVERIFY(!server.device->isAuthenticated());
348 4 QSignalSpy axisSpy(server.device, &FakeInputDevice::pointerAxisRequested);
349
3/6
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
4 QVERIFY(axisSpy.isValid());
350
351
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 QFETCH(Qt::Orientation, orientation);
352
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 QFETCH(qreal, delta);
353 // without an authentication we shouldn't get the signals
354
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 m_fakeInput->requestPointerAxis(orientation, delta);
355
3/6
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
4 QVERIFY(!axisSpy.wait(100));
356
357 // now authenticate
358
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 server.device->setAuthentication(true);
359
360 // now we can properly test
361
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 m_fakeInput->requestPointerAxis(orientation, delta);
362
5/10
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 4 times.
4 QVERIFY(axisSpy.wait());
363
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 4 times.
4 QCOMPARE(axisSpy.count(), 1);
364
4/8
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 4 times.
4 QCOMPARE(axisSpy.first().at(0).value<Qt::Orientation>(), orientation);
365
4/8
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 4 times.
4 QCOMPARE(axisSpy.first().at(1).value<qreal>(), delta);
366
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
4 }
367
368 1 void FakeInputTest::testTouch()
369 {
370
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QVERIFY(!server.device->isAuthenticated());
371 1 QSignalSpy touchDownSpy(server.device, &FakeInputDevice::touchDownRequested);
372
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(touchDownSpy.isValid());
373
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy touchMotionSpy(server.device, &FakeInputDevice::touchMotionRequested);
374
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(touchMotionSpy.isValid());
375
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy touchUpSpy(server.device, &FakeInputDevice::touchUpRequested);
376
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(touchUpSpy.isValid());
377
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy touchFrameSpy(server.device, &FakeInputDevice::touchFrameRequested);
378
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(touchFrameSpy.isValid());
379
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy touchCancelSpy(server.device, &FakeInputDevice::touchCancelRequested);
380
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(touchCancelSpy.isValid());
381
382 // without an authentication we shouldn't get the signals
383
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_fakeInput->requestTouchDown(0, QPointF(1, 2));
384
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(!touchDownSpy.wait(100));
385
386
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_fakeInput->requestTouchMotion(0, QPointF(3, 4));
387
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(!touchMotionSpy.wait(100));
388
389
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_fakeInput->requestTouchUp(0);
390
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(!touchUpSpy.wait(100));
391
392
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_fakeInput->requestTouchDown(1, QPointF(5, 6));
393
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(!touchDownSpy.wait(100));
394
395
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_fakeInput->requestTouchFrame();
396
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(!touchFrameSpy.wait(100));
397
398
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_fakeInput->requestTouchCancel();
399
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(!touchCancelSpy.wait(100));
400
401 // now let's authenticate the interface
402
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server.device->setAuthentication(true);
403
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_fakeInput->requestTouchDown(0, QPointF(1, 2));
404
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(touchDownSpy.wait());
405
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(touchDownSpy.count(), 1);
406
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
1 QCOMPARE(touchDownSpy.last().at(0).value<quint32>(), quint32(0));
407
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1 QCOMPARE(touchDownSpy.last().at(1).toPointF(), QPointF(1, 2));
408
409 // Same id should not trigger another touchDown.
410
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_fakeInput->requestTouchDown(0, QPointF(5, 6));
411
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(!touchDownSpy.wait(100));
412
413
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_fakeInput->requestTouchMotion(0, QPointF(3, 4));
414
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(touchMotionSpy.wait());
415
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(touchMotionSpy.count(), 1);
416
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
1 QCOMPARE(touchMotionSpy.last().at(0).value<quint32>(), quint32(0));
417
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1 QCOMPARE(touchMotionSpy.last().at(1).toPointF(), QPointF(3, 4));
418
419 // touchMotion with bogus id should not trigger signal.
420
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_fakeInput->requestTouchMotion(1, QPointF(3, 4));
421
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(!touchMotionSpy.wait(100));
422
423
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_fakeInput->requestTouchUp(0);
424
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(touchUpSpy.wait());
425
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(touchUpSpy.count(), 1);
426
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
1 QCOMPARE(touchUpSpy.last().at(0).value<quint32>(), quint32(0));
427
428 // touchUp with bogus id should not trigger signal.
429
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_fakeInput->requestTouchUp(1);
430
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(!touchUpSpy.wait(100));
431
432
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_fakeInput->requestTouchDown(1, QPointF(5, 6));
433
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(touchDownSpy.wait());
434
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(touchDownSpy.count(), 2);
435
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
1 QCOMPARE(touchDownSpy.last().at(0).value<quint32>(), quint32(1));
436
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1 QCOMPARE(touchDownSpy.last().at(1).toPointF(), QPointF(5, 6));
437
438
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_fakeInput->requestTouchFrame();
439
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(touchFrameSpy.wait());
440
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(touchFrameSpy.count(), 1);
441
442
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_fakeInput->requestTouchCancel();
443
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(touchCancelSpy.wait());
444
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(touchCancelSpy.count(), 1);
445
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
446
447 1 void FakeInputTest::testKeyboardKeyLinux_data()
448 {
449 1 QTest::addColumn<quint32>("linuxKey");
450
451 1 QTest::newRow("A") << quint32(KEY_A);
452 1 QTest::newRow("S") << quint32(KEY_S);
453 1 QTest::newRow("D") << quint32(KEY_D);
454 1 QTest::newRow("F") << quint32(KEY_F);
455 1 }
456
457 4 void FakeInputTest::testKeyboardKeyLinux()
458 {
459 // this test verifies that keyboard key events are properly passed to the server with Qt button
460 // codes
461
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 QVERIFY(!server.device->isAuthenticated());
462 4 QSignalSpy pressedSpy(server.device, &FakeInputDevice::keyboardKeyPressRequested);
463
3/6
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
4 QVERIFY(pressedSpy.isValid());
464
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 QSignalSpy releasedSpy(server.device, &FakeInputDevice::keyboardKeyReleaseRequested);
465
3/6
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
4 QVERIFY(releasedSpy.isValid());
466
467 // without an authentication we shouldn't get the signals
468
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 QFETCH(quint32, linuxKey);
469
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 m_fakeInput->requestKeyboardKeyPress(linuxKey);
470
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 m_fakeInput->requestKeyboardKeyRelease(linuxKey);
471
3/6
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
4 QVERIFY(!pressedSpy.wait(100));
472
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 QVERIFY(pressedSpy.isEmpty());
473
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 QVERIFY(releasedSpy.isEmpty());
474
475 // now authenticate
476
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 server.device->setAuthentication(true);
477 // now our click should work
478
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 m_fakeInput->requestKeyboardKeyPress(linuxKey);
479
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 m_fakeInput->requestKeyboardKeyRelease(linuxKey);
480
5/10
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 4 times.
4 QVERIFY(releasedSpy.wait());
481
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 4 times.
4 QCOMPARE(pressedSpy.count(), 1);
482
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 4 times.
4 QCOMPARE(releasedSpy.count(), 1);
483
5/10
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 4 times.
4 QTEST(pressedSpy.last().first().value<quint32>(), "linuxKey");
484
5/10
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 4 times.
4 QTEST(releasedSpy.last().first().value<quint32>(), "linuxKey");
485
486 // and a press/release "manually"
487
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 m_fakeInput->requestKeyboardKeyPress(linuxKey);
488
5/10
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 4 times.
4 QVERIFY(pressedSpy.wait());
489
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 4 times.
4 QCOMPARE(pressedSpy.count(), 2);
490
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 4 times.
4 QCOMPARE(releasedSpy.count(), 1);
491
5/10
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 4 times.
4 QTEST(pressedSpy.last().first().value<quint32>(), "linuxKey");
492 // and release
493
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 m_fakeInput->requestKeyboardKeyRelease(linuxKey);
494
5/10
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 4 times.
4 QVERIFY(releasedSpy.wait());
495
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 4 times.
4 QCOMPARE(pressedSpy.count(), 2);
496
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 4 times.
4 QCOMPARE(releasedSpy.count(), 2);
497
5/10
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 4 times.
4 QTEST(releasedSpy.last().first().value<quint32>(), "linuxKey");
498
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
4 }
499
500
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
1 QTEST_GUILESS_MAIN(FakeInputTest)
501 #include "fake_input.moc"
502