GCC Code Coverage Report


Directory: ./
File: autotests/client/primary_selection.cpp
Date: 2024-01-22 17:25:27
Exec Total Coverage
Lines: 409 409 100.0%
Branches: 821 1750 46.9%

Line Branch Exec Source
1 /*
2 SPDX-FileCopyrightText: 2020 Adrien Faveraux <af@brain-networks.fr>
3 SPDX-FileCopyrightText: 2021 Francesco Sorrentino <francesco.sorr@gmail.com>
4
5 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only
6 */
7 #include "../../src/client/primary_selection.h"
8 #include "../../src/client/compositor.h"
9 #include "../../src/client/connection_thread.h"
10 #include "../../src/client/event_queue.h"
11 #include "../../src/client/keyboard.h"
12 #include "../../src/client/pointer.h"
13 #include "../../src/client/registry.h"
14 #include "../../src/client/seat.h"
15 #include "../../src/client/surface.h"
16
17 #include "../../server/compositor.h"
18 #include "../../server/display.h"
19 #include "../../server/primary_selection.h"
20 #include "../../server/seat.h"
21 #include "../../server/surface.h"
22
23 #include "../../tests/globals.h"
24
25 #include <QThread>
26 #include <QtTest>
27 #include <wayland-client.h>
28
29 1 class TestPrimarySelection : public QObject
30 {
31 Q_OBJECT
32 private Q_SLOTS:
33 void init();
34 void cleanup();
35
36 void testCreate();
37 void testSetSelection();
38 void testSendSelectionOnSeat();
39 void testReplaceSource();
40 void testOffer();
41 void testRequestSend();
42 void testCancel();
43 void testServerGet();
44
45 void testDestroy();
46
47 private:
48 1 struct {
49 std::unique_ptr<Wrapland::Server::Display> display;
50 Wrapland::Server::globals globals;
51 1 Wrapland::Server::Seat* seat{nullptr};
52 } server;
53
54 1 Wrapland::Client::ConnectionThread* m_connection = nullptr;
55 1 Wrapland::Client::PrimarySelectionDeviceManager* m_deviceManager = nullptr;
56 1 Wrapland::Client::Compositor* m_compositor = nullptr;
57 1 Wrapland::Client::Seat* m_seat = nullptr;
58 1 Wrapland::Client::EventQueue* m_queue = nullptr;
59 1 QThread* m_thread = nullptr;
60 };
61
62 constexpr auto socket_name{"wrapland-test-wayland-primaryselection-0"};
63
64 9 void TestPrimarySelection::init()
65 {
66 9 qRegisterMetaType<Wrapland::Server::primary_selection_device*>();
67 9 qRegisterMetaType<Wrapland::Server::primary_selection_source*>();
68 9 qRegisterMetaType<Wrapland::Server::Surface*>();
69 9 qRegisterMetaType<std::string>();
70
71 9 server.display = std::make_unique<Wrapland::Server::Display>();
72
2/4
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
9 server.display->set_socket_name(socket_name);
73 9 server.display->start();
74
1/2
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
9 QVERIFY(server.display->running());
75
76 // setup connection
77
1/2
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
9 m_connection = new Wrapland::Client::ConnectionThread;
78 9 QSignalSpy establishedSpy(m_connection,
79 &Wrapland::Client::ConnectionThread::establishedChanged);
80
2/4
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
9 m_connection->setSocketName(socket_name);
81
82
2/4
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
9 m_thread = new QThread(this);
83
1/2
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
9 m_connection->moveToThread(m_thread);
84
1/2
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
9 m_thread->start();
85
86
1/2
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
9 m_connection->establishConnection();
87
5/10
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 9 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 9 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 9 times.
9 QVERIFY(establishedSpy.wait());
88
89
2/4
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
9 m_queue = new Wrapland::Client::EventQueue(this);
90
3/6
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 9 times.
✗ Branch 5 not taken.
9 QVERIFY(!m_queue->isValid());
91
1/2
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
9 m_queue->setup(m_connection);
92
3/6
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 9 times.
✗ Branch 5 not taken.
9 QVERIFY(m_queue->isValid());
93
94
1/2
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
9 Wrapland::Client::Registry registry;
95
1/2
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
9 QSignalSpy deviceManagerSpy(&registry,
96
1/2
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
9 SIGNAL(primarySelectionDeviceManagerAnnounced(quint32, quint32)));
97
98
3/6
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 9 times.
✗ Branch 5 not taken.
9 QVERIFY(deviceManagerSpy.isValid());
99
2/4
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
9 QSignalSpy seatSpy(&registry, SIGNAL(seatAnnounced(quint32, quint32)));
100
3/6
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 9 times.
✗ Branch 5 not taken.
9 QVERIFY(seatSpy.isValid());
101
2/4
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
9 QSignalSpy compositorSpy(&registry, SIGNAL(compositorAnnounced(quint32, quint32)));
102
3/6
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 9 times.
✗ Branch 5 not taken.
9 QVERIFY(compositorSpy.isValid());
103
3/6
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 9 times.
✗ Branch 5 not taken.
9 QVERIFY(!registry.eventQueue());
104
1/2
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
9 registry.setEventQueue(m_queue);
105
3/6
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 9 times.
✗ Branch 5 not taken.
9 QCOMPARE(registry.eventQueue(), m_queue);
106
2/4
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
9 registry.create(m_connection->display());
107
3/6
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 9 times.
✗ Branch 5 not taken.
9 QVERIFY(registry.isValid());
108
1/2
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
9 registry.setup();
109
110 18 server.globals.primary_selection_device_manager
111
1/2
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
9 = std::make_unique<Wrapland::Server::primary_selection_device_manager>(
112 9 server.display.get());
113
114
5/10
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 9 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 9 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 9 times.
9 QVERIFY(deviceManagerSpy.wait());
115
1/2
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
9 m_deviceManager = registry.createPrimarySelectionDeviceManager(
116
3/6
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 9 times.
✗ Branch 5 not taken.
9 deviceManagerSpy.first().first().value<quint32>(),
117
3/6
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 9 times.
✗ Branch 5 not taken.
9 deviceManagerSpy.first().last().value<quint32>(),
118 this);
119
120
1/2
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
9 server.globals.seats.emplace_back(
121
1/2
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
9 std::make_unique<Wrapland::Server::Seat>(server.display.get()));
122 9 server.seat = server.globals.seats.back().get();
123
1/2
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
9 server.seat->setHasPointer(true);
124
125
5/10
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 9 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 9 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 9 times.
9 QVERIFY(seatSpy.wait());
126
1/2
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
9 m_seat = registry.createSeat(
127
6/12
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 9 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 9 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 9 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 9 times.
✗ Branch 11 not taken.
9 seatSpy.first().first().value<quint32>(), seatSpy.first().last().value<quint32>(), this);
128
3/6
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 9 times.
✗ Branch 5 not taken.
9 QVERIFY(m_seat->isValid());
129
2/4
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
9 QSignalSpy pointerChangedSpy(m_seat, SIGNAL(hasPointerChanged(bool)));
130
3/6
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 9 times.
✗ Branch 5 not taken.
9 QVERIFY(pointerChangedSpy.isValid());
131
5/10
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 9 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 9 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 9 times.
9 QVERIFY(pointerChangedSpy.wait());
132
133 18 server.globals.compositor
134
1/2
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
9 = std::make_unique<Wrapland::Server::Compositor>(server.display.get());
135
136
5/10
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 9 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 9 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 9 times.
9 QVERIFY(compositorSpy.wait());
137
4/8
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 9 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 9 times.
✗ Branch 7 not taken.
18 m_compositor = registry.createCompositor(compositorSpy.first().first().value<quint32>(),
138
3/6
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 9 times.
✗ Branch 5 not taken.
9 compositorSpy.first().last().value<quint32>(),
139 this);
140
3/6
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 9 times.
✗ Branch 5 not taken.
9 QVERIFY(m_compositor->isValid());
141
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9 times.
9 }
142
143 9 void TestPrimarySelection::cleanup()
144 {
145
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9 times.
9 if (m_deviceManager) {
146
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9 times.
9 delete m_deviceManager;
147 9 m_deviceManager = nullptr;
148 9 }
149
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9 times.
9 if (m_seat) {
150
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9 times.
9 delete m_seat;
151 9 m_seat = nullptr;
152 9 }
153
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9 times.
9 if (m_compositor) {
154
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9 times.
9 delete m_compositor;
155 9 m_compositor = nullptr;
156 9 }
157
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9 times.
9 if (m_queue) {
158
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9 times.
9 delete m_queue;
159 9 m_queue = nullptr;
160 9 }
161 9 m_connection->deleteLater();
162 9 m_thread->quit();
163 9 m_thread->wait();
164
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9 times.
9 delete m_thread;
165
166 9 m_thread = nullptr;
167 9 m_connection = nullptr;
168
169
1/2
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
9 server = {};
170 9 }
171
172 1 void TestPrimarySelection::testCreate()
173 {
174 1 QSignalSpy deviceCreatedSpy(
175 1 server.globals.primary_selection_device_manager.get(),
176 &Wrapland::Server::primary_selection_device_manager::device_created);
177
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(deviceCreatedSpy.isValid());
178
179 1 std::unique_ptr<Wrapland::Client::PrimarySelectionDevice> device(
180
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_deviceManager->getDevice(m_seat));
181
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->isValid());
182
183
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(deviceCreatedSpy.wait());
184
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(deviceCreatedSpy.count(), 1);
185
186 1 auto serverDevice
187
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 = deviceCreatedSpy.first().first().value<Wrapland::Server::primary_selection_device*>();
188
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(serverDevice);
189
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(serverDevice->seat(), server.seat);
190
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(!serverDevice->selection());
191
192
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.seat->primarySelection());
193
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 server.seat->setPrimarySelection(serverDevice->selection());
194
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(server.seat->primarySelection(), serverDevice->selection());
195
196 // and destroy
197
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy destroyedSpy(serverDevice, &QObject::destroyed);
198
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(destroyedSpy.isValid());
199 1 device.reset();
200
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(destroyedSpy.wait());
201
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.seat->primarySelection());
202
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
203
204 1 void TestPrimarySelection::testSetSelection()
205 {
206 1 std::unique_ptr<Wrapland::Client::Pointer> pointer(m_seat->createPointer());
207
208
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy deviceCreatedSpy(
209 1 server.globals.primary_selection_device_manager.get(),
210 &Wrapland::Server::primary_selection_device_manager::device_created);
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(deviceCreatedSpy.isValid());
212
213 1 std::unique_ptr<Wrapland::Client::PrimarySelectionDevice> device(
214
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_deviceManager->getDevice(m_seat));
215
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->isValid());
216
217
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(deviceCreatedSpy.wait());
218
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(deviceCreatedSpy.count(), 1);
219 1 auto serverDevice
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 = deviceCreatedSpy.first().first().value<Wrapland::Server::primary_selection_device*>();
221
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(serverDevice);
222
223
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy sourceCreatedSpy(
224 1 server.globals.primary_selection_device_manager.get(),
225 &Wrapland::Server::primary_selection_device_manager::source_created);
226
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(deviceCreatedSpy.isValid());
227
228 1 std::unique_ptr<Wrapland::Client::PrimarySelectionSource> source(
229
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_deviceManager->createSource());
230
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(source->isValid());
231
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 source->offer(QStringLiteral("text/plain"));
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(sourceCreatedSpy.wait());
234
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(sourceCreatedSpy.count(), 1);
235 1 auto serverSource
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 = sourceCreatedSpy.first().first().value<Wrapland::Server::primary_selection_source*>();
237
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(serverSource);
238
239 // everything setup, now we can test setting the selection
240
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy selectionChangedSpy(serverDevice,
241 &Wrapland::Server::primary_selection_device::selection_changed);
242
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(selectionChangedSpy.isValid());
243
244
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(!serverDevice->selection());
245
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 device->setSelection(1, source.get());
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(selectionChangedSpy.wait());
247
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(selectionChangedSpy.count(), 1);
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(serverDevice->selection(), serverSource);
249
250 // Send selection to device.
251
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy selectionOfferedSpy(device.get(),
252 &Wrapland::Client::PrimarySelectionDevice::selectionOffered);
253
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(selectionOfferedSpy.isValid());
254
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 serverDevice->send_selection(serverDevice->selection());
255
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(selectionOfferedSpy.wait());
256
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(selectionOfferedSpy.count(), 1);
257
258 1 auto offer
259
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 = selectionOfferedSpy.first().first().value<Wrapland::Client::PrimarySelectionOffer*>();
260
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(offer);
261
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(offer->offeredMimeTypes().count(), 1);
262
7/14
✓ 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 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
1 QCOMPARE(offer->offeredMimeTypes().first().name(), QStringLiteral("text/plain"));
263
264 // sending a new mimetype to the selection, should be announced in the offer
265
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QSignalSpy mimeTypeAddedSpy(offer, SIGNAL(mimeTypeOffered(QString)));
266
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(mimeTypeAddedSpy.isValid());
267
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 source->offer("text/html");
268
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(mimeTypeAddedSpy.wait());
269
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(mimeTypeAddedSpy.count(), 1);
270
7/14
✓ 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 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
1 QCOMPARE(mimeTypeAddedSpy.first().first().toString(), QStringLiteral("text/html"));
271
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(offer->offeredMimeTypes().count(), 2);
272
7/14
✓ 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 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
1 QCOMPARE(offer->offeredMimeTypes().first().name(), QStringLiteral("text/plain"));
273
7/14
✓ 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 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
1 QCOMPARE(offer->offeredMimeTypes().last().name(), QStringLiteral("text/html"));
274
275 // now clear the selection
276
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 device->setSelection(1, nullptr);
277
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(selectionChangedSpy.wait());
278
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(selectionChangedSpy.count(), 2);
279
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(!serverDevice->selection());
280
281 // set another selection
282
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 device->setSelection(2, source.get());
283
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(selectionChangedSpy.wait());
284 // now unbind the device
285
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy unboundSpy(serverDevice,
286 &Wrapland::Server::primary_selection_device::resourceDestroyed);
287
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(unboundSpy.isValid());
288 1 device.reset();
289
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(unboundSpy.wait());
290
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
291
292 1 void TestPrimarySelection::testSendSelectionOnSeat()
293 {
294 // This test verifies that the selection is sent when setting a focused keyboard.
295
296 // First add keyboard support to Seat.
297 1 QSignalSpy keyboardChangedSpy(m_seat, &Wrapland::Client::Seat::hasKeyboardChanged);
298
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(keyboardChangedSpy.isValid());
299
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server.seat->setHasKeyboard(true);
300
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(keyboardChangedSpy.wait());
301
302 // Now create device, Keyboard and a Surface.
303
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy deviceCreatedSpy(
304 1 server.globals.primary_selection_device_manager.get(),
305 &Wrapland::Server::primary_selection_device_manager::device_created);
306
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(deviceCreatedSpy.isValid());
307 1 std::unique_ptr<Wrapland::Client::PrimarySelectionDevice> device(
308
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_deviceManager->getDevice(m_seat));
309
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->isValid());
310
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(deviceCreatedSpy.wait());
311 1 auto serverDevice
312
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 = deviceCreatedSpy.first().first().value<Wrapland::Server::primary_selection_device*>();
313
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(serverDevice);
314
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Keyboard> keyboard(m_seat->createKeyboard());
315
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(keyboard->isValid());
316
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy surfaceCreatedSpy(server.globals.compositor.get(),
317 &Wrapland::Server::Compositor::surfaceCreated);
318
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(surfaceCreatedSpy.isValid());
319
320
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> surface(m_compositor->createSurface());
321
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(surface->isValid());
322
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(surfaceCreatedSpy.wait());
323
324
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 serverSurface = surfaceCreatedSpy.first().first().value<Wrapland::Server::Surface*>();
325
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(serverSurface);
326
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server.seat->setFocusedKeyboardSurface(serverSurface);
327
328 // Now set the selection.
329 1 std::unique_ptr<Wrapland::Client::PrimarySelectionSource> source(
330
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_deviceManager->createSource());
331
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(source->isValid());
332
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 source->offer(QStringLiteral("text/plain"));
333
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 device->setSelection(1, source.get());
334
335 // We should get a selection offered for that on the device.
336
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy selectionOfferedSpy(device.get(),
337 &Wrapland::Client::PrimarySelectionDevice::selectionOffered);
338
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(selectionOfferedSpy.isValid());
339
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(selectionOfferedSpy.wait());
340
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(selectionOfferedSpy.count(), 1);
341
342 // Now unfocus the keyboard.
343
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server.seat->setFocusedKeyboardSurface(nullptr);
344 // if setting the same surface again, we should get another offer
345
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server.seat->setFocusedKeyboardSurface(serverSurface);
346
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(selectionOfferedSpy.wait());
347
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(selectionOfferedSpy.count(), 2);
348
349 // Now let's try to destroy the device and set a focused keyboard just while the
350 // device is being destroyed.
351
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server.seat->setFocusedKeyboardSurface(nullptr);
352
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy unboundSpy(serverDevice,
353 &Wrapland::Server::primary_selection_device::resourceDestroyed);
354
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(unboundSpy.isValid());
355 1 device.reset();
356
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(unboundSpy.wait());
357
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server.seat->setFocusedKeyboardSurface(serverSurface);
358
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
359
360 1 void TestPrimarySelection::testReplaceSource()
361 {
362 // This test verifies that replacing a source cancels the previous source.
363
364 // First add keyboard support to Seat.
365 1 QSignalSpy keyboardChangedSpy(m_seat, &Wrapland::Client::Seat::hasKeyboardChanged);
366
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(keyboardChangedSpy.isValid());
367
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server.seat->setHasKeyboard(true);
368
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(keyboardChangedSpy.wait());
369 // now create device, Keyboard and a Surface
370
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy deviceCreatedSpy(
371 1 server.globals.primary_selection_device_manager.get(),
372 &Wrapland::Server::primary_selection_device_manager::device_created);
373
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(deviceCreatedSpy.isValid());
374
375 1 std::unique_ptr<Wrapland::Client::PrimarySelectionDevice> device(
376
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_deviceManager->getDevice(m_seat));
377
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->isValid());
378
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(deviceCreatedSpy.wait());
379 1 auto serverDevice
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 = deviceCreatedSpy.first().first().value<Wrapland::Server::primary_selection_device*>();
381
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(serverDevice);
382
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Keyboard> keyboard(m_seat->createKeyboard());
383
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(keyboard->isValid());
384
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy surfaceCreatedSpy(server.globals.compositor.get(),
385 &Wrapland::Server::Compositor::surfaceCreated);
386
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(surfaceCreatedSpy.isValid());
387
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> surface(m_compositor->createSurface());
388
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(surface->isValid());
389
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(surfaceCreatedSpy.wait());
390
391
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 serverSurface = surfaceCreatedSpy.first().first().value<Wrapland::Server::Surface*>();
392
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(serverSurface);
393
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server.seat->setFocusedKeyboardSurface(serverSurface);
394
395 // now set the selection
396 1 std::unique_ptr<Wrapland::Client::PrimarySelectionSource> source(
397
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_deviceManager->createSource());
398
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(source->isValid());
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 source->offer(QStringLiteral("text/plain"));
400
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 device->setSelection(1, source.get());
401
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy sourceCancelledSpy(source.get(),
402 &Wrapland::Client::PrimarySelectionSource::cancelled);
403
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(sourceCancelledSpy.isValid());
404 // we should get a selection offered for that on the device
405
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy selectionOfferedSpy(device.get(),
406 &Wrapland::Client::PrimarySelectionDevice::selectionOffered);
407
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(selectionOfferedSpy.isValid());
408
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(selectionOfferedSpy.wait());
409
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(selectionOfferedSpy.count(), 1);
410
411 // create a second source and replace previous one
412 1 std::unique_ptr<Wrapland::Client::PrimarySelectionSource> source2(
413
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_deviceManager->createSource());
414
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(source2->isValid());
415
416
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 source2->offer(QStringLiteral("text/plain"));
417
418
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy sourceCancelled2Spy(source2.get(),
419 &Wrapland::Client::PrimarySelectionSource::cancelled);
420
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(sourceCancelled2Spy.isValid());
421
422
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 device->setSelection(1, source2.get());
423
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(selectionOfferedSpy.count(), 1);
424
425
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(sourceCancelledSpy.wait());
426
12/58
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ 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 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
✗ Branch 53 not taken.
✓ Branch 54 taken 1 times.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✓ Branch 57 taken 1 times.
1 QTRY_COMPARE(selectionOfferedSpy.count(), 2);
427
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(sourceCancelled2Spy.isEmpty());
428
429 // replace the source with itself, ensure that it did not get cancelled
430
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 device->setSelection(1, source2.get());
431
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(!sourceCancelled2Spy.wait(500));
432
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(selectionOfferedSpy.count(), 2);
433
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(sourceCancelled2Spy.isEmpty());
434
435 // create a new device and replace previous one
436 1 std::unique_ptr<Wrapland::Client::PrimarySelectionDevice> device2(
437
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_deviceManager->getDevice(m_seat));
438
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(device2->isValid());
439 1 std::unique_ptr<Wrapland::Client::PrimarySelectionSource> source3(
440
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_deviceManager->createSource());
441
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(source3->isValid());
442
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 source3->offer(QStringLiteral("text/plain"));
443
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 device2->setSelection(1, source3.get());
444
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(sourceCancelled2Spy.wait());
445
446 // try to crash by first destroying source3 and setting a new source
447 1 std::unique_ptr<Wrapland::Client::PrimarySelectionSource> source4(
448
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_deviceManager->createSource());
449
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(source4->isValid());
450
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 source4->offer("text/plain");
451 1 source3.reset();
452
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 device2->setSelection(1, source4.get());
453
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(selectionOfferedSpy.wait());
454
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
455
456 1 void TestPrimarySelection::testOffer()
457 {
458 1 qRegisterMetaType<Wrapland::Server::primary_selection_source*>();
459 1 QSignalSpy sourceCreatedSpy(
460 1 server.globals.primary_selection_device_manager.get(),
461 &Wrapland::Server::primary_selection_device_manager::source_created);
462
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(sourceCreatedSpy.isValid());
463
464 1 std::unique_ptr<Wrapland::Client::PrimarySelectionSource> source(
465
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_deviceManager->createSource());
466
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(source->isValid());
467
468
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(sourceCreatedSpy.wait());
469
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(sourceCreatedSpy.count(), 1);
470
471 QPointer<Wrapland::Server::primary_selection_source> serverSource
472
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 = sourceCreatedSpy.first().first().value<Wrapland::Server::primary_selection_source*>();
473
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(!serverSource.isNull());
474
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(serverSource->mime_types().size(), 0);
475
476
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QSignalSpy offeredSpy(serverSource.data(),
477 &Wrapland::Server::primary_selection_source::mime_type_offered);
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 QVERIFY(offeredSpy.isValid());
479
480
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 const std::string plain = "text/plain";
481
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QMimeDatabase db;
482
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 source->offer(db.mimeTypeForName(QString::fromStdString(plain)));
483
484
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(offeredSpy.wait());
485
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(offeredSpy.count(), 1);
486
487
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(offeredSpy.last().first().value<std::string>(), plain);
488
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(serverSource->mime_types().size(), 1);
489
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(serverSource->mime_types().front(), plain);
490
491
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 const std::string html = "text/html";
492
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 source->offer(db.mimeTypeForName(QString::fromStdString(html)));
493
494
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(offeredSpy.wait());
495
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(offeredSpy.count(), 2);
496
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(offeredSpy.first().first().value<std::string>(), plain);
497
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(offeredSpy.last().first().value<std::string>(), html);
498
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(serverSource->mime_types().size(), 2);
499
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(serverSource->mime_types().front(), plain);
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 not taken.
✓ Branch 7 taken 1 times.
1 QCOMPARE(serverSource->mime_types().back(), html);
501
502 // try destroying the client side, should trigger a destroy of server side
503 1 source.reset();
504
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(!serverSource.isNull());
505
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 wl_display_flush(m_connection->display());
506 // After running the event loop the Wayland event should be delivered.
507
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QCoreApplication::processEvents();
508
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(serverSource.isNull());
509
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
510
511 1 void TestPrimarySelection::testRequestSend()
512 {
513 1 QSignalSpy sourceCreatedSpy(
514 1 server.globals.primary_selection_device_manager.get(),
515 &Wrapland::Server::primary_selection_device_manager::source_created);
516
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(sourceCreatedSpy.isValid());
517
518 1 std::unique_ptr<Wrapland::Client::PrimarySelectionSource> source(
519
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_deviceManager->createSource());
520
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(source->isValid());
521
522
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy sendRequestedSpy(source.get(),
523 &Wrapland::Client::PrimarySelectionSource::sendDataRequested);
524
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(sendRequestedSpy.isValid());
525
526
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 const std::string plain = "text/plain";
527
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(sourceCreatedSpy.wait());
528
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(sourceCreatedSpy.count(), 1);
529
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QTemporaryFile file;
530
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());
531
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 sourceCreatedSpy.first()
532
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 .first()
533
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 .value<Wrapland::Server::primary_selection_source*>()
534
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 ->request_data(plain, file.handle());
535
536
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(sendRequestedSpy.wait());
537
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(sendRequestedSpy.count(), 1);
538
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(sendRequestedSpy.first().first().toString().toUtf8().constData(), plain);
539
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 taken 1 times.
✗ Branch 11 not taken.
1 QCOMPARE(sendRequestedSpy.first().last().value<qint32>(), file.handle());
540
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 QVERIFY(sendRequestedSpy.first().last().value<qint32>() != -1);
541
542
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QFile writeFile;
543
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 taken 1 times.
✗ Branch 11 not taken.
1 QVERIFY(writeFile.open(sendRequestedSpy.first().last().value<qint32>(),
544 QFile::WriteOnly,
545 QFileDevice::AutoCloseHandle));
546
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 writeFile.close();
547
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
548
549 1 void TestPrimarySelection::testCancel()
550 {
551 1 QSignalSpy sourceCreatedSpy(
552 1 server.globals.primary_selection_device_manager.get(),
553 &Wrapland::Server::primary_selection_device_manager::source_created);
554
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(sourceCreatedSpy.isValid());
555
556 1 std::unique_ptr<Wrapland::Client::PrimarySelectionSource> source(
557
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_deviceManager->createSource());
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(source->isValid());
559
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy cancelledSpy(source.get(), &Wrapland::Client::PrimarySelectionSource::cancelled);
560
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(cancelledSpy.isValid());
561
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(sourceCreatedSpy.wait());
563
564
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(cancelledSpy.count(), 0);
565
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 sourceCreatedSpy.first().first().value<Wrapland::Server::primary_selection_source*>()->cancel();
566
567
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(cancelledSpy.wait());
568
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(cancelledSpy.count(), 1);
569
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
570
571 1 void TestPrimarySelection::testServerGet()
572 {
573 1 QSignalSpy sourceCreatedSpy(
574 1 server.globals.primary_selection_device_manager.get(),
575 &Wrapland::Server::primary_selection_device_manager::source_created);
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 QVERIFY(sourceCreatedSpy.isValid());
577
578 1 std::unique_ptr<Wrapland::Client::PrimarySelectionSource> source(
579
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_deviceManager->createSource());
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(source->isValid());
581
582
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(sourceCreatedSpy.wait());
583 1 auto sourceSpy
584
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 = sourceCreatedSpy.first().first().value<Wrapland::Server::primary_selection_source*>();
585
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(sourceSpy);
586
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
587
588 1 void TestPrimarySelection::testDestroy()
589 {
590 1 std::unique_ptr<Wrapland::Client::PrimarySelectionDevice> device(
591 1 m_deviceManager->getDevice(m_seat));
592
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->isValid());
593
594
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 connect(m_connection,
595 &Wrapland::Client::ConnectionThread::establishedChanged,
596 1 m_deviceManager,
597 1 &Wrapland::Client::PrimarySelectionDeviceManager::release);
598
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 connect(m_connection,
599 &Wrapland::Client::ConnectionThread::establishedChanged,
600 1 m_seat,
601 1 &Wrapland::Client::Seat::release);
602
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 connect(m_connection,
603 &Wrapland::Client::ConnectionThread::establishedChanged,
604 1 m_compositor,
605 1 &Wrapland::Client::Compositor::release);
606
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 connect(m_connection,
607 &Wrapland::Client::ConnectionThread::establishedChanged,
608 1 device.get(),
609 1 &Wrapland::Client::PrimarySelectionDevice::release);
610
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 connect(m_connection,
611 &Wrapland::Client::ConnectionThread::establishedChanged,
612 1 m_queue,
613 1 &Wrapland::Client::EventQueue::release);
614
615
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server = {};
616
18/74
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 1 times.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✗ Branch 63 not taken.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
✗ Branch 66 not taken.
✗ Branch 67 not taken.
✓ Branch 68 taken 1 times.
✗ Branch 69 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 72 taken 1 times.
✗ Branch 73 not taken.
1 QTRY_VERIFY(!m_connection->established());
617
618 // Now the device should be destroyed.
619
19/74
✓ 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 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 1 times.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✗ Branch 63 not taken.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
✗ Branch 66 not taken.
✗ Branch 67 not taken.
✓ Branch 68 taken 1 times.
✗ Branch 69 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 72 taken 1 times.
✗ Branch 73 not taken.
1 QTRY_VERIFY(!device->isValid());
620
621 // Calling destroy again should not fail.
622
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 device->release();
623
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
624
625
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(TestPrimarySelection)
626 #include "primary_selection.moc"
627