GCC Code Coverage Report


Directory: ./
File: autotests/client/input_method_v2.cpp
Date: 2024-01-22 17:25:27
Exec Total Coverage
Lines: 424 424 100.0%
Branches: 750 1500 50.0%

Line Branch Exec Source
1 /*
2 SPDX-FileCopyrightText: 2021 Roman Gilg <subdiff@gmail.com>
3
4 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only
5 */
6 #include <QtTest>
7
8 #include "../../src/client/compositor.h"
9 #include "../../src/client/connection_thread.h"
10 #include "../../src/client/event_queue.h"
11 #include "../../src/client/input_method_v2.h"
12 #include "../../src/client/registry.h"
13 #include "../../src/client/seat.h"
14 #include "../../src/client/surface.h"
15
16 #include "../../server/compositor.h"
17 #include "../../server/display.h"
18 #include "../../server/input_method_v2.h"
19 #include "../../server/seat.h"
20 #include "../../server/surface.h"
21
22 #include "../../tests/globals.h"
23
24 #include <linux/input.h>
25
26 1 class input_method_v2_test : public QObject
27 {
28 Q_OBJECT
29 private Q_SLOTS:
30 void init();
31 void cleanup();
32
33 void test_activate();
34 void test_surrounding_text();
35 void test_content_hints_data();
36 void test_content_hints();
37 void test_content_purpose_data();
38 void test_content_purpose();
39 void test_commit();
40 void test_popup_surface();
41 void test_keyboard_grab();
42
43 private:
44 Wrapland::Client::input_method_v2* get_input_method();
45
46 1 struct {
47 std::unique_ptr<Wrapland::Server::Display> display;
48 Wrapland::Server::globals globals;
49 1 Wrapland::Server::Seat* seat{nullptr};
50 } server;
51
52 1 struct client {
53 1 Wrapland::Client::ConnectionThread* connection{nullptr};
54 1 Wrapland::Client::EventQueue* queue{nullptr};
55 1 Wrapland::Client::Registry* registry{nullptr};
56 1 Wrapland::Client::Compositor* compositor{nullptr};
57 1 Wrapland::Client::Seat* seat{nullptr};
58 1 Wrapland::Client::text_input_manager_v3* text_input{nullptr};
59 1 Wrapland::Client::input_method_manager_v2* input_method{nullptr};
60 1 QThread* thread{nullptr};
61 } client1;
62 };
63
64 constexpr auto socket_name{"wrapland-test-input-method-v2-0"};
65
66 29 void input_method_v2_test::init()
67 {
68 29 qRegisterMetaType<Wrapland::Server::Surface*>();
69
70 29 server.display = std::make_unique<Wrapland::Server::Display>();
71
2/4
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 29 times.
✗ Branch 3 not taken.
29 server.display->set_socket_name(socket_name);
72 29 server.display->start();
73
1/2
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
29 QVERIFY(server.display->running());
74
75 29 server.display->createShm();
76
77
1/2
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
29 server.globals.seats.push_back(std::make_unique<Wrapland::Server::Seat>(server.display.get()));
78 29 server.seat = server.globals.seats.back().get();
79 29 server.seat->setHasKeyboard(true);
80
81 58 server.globals.compositor
82 58 = std::make_unique<Wrapland::Server::Compositor>(server.display.get());
83 58 server.globals.text_input_manager_v3
84 58 = std::make_unique<Wrapland::Server::text_input_manager_v3>(server.display.get());
85 58 server.globals.input_method_manager_v2
86 58 = std::make_unique<Wrapland::Server::input_method_manager_v2>(server.display.get());
87
88 // setup connection
89
1/2
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
29 client1.connection = new Wrapland::Client::ConnectionThread;
90 29 QSignalSpy connectedSpy(client1.connection,
91 &Wrapland::Client::ConnectionThread::establishedChanged);
92
3/6
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 29 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 29 times.
✗ Branch 5 not taken.
29 QVERIFY(connectedSpy.isValid());
93
2/4
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 29 times.
✗ Branch 3 not taken.
29 client1.connection->setSocketName(socket_name);
94
95
2/4
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 29 times.
✗ Branch 3 not taken.
29 client1.thread = new QThread(this);
96
1/2
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
29 client1.connection->moveToThread(client1.thread);
97
1/2
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
29 client1.thread->start();
98
99
1/2
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
29 client1.connection->establishConnection();
100
6/12
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 29 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 29 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 29 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 29 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 29 times.
29 QVERIFY(connectedSpy.count() || connectedSpy.wait());
101
2/4
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 29 times.
29 QCOMPARE(connectedSpy.count(), 1);
102
103
2/4
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 29 times.
✗ Branch 3 not taken.
29 client1.queue = new Wrapland::Client::EventQueue(this);
104
1/2
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
29 client1.queue->setup(client1.connection);
105
106
1/2
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
29 Wrapland::Client::Registry registry;
107
1/2
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
29 QSignalSpy interfacesAnnouncedSpy(&registry, &Wrapland::Client::Registry::interfacesAnnounced);
108
3/6
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 29 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 29 times.
✗ Branch 5 not taken.
29 QVERIFY(interfacesAnnouncedSpy.isValid());
109
1/2
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
29 registry.setEventQueue(client1.queue);
110
1/2
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
29 registry.create(client1.connection);
111
3/6
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 29 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 29 times.
✗ Branch 5 not taken.
29 QVERIFY(registry.isValid());
112
1/2
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
29 registry.setup();
113
5/10
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 29 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 29 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 29 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 29 times.
29 QVERIFY(interfacesAnnouncedSpy.wait());
114
115
1/2
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
29 client1.seat = registry.createSeat(
116
1/2
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
29 registry.interface(Wrapland::Client::Registry::Interface::Seat).name,
117
1/2
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
29 registry.interface(Wrapland::Client::Registry::Interface::Seat).version,
118 this);
119
3/6
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 29 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 29 times.
✗ Branch 5 not taken.
29 QVERIFY(client1.seat->isValid());
120
121
1/2
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
29 client1.compositor = registry.createCompositor(
122
1/2
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
29 registry.interface(Wrapland::Client::Registry::Interface::Compositor).name,
123
1/2
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
29 registry.interface(Wrapland::Client::Registry::Interface::Compositor).version,
124 this);
125
3/6
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 29 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 29 times.
✗ Branch 5 not taken.
29 QVERIFY(client1.compositor->isValid());
126
127
1/2
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
29 client1.text_input = registry.createTextInputManagerV3(
128
1/2
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
29 registry.interface(Wrapland::Client::Registry::Interface::TextInputManagerV3).name,
129
1/2
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
29 registry.interface(Wrapland::Client::Registry::Interface::TextInputManagerV3).version,
130 this);
131
3/6
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 29 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 29 times.
✗ Branch 5 not taken.
29 QVERIFY(client1.text_input->isValid());
132
133
1/2
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
29 client1.input_method = registry.createInputMethodManagerV2(
134
1/2
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
29 registry.interface(Wrapland::Client::Registry::Interface::InputMethodManagerV2).name,
135
1/2
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
29 registry.interface(Wrapland::Client::Registry::Interface::InputMethodManagerV2).version,
136 this);
137
3/6
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 29 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 29 times.
✗ Branch 5 not taken.
29 QVERIFY(client1.input_method->isValid());
138
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 29 times.
29 }
139
140 29 void input_method_v2_test::cleanup()
141 {
142 #define CLEANUP(variable) \
143 if (variable) { \
144 delete variable; \
145 variable = nullptr; \
146 }
147
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 29 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 29 times.
29 CLEANUP(client1.input_method)
148
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 29 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 29 times.
29 CLEANUP(client1.text_input)
149
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 29 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 29 times.
29 CLEANUP(client1.seat)
150
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 29 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 29 times.
29 CLEANUP(client1.compositor)
151
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 29 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 29 times.
29 CLEANUP(client1.queue)
152
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 29 times.
29 if (client1.connection) {
153 29 client1.connection->deleteLater();
154 29 client1.connection = nullptr;
155 29 }
156
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 29 times.
29 if (client1.thread) {
157 29 client1.thread->quit();
158 29 client1.thread->wait();
159
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 29 times.
29 delete client1.thread;
160 29 client1.thread = nullptr;
161 29 }
162 #undef CLEANUP
163
164
1/2
✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
29 server = {};
165 29 }
166
167 29 Wrapland::Client::input_method_v2* input_method_v2_test::get_input_method()
168 {
169 29 return client1.input_method->get_input_method(client1.seat);
170 }
171
172 1 void input_method_v2_test::test_activate()
173 {
174 // This test verifies that activation is done correctly.
175 1 QSignalSpy input_method_spy(server.seat, &Wrapland::Server::Seat::input_method_v2_changed);
176
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(input_method_spy.isValid());
177
178
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 auto input_method = std::unique_ptr<Wrapland::Client::input_method_v2>(get_input_method());
179
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(input_method);
180
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(input_method_spy.wait());
181
182
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 auto server_input_method = server.seat->get_input_method_v2();
183
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(server_input_method);
184
185
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy done_spy(input_method.get(), &Wrapland::Client::input_method_v2::done);
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(done_spy.isValid());
187
188 // Now activate.
189
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server_input_method->set_active(true);
190
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server_input_method->done();
191
192
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(done_spy.wait());
193
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(input_method->state().active, true);
194
195 // Now deactivate.
196
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server_input_method->set_active(false);
197
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server_input_method->done();
198
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 QVERIFY(done_spy.wait());
200
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(input_method->state().active, false);
201
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
202
203 1 void input_method_v2_test::test_surrounding_text()
204 {
205 // This test verifies that surrounding text is sent correctly.
206 1 QSignalSpy input_method_spy(server.seat, &Wrapland::Server::Seat::input_method_v2_changed);
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(input_method_spy.isValid());
208
209
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 auto input_method = std::unique_ptr<Wrapland::Client::input_method_v2>(get_input_method());
210
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(input_method);
211
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(input_method_spy.wait());
212
213
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 auto server_input_method = server.seat->get_input_method_v2();
214
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(server_input_method);
215
216
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy done_spy(input_method.get(), &Wrapland::Client::input_method_v2::done);
217
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(done_spy.isValid());
218
219
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(input_method->state().surrounding_text.data.empty());
220
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 QCOMPARE(input_method->state().surrounding_text.cursor_position, 0);
221
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 QCOMPARE(input_method->state().surrounding_text.selection_anchor, 0);
222
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(input_method->state().surrounding_text.change_cause,
223 Wrapland::Client::text_input_v3_change_cause::other);
224
225 // Now activate and send surrounding text.
226 1 auto const surrounding_text = "100 €, 100 $";
227
228
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server_input_method->set_active(true);
229
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server_input_method->set_surrounding_text(
230
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 surrounding_text, 5, 6, Wrapland::Server::text_input_v3_change_cause::input_method);
231
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server_input_method->done();
232
233
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(done_spy.wait());
234
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(input_method->state().active, true);
235
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 QCOMPARE(input_method->state().surrounding_text.data, surrounding_text);
236
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 QCOMPARE(input_method->state().surrounding_text.cursor_position, 5);
237
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 QCOMPARE(input_method->state().surrounding_text.selection_anchor, 6);
238
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(input_method->state().surrounding_text.change_cause,
239 Wrapland::Client::text_input_v3_change_cause::input_method);
240
241 // Now deactivate.
242
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server_input_method->set_active(false);
243
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server_input_method->done();
244
245 // Not active anymore but surrounding text data still available.
246
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(done_spy.wait());
247
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(input_method->state().active, false);
248
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 QCOMPARE(input_method->state().surrounding_text.data, surrounding_text);
249
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 QCOMPARE(input_method->state().surrounding_text.cursor_position, 5);
250
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 QCOMPARE(input_method->state().surrounding_text.selection_anchor, 6);
251
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(input_method->state().surrounding_text.change_cause,
252 Wrapland::Client::text_input_v3_change_cause::input_method);
253
254 // Activate again but do not set surrounding text.
255
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server_input_method->set_active(true);
256
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server_input_method->done();
257
258 // Active again and state reset now.
259
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(done_spy.wait());
260
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(input_method->state().surrounding_text.data.empty());
261
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 QCOMPARE(input_method->state().surrounding_text.cursor_position, 0);
262
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 QCOMPARE(input_method->state().surrounding_text.selection_anchor, 0);
263
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(input_method->state().surrounding_text.change_cause,
264 Wrapland::Client::text_input_v3_change_cause::other);
265
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
266
267 using server_hint = Wrapland::Server::text_input_v3_content_hint;
268 using server_hints = Wrapland::Server::text_input_v3_content_hints;
269 using client_hint = Wrapland::Client::text_input_v3_content_hint;
270 using client_hints = Wrapland::Client::text_input_v3_content_hints;
271
272 using server_purpose = Wrapland::Server::text_input_v3_content_purpose;
273 using client_purpose = Wrapland::Client::text_input_v3_content_purpose;
274
275 1 void input_method_v2_test::test_content_hints_data()
276 {
277 1 QTest::addColumn<client_hints>("clthints");
278 1 QTest::addColumn<server_hints>("srvhints");
279
280 1 QTest::newRow("completion") << client_hints(client_hint::completion)
281 1 << server_hints(server_hint::completion);
282 1 QTest::newRow("Correction") << client_hints(client_hint::spellcheck)
283 1 << server_hints(server_hint::spellcheck);
284 1 QTest::newRow("Capitalization") << client_hints(client_hint::auto_capitalization)
285 1 << server_hints(server_hint::auto_capitalization);
286 1 QTest::newRow("lowercase") << client_hints(client_hint::lowercase)
287 1 << server_hints(server_hint::lowercase);
288 1 QTest::newRow("uppercase") << client_hints(client_hint::uppercase)
289 1 << server_hints(server_hint::uppercase);
290 1 QTest::newRow("titlecase") << client_hints(client_hint::titlecase)
291 1 << server_hints(server_hint::titlecase);
292 1 QTest::newRow("hidden_text") << client_hints(client_hint::hidden_text)
293 1 << server_hints(server_hint::hidden_text);
294 1 QTest::newRow("sensitive_data")
295 1 << client_hints(client_hint::sensitive_data) << server_hints(server_hint::sensitive_data);
296 1 QTest::newRow("latin") << client_hints(client_hint::latin) << server_hints(server_hint::latin);
297 1 QTest::newRow("multiline") << client_hints(client_hint::multiline)
298 1 << server_hints(server_hint::multiline);
299
300 2 QTest::newRow("autos") << (client_hint::completion | client_hint::spellcheck
301 1 | client_hint::auto_capitalization)
302 2 << (server_hint::completion | server_hint::spellcheck
303 1 | server_hint::auto_capitalization);
304
305 // all has combinations which don't make sense - for example both lowercase and uppercase.
306 2 QTest::newRow("all") << (client_hint::completion | client_hint::spellcheck
307 1 | client_hint::auto_capitalization | client_hint::lowercase
308 1 | client_hint::uppercase | client_hint::titlecase
309 1 | client_hint::hidden_text | client_hint::sensitive_data
310 1 | client_hint::latin | client_hint::multiline)
311 2 << (server_hint::completion | server_hint::spellcheck
312 1 | server_hint::auto_capitalization | server_hint::lowercase
313 1 | server_hint::uppercase | server_hint::titlecase
314 1 | server_hint::hidden_text | server_hint::sensitive_data
315 1 | server_hint::latin | server_hint::multiline);
316 1 }
317
318 12 void input_method_v2_test::test_content_hints()
319 {
320 // This test verifies that content hints are sent correctly.
321 12 QSignalSpy input_method_spy(server.seat, &Wrapland::Server::Seat::input_method_v2_changed);
322
3/6
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
12 QVERIFY(input_method_spy.isValid());
323
324
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 auto input_method = std::unique_ptr<Wrapland::Client::input_method_v2>(get_input_method());
325
2/4
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
12 QVERIFY(input_method);
326
5/10
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 12 times.
12 QVERIFY(input_method_spy.wait());
327
328
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 auto server_input_method = server.seat->get_input_method_v2();
329
2/4
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
12 QVERIFY(server_input_method);
330
331
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 QSignalSpy done_spy(input_method.get(), &Wrapland::Client::input_method_v2::done);
332
3/6
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
12 QVERIFY(done_spy.isValid());
333
334
3/6
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
12 QCOMPARE(input_method->state().content.hints, client_hints());
335
336 // Now activate and send content hints.
337
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 server_input_method->set_active(true);
338
2/4
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
12 QFETCH(server_hints, srvhints);
339
2/4
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
12 QFETCH(client_hints, clthints);
340
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 server_input_method->set_content_type(srvhints, server_purpose::normal);
341
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 server_input_method->done();
342
343
5/10
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 12 times.
12 QVERIFY(done_spy.wait());
344
3/6
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
12 QCOMPARE(input_method->state().active, true);
345
3/6
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
12 QCOMPARE(input_method->state().content.hints, clthints);
346
347 // Now deactivate.
348
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 server_input_method->set_active(false);
349
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 server_input_method->done();
350
351 // Not active anymore but content hints data still available.
352
5/10
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 12 times.
12 QVERIFY(done_spy.wait());
353
3/6
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
12 QCOMPARE(input_method->state().active, false);
354
3/6
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
12 QCOMPARE(input_method->state().content.hints, clthints);
355
356 // Activate again but do not set content hints.
357
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 server_input_method->set_active(true);
358
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 server_input_method->done();
359
360 // Active again and state reset now.
361
5/10
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 12 times.
12 QVERIFY(done_spy.wait());
362
3/6
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
12 QCOMPARE(input_method->state().content.hints, client_hints());
363
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
12 }
364
365 1 void input_method_v2_test::test_content_purpose_data()
366 {
367 1 QTest::addColumn<client_purpose>("cltpurpose");
368 1 QTest::addColumn<server_purpose>("srvpurpose");
369
370 1 QTest::newRow("alpha") << client_purpose::alpha << server_purpose::alpha;
371 1 QTest::newRow("digits") << client_purpose::digits << server_purpose::digits;
372 1 QTest::newRow("number") << client_purpose::number << server_purpose::number;
373 1 QTest::newRow("phone") << client_purpose::phone << server_purpose::phone;
374 1 QTest::newRow("url") << client_purpose::url << server_purpose::url;
375 1 QTest::newRow("email") << client_purpose::email << server_purpose::email;
376 1 QTest::newRow("name") << client_purpose::name << server_purpose::name;
377 1 QTest::newRow("password") << client_purpose::password << server_purpose::password;
378 1 QTest::newRow("date") << client_purpose::date << server_purpose::date;
379 1 QTest::newRow("time") << client_purpose::time << server_purpose::time;
380 1 QTest::newRow("datetime") << client_purpose::datetime << server_purpose::datetime;
381 1 QTest::newRow("terminal") << client_purpose::terminal << server_purpose::terminal;
382 1 }
383
384 12 void input_method_v2_test::test_content_purpose()
385 {
386 // This test verifies that the content purpose is sent correctly.
387 12 QSignalSpy input_method_spy(server.seat, &Wrapland::Server::Seat::input_method_v2_changed);
388
3/6
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
12 QVERIFY(input_method_spy.isValid());
389
390
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 auto input_method = std::unique_ptr<Wrapland::Client::input_method_v2>(get_input_method());
391
2/4
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
12 QVERIFY(input_method);
392
5/10
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 12 times.
12 QVERIFY(input_method_spy.wait());
393
394
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 auto server_input_method = server.seat->get_input_method_v2();
395
2/4
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
12 QVERIFY(server_input_method);
396
397
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 QSignalSpy done_spy(input_method.get(), &Wrapland::Client::input_method_v2::done);
398
3/6
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
12 QVERIFY(done_spy.isValid());
399
400
3/6
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
12 QCOMPARE(input_method->state().content.purpose, client_purpose::normal);
401
402 // Now activate and send content hints.
403
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 server_input_method->set_active(true);
404
2/4
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
12 QFETCH(server_purpose, srvpurpose);
405
2/4
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
12 QFETCH(client_purpose, cltpurpose);
406
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 server_input_method->set_content_type(server_hints(), srvpurpose);
407
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 server_input_method->done();
408
409
5/10
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 12 times.
12 QVERIFY(done_spy.wait());
410
3/6
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
12 QCOMPARE(input_method->state().active, true);
411
3/6
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
12 QCOMPARE(input_method->state().content.purpose, cltpurpose);
412
413 // Now deactivate.
414
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 server_input_method->set_active(false);
415
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 server_input_method->done();
416
417 // Not active anymore but content hints data still available.
418
5/10
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 12 times.
12 QVERIFY(done_spy.wait());
419
3/6
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
12 QCOMPARE(input_method->state().active, false);
420
3/6
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
12 QCOMPARE(input_method->state().content.purpose, cltpurpose);
421
422 // Activate again but do not set content hints.
423
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 server_input_method->set_active(true);
424
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 server_input_method->done();
425
426 // Active again and state reset now.
427
5/10
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 12 times.
12 QVERIFY(done_spy.wait());
428
3/6
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
12 QCOMPARE(input_method->state().content.purpose, client_purpose::normal);
429
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
12 }
430
431 1 void input_method_v2_test::test_commit()
432 {
433 // This test verifies that commit string, preedit and delete surrounding text is sent correctly.
434 1 QSignalSpy input_method_spy(server.seat, &Wrapland::Server::Seat::input_method_v2_changed);
435
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(input_method_spy.isValid());
436
437
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 auto input_method = std::unique_ptr<Wrapland::Client::input_method_v2>(get_input_method());
438
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QVERIFY(input_method);
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(input_method_spy.wait());
440
441
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 auto server_input_method = server.seat->get_input_method_v2();
442
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QVERIFY(server_input_method);
443
444
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy done_spy(input_method.get(), &Wrapland::Client::input_method_v2::done);
445
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(done_spy.isValid());
446
447
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(input_method->state().content.purpose, client_purpose::normal);
448
449 // Now activate and send surrounding text to indicate support for it.
450
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server_input_method->set_active(true);
451
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server_input_method->set_surrounding_text(
452
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 "", 0, 0, Wrapland::Server::text_input_v3_change_cause::other);
453
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server_input_method->done();
454
455
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(done_spy.wait());
456
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(input_method->state().active, true);
457
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(input_method->state().surrounding_text.data.empty());
458
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 QCOMPARE(input_method->state().surrounding_text.cursor_position, 0);
459
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 QCOMPARE(input_method->state().surrounding_text.selection_anchor, 0);
460
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(input_method->state().surrounding_text.change_cause,
461 Wrapland::Client::text_input_v3_change_cause::other);
462
463
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy commit_spy(server_input_method, &Wrapland::Server::input_method_v2::state_committed);
464
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QVERIFY(commit_spy.isValid());
465
466 // Now send data.
467 1 auto commit_text = "commit string text";
468 1 auto preedit_text = "preedit string text";
469
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 input_method->commit_string(commit_text);
470
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 input_method->set_preedit_string(preedit_text, 1, 2);
471
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 input_method->commit();
472
473
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().preedit_string.update, false);
474
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 QCOMPARE(server_input_method->state().preedit_string.data, "");
475
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().preedit_string.cursor_begin, 0);
476
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().preedit_string.cursor_end, 0);
477
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().commit_string.update, false);
478
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 QCOMPARE(server_input_method->state().commit_string.data, "");
479
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().delete_surrounding_text.update, false);
480
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().delete_surrounding_text.before_length, 0);
481
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().delete_surrounding_text.after_length, 0);
482
483
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(commit_spy.wait());
484
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().preedit_string.update, true);
485
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().preedit_string.data, preedit_text);
486
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().preedit_string.cursor_begin, 1);
487
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().preedit_string.cursor_end, 2);
488
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().commit_string.update, true);
489
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().commit_string.data, commit_text);
490
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().delete_surrounding_text.update, false);
491
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().delete_surrounding_text.before_length, 0);
492
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().delete_surrounding_text.after_length, 0);
493
494 // Now deactivate.
495
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server_input_method->set_active(false);
496
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server_input_method->done();
497
498 // Not active anymore but data is still available.
499
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(done_spy.wait());
500
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().preedit_string.update, true);
501
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().preedit_string.data, preedit_text);
502
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().preedit_string.cursor_begin, 1);
503
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().preedit_string.cursor_end, 2);
504
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().commit_string.update, true);
505
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().commit_string.data, commit_text);
506
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().delete_surrounding_text.update, false);
507
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().delete_surrounding_text.before_length, 0);
508
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().delete_surrounding_text.after_length, 0);
509
510 // Activate again. Data is reset immediately.
511
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server_input_method->set_active(true);
512
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().preedit_string.update, false);
513
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().preedit_string.data, "");
514
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().preedit_string.cursor_begin, 0);
515
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().preedit_string.cursor_end, 0);
516
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().commit_string.update, false);
517
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().commit_string.data, "");
518
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().delete_surrounding_text.update, false);
519
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().delete_surrounding_text.before_length, 0);
520
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().delete_surrounding_text.after_length, 0);
521
522 // Set surrounding text for testing deletion of surrounding text.
523 1 auto const surrounding_text = "100 €, 100 $";
524
525
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server_input_method->set_active(true);
526
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server_input_method->set_surrounding_text(
527
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 surrounding_text, 5, 6, Wrapland::Server::text_input_v3_change_cause::input_method);
528
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server_input_method->done();
529
530
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(done_spy.wait());
531
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(input_method->state().active, true);
532
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(input_method->state().surrounding_text.data, surrounding_text);
533
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 QCOMPARE(input_method->state().surrounding_text.cursor_position, 5);
534
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(input_method->state().surrounding_text.selection_anchor, 6);
535
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(input_method->state().surrounding_text.change_cause,
536 Wrapland::Client::text_input_v3_change_cause::input_method);
537
538
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 input_method->delete_surrounding_text(1, 2);
539
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 input_method->commit();
540
541
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(commit_spy.wait());
542
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().preedit_string.update, false);
543
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 QCOMPARE(server_input_method->state().preedit_string.data, "");
544
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().preedit_string.cursor_begin, 0);
545
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().preedit_string.cursor_end, 0);
546
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().commit_string.update, false);
547
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 QCOMPARE(server_input_method->state().commit_string.data, "");
548
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().delete_surrounding_text.update, true);
549
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().delete_surrounding_text.before_length, 1);
550
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_input_method->state().delete_surrounding_text.after_length, 2);
551
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
552
553 1 void input_method_v2_test::test_popup_surface()
554 {
555 // This test verifies that the popup surface works as expected.
556 1 auto surface = std::unique_ptr<Wrapland::Client::Surface>(client1.compositor->createSurface());
557
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy input_method_spy(server.seat, &Wrapland::Server::Seat::input_method_v2_changed);
558
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(input_method_spy.isValid());
559
560
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 auto input_method = std::unique_ptr<Wrapland::Client::input_method_v2>(get_input_method());
561
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(input_method);
562
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(input_method_spy.wait());
563
564
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 auto server_input_method = server.seat->get_input_method_v2();
565
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(server_input_method);
566
567
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy popup_spy(server_input_method,
568 &Wrapland::Server::input_method_v2::popup_surface_created);
569
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(popup_spy.isValid());
570
571 1 auto popup = std::unique_ptr<Wrapland::Client::input_popup_surface_v2>(
572
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 input_method->get_input_popup_surface(surface.get()));
573
574
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(popup_spy.wait());
575 1 auto server_popup
576
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 = popup_spy.first().first().value<Wrapland::Server::input_method_popup_surface_v2*>();
577
578
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy rect_spy(popup.get(),
579 &Wrapland::Client::input_popup_surface_v2::text_input_rectangle_changed);
580
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(rect_spy.isValid());
581
582 1 auto rect = QRect(1, 2, 3, 4);
583
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server_popup->set_text_input_rectangle(rect);
584
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(rect_spy.wait());
585
586
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(popup->text_input_rectangle(), rect);
587
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
588
589 1 void input_method_v2_test::test_keyboard_grab()
590 {
591 // This test verifies that a keyboard grab works as expected.
592 1 auto surface = std::unique_ptr<Wrapland::Client::Surface>(client1.compositor->createSurface());
593
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy input_method_spy(server.seat, &Wrapland::Server::Seat::input_method_v2_changed);
594
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(input_method_spy.isValid());
595
596
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 auto input_method = std::unique_ptr<Wrapland::Client::input_method_v2>(get_input_method());
597
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(input_method);
598
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(input_method_spy.wait());
599
600
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 auto server_input_method = server.seat->get_input_method_v2();
601
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(server_input_method);
602
603
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy grab_spy(server_input_method, &Wrapland::Server::input_method_v2::keyboard_grabbed);
604
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(grab_spy.isValid());
605
606 1 auto grab = std::unique_ptr<Wrapland::Client::input_method_keyboard_grab_v2>(
607
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 input_method->grab_keyboard());
608
609
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(grab_spy.wait());
610 1 auto server_grab
611
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 = grab_spy.first().first().value<Wrapland::Server::input_method_keyboard_grab_v2*>();
612
613
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy keymap_spy(grab.get(),
614 &Wrapland::Client::input_method_keyboard_grab_v2::keymap_changed);
615
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(keymap_spy.isValid());
616
617
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 server_grab->set_keymap("foo");
618
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(keymap_spy.wait());
619
620
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 auto fd = keymap_spy.first().first().toInt();
621
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(fd != -1);
622
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 QCOMPARE(keymap_spy.first().last().value<quint32>(), 3u);
623
624
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QFile file;
625
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(file.open(fd, QIODevice::ReadOnly));
626
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 auto address = reinterpret_cast<char*>(file.map(0, keymap_spy.first().last().value<quint32>()));
627
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(address);
628
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 QCOMPARE(qstrcmp(address, "foo"), 0);
629
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 file.close();
630
631
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy key_spy(grab.get(), &Wrapland::Client::input_method_keyboard_grab_v2::key_changed);
632
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(key_spy.isValid());
633
634
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server_grab->key(1, KEY_K, Wrapland::Server::key_state::pressed);
635
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(key_spy.wait());
636
637
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(key_spy.first().at(0).value<uint32_t>(), KEY_K);
638
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(key_spy.first().at(1).value<Wrapland::Client::Keyboard::KeyState>(),
639 Wrapland::Client::Keyboard::KeyState::Pressed);
640
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(key_spy.first().at(2).value<uint32_t>(), 1);
641
642
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy modifiers_spy(grab.get(),
643 &Wrapland::Client::input_method_keyboard_grab_v2::modifiers_changed);
644
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(modifiers_spy.isValid());
645
646
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server_grab->update_modifiers(1, 2, 3, 4);
647
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(modifiers_spy.wait());
648
649
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(modifiers_spy.first().at(0).value<uint32_t>(), 1);
650
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(modifiers_spy.first().at(1).value<uint32_t>(), 2);
651
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(modifiers_spy.first().at(2).value<uint32_t>(), 3);
652
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(modifiers_spy.first().at(3).value<uint32_t>(), 4);
653
654
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy repeat_spy(grab.get(),
655 &Wrapland::Client::input_method_keyboard_grab_v2::repeat_changed);
656
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(repeat_spy.isValid());
657
658
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server_grab->set_repeat_info(1, 2);
659
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(repeat_spy.wait());
660
661
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 QCOMPARE(grab->repeat_rate(), 1);
662
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 QCOMPARE(grab->repeat_delay(), 2);
663
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
664
665
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(input_method_v2_test)
666 #include "input_method_v2.moc"
667