Directory: | ./ |
---|---|
File: | autotests/client/drag_and_drop.cpp |
Date: | 2024-01-22 17:25:27 |
Exec | Total | Coverage | |
---|---|---|---|
Lines: | 485 | 487 | 99.6% |
Branches: | 1093 | 2405 | 45.4% |
Line | Branch | Exec | Source |
---|---|---|---|
1 | /******************************************************************** | ||
2 | Copyright © 2016 Martin Gräßlin <mgraesslin@kde.org> | ||
3 | Copyright © 2020 Roman Gilg <subdiff@gmail.com> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Lesser General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2.1 of the License, or (at your option) version 3, or any | ||
9 | later version accepted by the membership of KDE e.V. (or its | ||
10 | successor approved by the membership of KDE e.V.), which shall | ||
11 | act as a proxy defined in Section 6 of version 3 of the license. | ||
12 | |||
13 | This library is distributed in the hope that it will be useful, | ||
14 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
16 | Lesser General Public License for more details. | ||
17 | |||
18 | You should have received a copy of the GNU Lesser General Public | ||
19 | License along with this library. If not, see <http://www.gnu.org/licenses/>. | ||
20 | *********************************************************************/ | ||
21 | #include <QtTest> | ||
22 | |||
23 | #include "../../src/client/compositor.h" | ||
24 | #include "../../src/client/connection_thread.h" | ||
25 | #include "../../src/client/datadevice.h" | ||
26 | #include "../../src/client/datadevicemanager.h" | ||
27 | #include "../../src/client/datasource.h" | ||
28 | #include "../../src/client/event_queue.h" | ||
29 | #include "../../src/client/pointer.h" | ||
30 | #include "../../src/client/registry.h" | ||
31 | #include "../../src/client/seat.h" | ||
32 | #include "../../src/client/shm_pool.h" | ||
33 | #include "../../src/client/surface.h" | ||
34 | #include "../../src/client/touch.h" | ||
35 | |||
36 | #include "../../server/compositor.h" | ||
37 | #include "../../server/data_device.h" | ||
38 | #include "../../server/data_device_manager.h" | ||
39 | #include "../../server/data_source.h" | ||
40 | #include "../../server/display.h" | ||
41 | #include "../../server/drag_pool.h" | ||
42 | #include "../../server/pointer_pool.h" | ||
43 | #include "../../server/seat.h" | ||
44 | #include "../../server/surface.h" | ||
45 | #include "../../server/touch_pool.h" | ||
46 | |||
47 | #include "../../tests/globals.h" | ||
48 | |||
49 | 2 | class TestDragAndDrop : public QObject | |
50 | { | ||
51 | Q_OBJECT | ||
52 | |||
53 | private Q_SLOTS: | ||
54 | void init(); | ||
55 | void cleanup(); | ||
56 | |||
57 | void test_pointer(); | ||
58 | void test_touch(); | ||
59 | void test_cancel_by_destroyed_data_source(); | ||
60 | void test_target_removed(); | ||
61 | void test_pointer_events_ignored(); | ||
62 | |||
63 | private: | ||
64 | struct Client; | ||
65 | Wrapland::Client::Surface* create_surface(Client& client); | ||
66 | Wrapland::Server::Surface* get_server_surface(); | ||
67 | |||
68 | 1 | struct { | |
69 | std::unique_ptr<Wrapland::Server::Display> display; | ||
70 | Wrapland::Server::globals globals; | ||
71 | 1 | Wrapland::Server::Seat* seat{nullptr}; | |
72 | } server; | ||
73 | |||
74 | 2 | struct Client { | |
75 | 2 | Wrapland::Client::ConnectionThread* connection = nullptr; | |
76 | 2 | QThread* thread = nullptr; | |
77 | 2 | Wrapland::Client::EventQueue* queue = nullptr; | |
78 | 2 | Wrapland::Client::Compositor* compositor = nullptr; | |
79 | 2 | Wrapland::Client::Registry* registry = nullptr; | |
80 | 2 | Wrapland::Client::DataDevice* device = nullptr; | |
81 | 2 | Wrapland::Server::data_device* server_device{nullptr}; | |
82 | 2 | Wrapland::Client::DataSource* source = nullptr; | |
83 | 2 | Wrapland::Client::Seat* seat = nullptr; | |
84 | 2 | Wrapland::Client::Pointer* pointer = nullptr; | |
85 | 2 | Wrapland::Client::Touch* touch = nullptr; | |
86 | 2 | Wrapland::Client::DataDeviceManager* ddm = nullptr; | |
87 | 2 | Wrapland::Client::ShmPool* shm = nullptr; | |
88 | } c_1, c_2; | ||
89 | 1 | Client* clients[2] = {&c_1, &c_2}; | |
90 | }; | ||
91 | |||
92 | constexpr auto socket_name{"wrapland-test-wayland-drag-n-drop-0"}; | ||
93 | |||
94 | 5 | void TestDragAndDrop::init() | |
95 | { | ||
96 | 5 | qRegisterMetaType<Wrapland::Server::data_device*>(); | |
97 | 5 | qRegisterMetaType<Wrapland::Server::Surface*>(); | |
98 | |||
99 | 5 | server.display = std::make_unique<Wrapland::Server::Display>(); | |
100 |
2/4✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
|
5 | server.display->set_socket_name(socket_name); |
101 | 5 | server.display->start(); | |
102 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
5 | QVERIFY(server.display->running()); |
103 | |||
104 | 10 | server.globals.compositor | |
105 | 10 | = std::make_unique<Wrapland::Server::Compositor>(server.display.get()); | |
106 | |||
107 |
2/4✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
|
10 | server.globals.seats.emplace_back( |
108 | 5 | std::make_unique<Wrapland::Server::Seat>(server.display.get())); | |
109 | 5 | server.seat = server.globals.seats.back().get(); | |
110 | 5 | server.seat->setHasPointer(true); | |
111 | 5 | server.seat->setHasTouch(true); | |
112 | |||
113 | 10 | server.globals.data_device_manager | |
114 | 10 | = std::make_unique<Wrapland::Server::data_device_manager>(server.display.get()); | |
115 | 5 | server.display->createShm(); | |
116 | |||
117 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 10 times.
|
15 | for (auto client : clients) { |
118 | // setup connection | ||
119 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
10 | client->connection = new Wrapland::Client::ConnectionThread; |
120 | 10 | QSignalSpy connected_spy(client->connection, | |
121 | &Wrapland::Client::ConnectionThread::establishedChanged); | ||
122 |
3/6✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
|
10 | QVERIFY(connected_spy.isValid()); |
123 |
2/4✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
|
10 | client->connection->setSocketName(socket_name); |
124 | |||
125 |
2/4✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
|
10 | client->thread = new QThread(this); |
126 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
10 | client->connection->moveToThread(client->thread); |
127 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
10 | client->thread->start(); |
128 | |||
129 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
10 | client->connection->establishConnection(); |
130 |
6/12✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 10 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 10 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 10 times.
|
10 | QVERIFY(connected_spy.count() || connected_spy.wait()); |
131 |
2/4✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
|
10 | QCOMPARE(connected_spy.count(), 1); |
132 | |||
133 |
2/4✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
|
10 | client->queue = new Wrapland::Client::EventQueue(this); |
134 |
3/6✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
|
10 | QVERIFY(!client->queue->isValid()); |
135 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
10 | client->queue->setup(client->connection); |
136 |
3/6✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
|
10 | QVERIFY(client->queue->isValid()); |
137 | |||
138 |
2/4✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
|
10 | client->registry = new Wrapland::Client::Registry(); |
139 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
10 | QSignalSpy interfaces_announced_spy(client->registry, |
140 | &Wrapland::Client::Registry::interfaceAnnounced); | ||
141 |
3/6✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
|
10 | QVERIFY(interfaces_announced_spy.isValid()); |
142 | |||
143 |
3/6✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
|
10 | QVERIFY(!client->registry->eventQueue()); |
144 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
10 | client->registry->setEventQueue(client->queue); |
145 |
3/6✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
|
10 | QCOMPARE(client->registry->eventQueue(), client->queue); |
146 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
10 | client->registry->create(client->connection); |
147 |
3/6✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
|
10 | QVERIFY(client->registry->isValid()); |
148 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
10 | client->registry->setup(); |
149 | |||
150 |
5/10✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 10 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 10 times.
|
10 | QVERIFY(interfaces_announced_spy.wait()); |
151 | #define CREATE(variable, factory, iface) \ | ||
152 | variable = client->registry->create##factory( \ | ||
153 | client->registry->interface(Wrapland::Client::Registry::Interface::iface).name, \ | ||
154 | client->registry->interface(Wrapland::Client::Registry::Interface::iface).version, \ | ||
155 | this); \ | ||
156 | QVERIFY(variable); | ||
157 | |||
158 |
5/10✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 10 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 10 times.
✗ Branch 9 not taken.
|
10 | CREATE(client->compositor, Compositor, Compositor) |
159 |
5/10✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 10 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 10 times.
✗ Branch 9 not taken.
|
10 | CREATE(client->seat, Seat, Seat) |
160 |
5/10✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 10 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 10 times.
✗ Branch 9 not taken.
|
10 | CREATE(client->ddm, DataDeviceManager, DataDeviceManager) |
161 |
5/10✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 10 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 10 times.
✗ Branch 9 not taken.
|
10 | CREATE(client->shm, ShmPool, Shm) |
162 | |||
163 | #undef CREATE | ||
164 | |||
165 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
10 | QSignalSpy pointerSpy(client->seat, &Wrapland::Client::Seat::hasPointerChanged); |
166 |
3/6✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
|
10 | QVERIFY(pointerSpy.isValid()); |
167 |
5/10✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 10 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 10 times.
|
10 | QVERIFY(pointerSpy.wait()); |
168 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
10 | client->pointer = client->seat->createPointer(client->seat); |
169 |
3/6✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
|
10 | QVERIFY(client->pointer->isValid()); |
170 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
10 | client->touch = client->seat->createTouch(client->seat); |
171 |
3/6✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
|
10 | QVERIFY(client->touch->isValid()); |
172 | |||
173 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
10 | QSignalSpy device_created_spy(server.globals.data_device_manager.get(), |
174 | &Wrapland::Server::data_device_manager::device_created); | ||
175 |
3/6✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
|
10 | QVERIFY(device_created_spy.isValid()); |
176 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
10 | client->device = client->ddm->getDevice(client->seat, this); |
177 |
3/6✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
|
10 | QVERIFY(client->device->isValid()); |
178 | |||
179 |
5/10✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 10 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 10 times.
|
10 | QVERIFY(device_created_spy.wait()); |
180 |
2/4✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
|
10 | QCOMPARE(device_created_spy.count(), 1); |
181 | 10 | client->server_device | |
182 |
3/6✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
|
10 | = device_created_spy.first().first().value<Wrapland::Server::data_device*>(); |
183 |
2/4✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
|
10 | QVERIFY(client->server_device); |
184 | |||
185 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
10 | client->source = client->ddm->createSource(this); |
186 |
3/6✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
|
10 | QVERIFY(client->source->isValid()); |
187 |
3/6✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
|
10 | client->source->offer(QStringLiteral("text/plain")); |
188 |
1/3✗ Branch 0 not taken.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
|
10 | } |
189 | 5 | } | |
190 | |||
191 | 5 | void TestDragAndDrop::cleanup() | |
192 | { | ||
193 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 5 times.
|
15 | for (auto client : clients) { |
194 | #define DELETE(name) \ | ||
195 | if (name) { \ | ||
196 | delete name; \ | ||
197 | name = nullptr; \ | ||
198 | } | ||
199 |
3/4✓ Branch 0 taken 1 times.
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 9 times.
|
10 | DELETE(client->source) |
200 |
3/4✓ Branch 0 taken 1 times.
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 9 times.
|
10 | DELETE(client->device) |
201 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
|
10 | DELETE(client->shm) |
202 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
|
10 | DELETE(client->compositor) |
203 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
|
10 | DELETE(client->ddm) |
204 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
|
10 | DELETE(client->seat) |
205 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
|
10 | DELETE(client->queue) |
206 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
|
10 | DELETE(client->registry) |
207 | #undef DELETE | ||
208 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
10 | if (client->thread) { |
209 | 10 | client->thread->quit(); | |
210 | 10 | client->thread->wait(); | |
211 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
10 | delete client->thread; |
212 | 10 | client->thread = nullptr; | |
213 | 10 | } | |
214 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
10 | delete client->connection; |
215 | 10 | client->connection = nullptr; | |
216 | } | ||
217 | |||
218 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
5 | server = {}; |
219 | 5 | } | |
220 | |||
221 | 6 | Wrapland::Client::Surface* TestDragAndDrop::create_surface(Client& client) | |
222 | { | ||
223 | 6 | auto surface = client.compositor->createSurface(); | |
224 | |||
225 | 6 | QImage img(QSize(100, 200), QImage::Format_RGB32); | |
226 |
1/2✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
|
6 | img.fill(Qt::red); |
227 |
2/4✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 6 times.
✗ Branch 3 not taken.
|
6 | surface->attachBuffer(client.shm->createBuffer(img)); |
228 |
1/2✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
|
6 | surface->damage(QRect(0, 0, 100, 200)); |
229 |
1/2✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
|
6 | surface->commit(Wrapland::Client::Surface::CommitFlag::None); |
230 | 6 | return surface; | |
231 | 6 | } | |
232 | |||
233 | 6 | Wrapland::Server::Surface* TestDragAndDrop::get_server_surface() | |
234 | { | ||
235 | 6 | QSignalSpy surface_created_spy(server.globals.compositor.get(), | |
236 | &Wrapland::Server::Compositor::surfaceCreated); | ||
237 |
2/4✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 6 times.
✗ Branch 3 not taken.
|
6 | if (!surface_created_spy.isValid()) { |
238 | ✗ | return nullptr; | |
239 | } | ||
240 |
2/4✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 6 times.
✗ Branch 3 not taken.
|
6 | if (!surface_created_spy.wait(500)) { |
241 | ✗ | return nullptr; | |
242 | } | ||
243 |
3/6✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 6 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
|
6 | return surface_created_spy.first().first().value<Wrapland::Server::Surface*>(); |
244 | 6 | } | |
245 | |||
246 | 1 | void TestDragAndDrop::test_pointer() | |
247 | { | ||
248 | // This test verifies the very basic drag and drop on one surface, an enter, a move and the | ||
249 | // drop. | ||
250 | |||
251 | // First create a window. | ||
252 | 1 | std::unique_ptr<Wrapland::Client::Surface> surface(create_surface(c_1)); | |
253 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | auto server_surface = get_server_surface(); |
254 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | QVERIFY(server_surface); |
255 | |||
256 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy source_selected_action_changed_spy( |
257 | 1 | c_1.source, &Wrapland::Client::DataSource::selectedDragAndDropActionChanged); | |
258 |
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_selected_action_changed_spy.isValid()); |
259 | |||
260 | // now we need to pass pointer focus to the Surface and simulate a button press | ||
261 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy button_press_spy(c_1.pointer, &Wrapland::Client::Pointer::buttonStateChanged); |
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 | QVERIFY(button_press_spy.isValid()); |
263 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | server.seat->pointers().set_focused_surface(server_surface); |
264 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | server.seat->setTimestamp(2); |
265 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | server.seat->pointers().button_pressed(1); |
266 |
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(button_press_spy.wait()); |
267 |
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(button_press_spy.first().at(1).value<quint32>(), quint32(2)); |
268 | |||
269 | // add some signal spies for client side | ||
270 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy drag_entered_spy(c_1.device, &Wrapland::Client::DataDevice::dragEntered); |
271 |
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(drag_entered_spy.isValid()); |
272 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy drag_motion_spy(c_1.device, &Wrapland::Client::DataDevice::dragMotion); |
273 |
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(drag_motion_spy.isValid()); |
274 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy pointer_motion_spy(c_1.pointer, &Wrapland::Client::Pointer::motion); |
275 |
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(pointer_motion_spy.isValid()); |
276 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy source_drop_spy(c_1.source, &Wrapland::Client::DataSource::dragAndDropPerformed); |
277 |
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_drop_spy.isValid()); |
278 | |||
279 | // now we can start the drag and drop | ||
280 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy drag_started_spy(server.seat, &Wrapland::Server::Seat::dragStarted); |
281 |
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(drag_started_spy.isValid()); |
282 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | c_1.source->setDragAndDropActions(Wrapland::Client::DataDeviceManager::DnDAction::Copy |
283 | 1 | | Wrapland::Client::DataDeviceManager::DnDAction::Move); | |
284 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
2 | c_1.device->startDrag( |
285 |
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 | button_press_spy.first().first().value<quint32>(), c_1.source, surface.get()); |
286 |
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(drag_started_spy.wait()); |
287 | |||
288 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | auto& server_drags = server.seat->drags(); |
289 |
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_drags.get_target().surface, server_surface); |
290 |
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(server_drags.get_target().transformation, QMatrix4x4()); |
291 |
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_drags.get_source().surfaces.icon); |
292 |
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(server_drags.get_source().serial, button_press_spy.first().first().value<quint32>()); |
293 |
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(drag_entered_spy.wait()); |
294 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | QCOMPARE(drag_entered_spy.count(), 1); |
295 |
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(drag_entered_spy.first().first().value<quint32>(), server.display->serial()); |
296 |
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(drag_entered_spy.first().last().toPointF(), QPointF(0, 0)); |
297 |
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(c_1.device->dragSurface().data(), surface.get()); |
298 | |||
299 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | auto offer = c_1.device->dragOffer(); |
300 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | QVERIFY(offer); |
301 |
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->selectedDragAndDropAction(), |
302 | Wrapland::Client::DataDeviceManager::DnDAction::None); | ||
303 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy offer_action_changed_spy( |
304 | 1 | offer, &Wrapland::Client::DataOffer::selectedDragAndDropActionChanged); | |
305 |
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(offer_action_changed_spy.isValid()); |
306 |
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(c_1.device->dragOffer()->offeredMimeTypes().count(), 1); |
307 |
8/16✓ 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.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 1 times.
|
1 | QCOMPARE(c_1.device->dragOffer()->offeredMimeTypes().first().name(), |
308 | QStringLiteral("text/plain")); | ||
309 |
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 not taken.
✓ Branch 73 taken 1 times.
|
1 | QTRY_COMPARE(offer->sourceDragAndDropActions(), |
310 | Wrapland::Client::DataDeviceManager::DnDAction::Copy | ||
311 | | Wrapland::Client::DataDeviceManager::DnDAction::Move); | ||
312 | |||
313 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | offer->setDragAndDropActions(Wrapland::Client::DataDeviceManager::DnDAction::Copy |
314 | 1 | | Wrapland::Client::DataDeviceManager::DnDAction::Move, | |
315 | Wrapland::Client::DataDeviceManager::DnDAction::Move); | ||
316 |
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(offer_action_changed_spy.wait()); |
317 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | QCOMPARE(offer_action_changed_spy.count(), 1); |
318 |
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->selectedDragAndDropAction(), |
319 | Wrapland::Client::DataDeviceManager::DnDAction::Move); | ||
320 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | QCOMPARE(source_selected_action_changed_spy.count(), 1); |
321 |
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(c_1.source->selectedDragAndDropAction(), |
322 | Wrapland::Client::DataDeviceManager::DnDAction::Move); | ||
323 | |||
324 | // Simulate motion. | ||
325 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | server.seat->setTimestamp(3); |
326 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | server.seat->pointers().set_position(QPointF(3, 3)); |
327 |
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(drag_motion_spy.wait()); |
328 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | QCOMPARE(drag_motion_spy.count(), 1); |
329 |
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(drag_motion_spy.first().first().toPointF(), QPointF(3, 3)); |
330 |
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(drag_motion_spy.first().last().toUInt(), 3u); |
331 | |||
332 | // Simulate drop. | ||
333 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy server_drag_ended_spy(server.seat, &Wrapland::Server::Seat::dragEnded); |
334 |
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_drag_ended_spy.isValid()); |
335 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy dropped_spy(c_1.device, &Wrapland::Client::DataDevice::dropped); |
336 |
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(dropped_spy.isValid()); |
337 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | server.seat->setTimestamp(4); |
338 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | server.seat->pointers().button_released(1); |
339 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | QVERIFY(source_drop_spy.isEmpty()); |
340 |
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(dropped_spy.wait()); |
341 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | QCOMPARE(source_drop_spy.count(), 1); |
342 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | QCOMPARE(server_drag_ended_spy.count(), 1); |
343 | |||
344 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy finished_spy(c_1.source, &Wrapland::Client::DataSource::dragAndDropFinished); |
345 |
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(finished_spy.isValid()); |
346 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | offer->dragAndDropFinished(); |
347 |
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(finished_spy.wait()); |
348 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | delete offer; |
349 | |||
350 | // Verify that we did not get any further input events. | ||
351 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | QVERIFY(pointer_motion_spy.isEmpty()); |
352 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | QCOMPARE(button_press_spy.count(), 1); |
353 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | } |
354 | |||
355 | 1 | void TestDragAndDrop::test_touch() | |
356 | { | ||
357 | // This test verifies the very basic drag and drop on one surface, an enter, a move and the | ||
358 | // drop. | ||
359 | |||
360 | // First create a window. | ||
361 | 1 | std::unique_ptr<Wrapland::Client::Surface> s(create_surface(c_1)); | |
362 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | s->setSize(QSize(100, 100)); |
363 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | auto server_surface = get_server_surface(); |
364 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | QVERIFY(server_surface); |
365 | |||
366 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy source_selected_action_changed_spy( |
367 | 1 | c_1.source, &Wrapland::Client::DataSource::selectedDragAndDropActionChanged); | |
368 |
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_selected_action_changed_spy.isValid()); |
369 | |||
370 | // now we need to pass touch focus to the Surface and simulate a touch down | ||
371 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy sequence_started_spy(c_1.touch, &Wrapland::Client::Touch::sequenceStarted); |
372 |
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(sequence_started_spy.isValid()); |
373 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy point_added_spy(c_1.touch, &Wrapland::Client::Touch::pointAdded); |
374 |
3/6✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | QVERIFY(point_added_spy.isValid()); |
375 | |||
376 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | auto& server_touches = server.seat->touches(); |
377 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | server_touches.set_focused_surface(server_surface); |
378 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | server.seat->setTimestamp(2); |
379 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | auto const touchId = server_touches.touch_down(QPointF(50, 50)); |
380 |
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(sequence_started_spy.wait()); |
381 | |||
382 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | auto tp{sequence_started_spy.first().at(0).value<Wrapland::Client::TouchPoint*>()}; |
383 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | QVERIFY(tp); |
384 |
3/6✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | QCOMPARE(tp->time(), quint32(2)); |
385 | |||
386 | // add some signal spies for client side | ||
387 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy drag_entered_spy(c_1.device, &Wrapland::Client::DataDevice::dragEntered); |
388 |
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(drag_entered_spy.isValid()); |
389 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy drag_motion_spy(c_1.device, &Wrapland::Client::DataDevice::dragMotion); |
390 |
3/6✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | QVERIFY(drag_motion_spy.isValid()); |
391 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy touch_motion_spy(c_1.touch, &Wrapland::Client::Touch::pointMoved); |
392 |
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(touch_motion_spy.isValid()); |
393 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy source_drop_spy(c_1.source, &Wrapland::Client::DataSource::dragAndDropPerformed); |
394 |
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_drop_spy.isValid()); |
395 | |||
396 | // now we can start the drag and drop | ||
397 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy drag_started_spy(server.seat, &Wrapland::Server::Seat::dragStarted); |
398 |
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(drag_started_spy.isValid()); |
399 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | c_1.source->setDragAndDropActions(Wrapland::Client::DataDeviceManager::DnDAction::Copy |
400 | 1 | | Wrapland::Client::DataDeviceManager::DnDAction::Move); | |
401 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | c_1.device->startDrag(tp->downSerial(), c_1.source, s.get()); |
402 |
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(drag_started_spy.wait()); |
403 | |||
404 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | auto& server_drags = server.seat->drags(); |
405 |
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_drags.get_target().surface, server_surface); |
406 |
4/8✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
|
1 | QCOMPARE(server_drags.get_target().transformation, QMatrix4x4()); |
407 |
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(!server_drags.get_source().surfaces.icon); |
408 |
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_drags.get_source().serial, tp->downSerial()); |
409 |
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(drag_entered_spy.wait()); |
410 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | QCOMPARE(drag_entered_spy.count(), 1); |
411 |
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(drag_entered_spy.first().first().value<quint32>(), server.display->serial()); |
412 |
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(drag_entered_spy.first().last().toPointF(), QPointF(0, 0)); |
413 |
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(c_1.device->dragSurface().data(), s.get()); |
414 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | auto offer = c_1.device->dragOffer(); |
415 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | QVERIFY(offer); |
416 |
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->selectedDragAndDropAction(), |
417 | Wrapland::Client::DataDeviceManager::DnDAction::None); | ||
418 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy offer_action_changed_spy( |
419 | 1 | offer, &Wrapland::Client::DataOffer::selectedDragAndDropActionChanged); | |
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(offer_action_changed_spy.isValid()); |
421 |
4/8✓ 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.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
|
1 | QCOMPARE(c_1.device->dragOffer()->offeredMimeTypes().count(), 1); |
422 |
8/16✓ 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.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 1 times.
|
1 | QCOMPARE(c_1.device->dragOffer()->offeredMimeTypes().first().name(), |
423 | QStringLiteral("text/plain")); | ||
424 |
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 not taken.
✓ Branch 73 taken 1 times.
|
1 | QTRY_COMPARE(offer->sourceDragAndDropActions(), |
425 | Wrapland::Client::DataDeviceManager::DnDAction::Copy | ||
426 | | Wrapland::Client::DataDeviceManager::DnDAction::Move); | ||
427 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | offer->setDragAndDropActions(Wrapland::Client::DataDeviceManager::DnDAction::Copy |
428 | 1 | | Wrapland::Client::DataDeviceManager::DnDAction::Move, | |
429 | Wrapland::Client::DataDeviceManager::DnDAction::Move); | ||
430 |
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(offer_action_changed_spy.wait()); |
431 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | QCOMPARE(offer_action_changed_spy.count(), 1); |
432 |
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->selectedDragAndDropAction(), |
433 | Wrapland::Client::DataDeviceManager::DnDAction::Move); | ||
434 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | QCOMPARE(source_selected_action_changed_spy.count(), 1); |
435 |
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(c_1.source->selectedDragAndDropAction(), |
436 | Wrapland::Client::DataDeviceManager::DnDAction::Move); | ||
437 | |||
438 | // simulate motion | ||
439 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | server.seat->setTimestamp(3); |
440 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | server_touches.touch_move(touchId, QPointF(75, 75)); |
441 |
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(drag_motion_spy.wait()); |
442 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | QCOMPARE(drag_motion_spy.count(), 1); |
443 |
5/10✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
|
1 | QCOMPARE(drag_motion_spy.first().first().toPointF(), QPointF(75, 75)); |
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 taken 1 times.
✗ Branch 9 not taken.
|
1 | QCOMPARE(drag_motion_spy.first().last().toUInt(), 3u); |
445 | |||
446 | // simulate drop | ||
447 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy server_drag_ended_spy(server.seat, &Wrapland::Server::Seat::dragEnded); |
448 |
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(server_drag_ended_spy.isValid()); |
449 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy dropped_spy(c_1.device, &Wrapland::Client::DataDevice::dropped); |
450 |
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(dropped_spy.isValid()); |
451 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | server.seat->setTimestamp(4); |
452 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | server_touches.touch_up(touchId); |
453 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | QVERIFY(source_drop_spy.isEmpty()); |
454 |
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(dropped_spy.wait()); |
455 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | QCOMPARE(source_drop_spy.count(), 1); |
456 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | QCOMPARE(server_drag_ended_spy.count(), 1); |
457 | |||
458 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy finished_spy(c_1.source, &Wrapland::Client::DataSource::dragAndDropFinished); |
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 | QVERIFY(finished_spy.isValid()); |
460 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | offer->dragAndDropFinished(); |
461 |
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(finished_spy.wait()); |
462 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | delete offer; |
463 | |||
464 | // verify that we did not get any further input events | ||
465 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | QVERIFY(touch_motion_spy.isEmpty()); |
466 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | QCOMPARE(point_added_spy.count(), 0); |
467 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | } |
468 | |||
469 | 1 | void TestDragAndDrop::test_cancel_by_destroyed_data_source() | |
470 | { | ||
471 | // This test simulates the problem from BUG 389221. | ||
472 | |||
473 | // First create a window. | ||
474 | 1 | std::unique_ptr<Wrapland::Client::Surface> s(create_surface(c_1)); | |
475 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | auto server_surface = get_server_surface(); |
476 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | QVERIFY(server_surface); |
477 | |||
478 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy source_selected_action_changed_spy( |
479 | 1 | c_1.source, &Wrapland::Client::DataSource::selectedDragAndDropActionChanged); | |
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 | QVERIFY(source_selected_action_changed_spy.isValid()); |
481 | |||
482 | // Now we need to pass pointer focus to the Surface and simulate a button press. | ||
483 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy button_press_spy(c_1.pointer, &Wrapland::Client::Pointer::buttonStateChanged); |
484 |
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(button_press_spy.isValid()); |
485 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | server.seat->pointers().set_focused_surface(server_surface); |
486 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | server.seat->setTimestamp(2); |
487 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | server.seat->pointers().button_pressed(1); |
488 |
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(button_press_spy.wait()); |
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(button_press_spy.first().at(1).value<quint32>(), quint32(2)); |
490 | |||
491 | // Add some signal spies for client side. | ||
492 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy drag_entered_spy(c_1.device, &Wrapland::Client::DataDevice::dragEntered); |
493 |
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(drag_entered_spy.isValid()); |
494 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy drag_motion_spy(c_1.device, &Wrapland::Client::DataDevice::dragMotion); |
495 |
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(drag_motion_spy.isValid()); |
496 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy pointer_motion_spy(c_1.pointer, &Wrapland::Client::Pointer::motion); |
497 |
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(pointer_motion_spy.isValid()); |
498 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy drag_left_spy(c_1.device, &Wrapland::Client::DataDevice::dragLeft); |
499 |
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(drag_left_spy.isValid()); |
500 | |||
501 | // Now we can start the drag and drop. | ||
502 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy drag_started_spy(server.seat, &Wrapland::Server::Seat::dragStarted); |
503 |
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(drag_started_spy.isValid()); |
504 | |||
505 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | c_1.source->setDragAndDropActions(Wrapland::Client::DataDeviceManager::DnDAction::Copy |
506 | 1 | | Wrapland::Client::DataDeviceManager::DnDAction::Move); | |
507 |
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 | c_1.device->startDrag(button_press_spy.first().first().value<quint32>(), c_1.source, s.get()); |
508 | |||
509 |
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(drag_started_spy.wait()); |
510 | |||
511 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | auto& server_drags = server.seat->drags(); |
512 |
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_drags.get_target().surface, server_surface); |
513 |
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(server_drags.get_target().transformation, QMatrix4x4()); |
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 | QVERIFY(!server_drags.get_source().surfaces.icon); |
515 |
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(server_drags.get_source().serial, button_press_spy.first().first().value<quint32>()); |
516 | |||
517 |
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(drag_entered_spy.wait()); |
518 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | QCOMPARE(drag_entered_spy.count(), 1); |
519 |
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(drag_entered_spy.first().first().value<quint32>(), server.display->serial()); |
520 |
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(drag_entered_spy.first().last().toPointF(), QPointF(0, 0)); |
521 |
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(c_1.device->dragSurface().data(), s.get()); |
522 | |||
523 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | auto offer = c_1.device->dragOffer(); |
524 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | QVERIFY(offer); |
525 |
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->selectedDragAndDropAction(), |
526 | Wrapland::Client::DataDeviceManager::DnDAction::None); | ||
527 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy offer_action_changed_spy( |
528 | 1 | offer, &Wrapland::Client::DataOffer::selectedDragAndDropActionChanged); | |
529 |
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(offer_action_changed_spy.isValid()); |
530 |
4/8✓ 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.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
|
1 | QCOMPARE(c_1.device->dragOffer()->offeredMimeTypes().count(), 1); |
531 |
8/16✓ 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.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 1 times.
|
1 | QCOMPARE(c_1.device->dragOffer()->offeredMimeTypes().first().name(), |
532 | QStringLiteral("text/plain")); | ||
533 |
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 not taken.
✓ Branch 73 taken 1 times.
|
1 | QTRY_COMPARE(offer->sourceDragAndDropActions(), |
534 | Wrapland::Client::DataDeviceManager::DnDAction::Copy | ||
535 | | Wrapland::Client::DataDeviceManager::DnDAction::Move); | ||
536 | |||
537 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | offer->setDragAndDropActions(Wrapland::Client::DataDeviceManager::DnDAction::Copy |
538 | 1 | | Wrapland::Client::DataDeviceManager::DnDAction::Move, | |
539 | Wrapland::Client::DataDeviceManager::DnDAction::Move); | ||
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 not taken.
✓ Branch 9 taken 1 times.
|
1 | QVERIFY(offer_action_changed_spy.wait()); |
541 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | QCOMPARE(offer_action_changed_spy.count(), 1); |
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(offer->selectedDragAndDropAction(), |
543 | Wrapland::Client::DataDeviceManager::DnDAction::Move); | ||
544 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | QCOMPARE(source_selected_action_changed_spy.count(), 1); |
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(c_1.source->selectedDragAndDropAction(), |
546 | Wrapland::Client::DataDeviceManager::DnDAction::Move); | ||
547 | |||
548 | // Simulate motion. | ||
549 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | server.seat->setTimestamp(3); |
550 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | server.seat->pointers().set_position(QPointF(3, 3)); |
551 |
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(drag_motion_spy.wait()); |
552 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | QCOMPARE(drag_motion_spy.count(), 1); |
553 |
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(drag_motion_spy.first().first().toPointF(), QPointF(3, 3)); |
554 |
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(drag_motion_spy.first().last().toUInt(), 3u); |
555 | |||
556 | // Now delete the DataSource. | ||
557 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | delete c_1.source; |
558 | 1 | c_1.source = nullptr; | |
559 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy server_drag_ended_spy(server.seat, &Wrapland::Server::Seat::dragEnded); |
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(server_drag_ended_spy.isValid()); |
561 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | QVERIFY(drag_left_spy.isEmpty()); |
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(drag_left_spy.wait()); |
563 |
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(drag_left_spy.count(), 1); |
564 |
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(server_drag_ended_spy.count(), 1); |
565 | |||
566 | // Simulate drop. | ||
567 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy dropped_spy(c_1.device, &Wrapland::Client::DataDevice::dropped); |
568 |
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(dropped_spy.isValid()); |
569 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | server.seat->setTimestamp(4); |
570 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | server.seat->pointers().button_released(1); |
571 |
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(!dropped_spy.wait(500)); |
572 | |||
573 | // Verify that we did not get any further input events. | ||
574 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | QVERIFY(pointer_motion_spy.isEmpty()); |
575 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | QCOMPARE(button_press_spy.count(), 2); |
576 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | } |
577 | |||
578 | 1 | void TestDragAndDrop::test_target_removed() | |
579 | { | ||
580 | // Checks that if target goes away mid-drag server handles this correctly. | ||
581 | |||
582 | 1 | std::unique_ptr<Wrapland::Client::Surface> surface_1(create_surface(c_1)); | |
583 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | auto server_surface_1 = get_server_surface(); |
584 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | QVERIFY(server_surface_1); |
585 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | std::unique_ptr<Wrapland::Client::Surface> surface_2(create_surface(c_2)); |
586 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | auto server_surface_2 = get_server_surface(); |
587 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | QVERIFY(server_surface_2); |
588 | |||
589 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy source_selected_action_changed_spy( |
590 | 1 | c_1.source, &Wrapland::Client::DataSource::selectedDragAndDropActionChanged); | |
591 |
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_selected_action_changed_spy.isValid()); |
592 | |||
593 | // Now we need to pass pointer focus to the Surface and simulate a button press. | ||
594 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy button_press_spy(c_1.pointer, &Wrapland::Client::Pointer::buttonStateChanged); |
595 |
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(button_press_spy.isValid()); |
596 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | server.seat->pointers().set_focused_surface(server_surface_1); |
597 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | server.seat->setTimestamp(2); |
598 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | server.seat->pointers().button_pressed(1); |
599 |
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(button_press_spy.wait()); |
600 |
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(button_press_spy.first().at(1).value<quint32>(), quint32(2)); |
601 | |||
602 | // Now we can start the drag and drop. | ||
603 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy drag_started_spy(server.seat, &Wrapland::Server::Seat::dragStarted); |
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(drag_started_spy.isValid()); |
605 | |||
606 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | c_1.source->setDragAndDropActions(Wrapland::Client::DataDeviceManager::DnDAction::Copy |
607 | 1 | | Wrapland::Client::DataDeviceManager::DnDAction::Move); | |
608 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
2 | c_1.device->startDrag( |
609 |
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 | button_press_spy.first().first().value<quint32>(), c_1.source, surface_1.get()); |
610 | |||
611 |
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(drag_started_spy.wait()); |
612 | |||
613 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | auto& server_drags = server.seat->drags(); |
614 |
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_drags.get_target().surface, server_surface_1); |
615 |
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(server_drags.get_target().transformation, QMatrix4x4()); |
616 |
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_drags.get_source().surfaces.icon); |
617 |
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(server_drags.get_source().serial, button_press_spy.first().first().value<quint32>()); |
618 | |||
619 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy drag_entered_spy(c_2.device, &Wrapland::Client::DataDevice::dragEntered); |
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 | QVERIFY(drag_entered_spy.isValid()); |
621 | |||
622 | // Now move drag to the second client. | ||
623 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | server_drags.set_target(server_surface_2); |
624 |
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_drags.get_target().surface, server_surface_2); |
625 | |||
626 |
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(drag_entered_spy.wait()); |
627 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | QCOMPARE(drag_entered_spy.count(), 1); |
628 |
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(drag_entered_spy.first().first().value<quint32>(), server.display->serial()); |
629 |
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(drag_entered_spy.first().last().toPointF(), QPointF(0, 0)); |
630 |
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(c_2.device->dragSurface().data(), surface_2.get()); |
631 | |||
632 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | auto offer = c_2.device->dragOffer(); |
633 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | QVERIFY(offer); |
634 |
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->selectedDragAndDropAction(), |
635 | Wrapland::Client::DataDeviceManager::DnDAction::None); | ||
636 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy offer_action_changed_spy( |
637 | 1 | offer, &Wrapland::Client::DataOffer::selectedDragAndDropActionChanged); | |
638 |
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(offer_action_changed_spy.isValid()); |
639 |
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(c_2.device->dragOffer()->offeredMimeTypes().count(), 1); |
640 |
8/16✓ 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.
|
1 | QCOMPARE(c_2.device->dragOffer()->offeredMimeTypes().first().name(), |
641 | QStringLiteral("text/plain")); | ||
642 |
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 not taken.
✓ Branch 73 taken 1 times.
|
1 | QTRY_COMPARE(offer->sourceDragAndDropActions(), |
643 | Wrapland::Client::DataDeviceManager::DnDAction::Copy | ||
644 | | Wrapland::Client::DataDeviceManager::DnDAction::Move); | ||
645 | |||
646 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | offer->setDragAndDropActions(Wrapland::Client::DataDeviceManager::DnDAction::Copy |
647 | 1 | | Wrapland::Client::DataDeviceManager::DnDAction::Move, | |
648 | Wrapland::Client::DataDeviceManager::DnDAction::Move); | ||
649 |
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(offer_action_changed_spy.wait()); |
650 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | QCOMPARE(offer_action_changed_spy.count(), 1); |
651 |
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->selectedDragAndDropAction(), |
652 | Wrapland::Client::DataDeviceManager::DnDAction::Move); | ||
653 |
3/12✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
|
1 | QVERIFY(source_selected_action_changed_spy.count() == 1 |
654 | || source_selected_action_changed_spy.wait()); | ||
655 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | QCOMPARE(source_selected_action_changed_spy.count(), 1); |
656 |
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(c_1.source->selectedDragAndDropAction(), |
657 | Wrapland::Client::DataDeviceManager::DnDAction::Move); | ||
658 | |||
659 | // Now delete the second client's data device. | ||
660 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy device_destroyed_spy(c_2.server_device, |
661 | &Wrapland::Server::data_device::resourceDestroyed); | ||
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 | QVERIFY(device_destroyed_spy.isValid()); |
663 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | delete c_2.device; |
664 | 1 | c_2.device = nullptr; | |
665 |
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(device_destroyed_spy.wait()); |
666 | |||
667 | // Simulate drop. | ||
668 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy dropped_spy(c_1.source, &Wrapland::Client::DataSource::dragAndDropPerformed); |
669 |
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(dropped_spy.isValid()); |
670 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | server.seat->setTimestamp(4); |
671 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | server.seat->pointers().button_released(1); |
672 |
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(dropped_spy.wait(500)); |
673 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | } |
674 | |||
675 | 1 | void TestDragAndDrop::test_pointer_events_ignored() | |
676 | { | ||
677 | // This test verifies that all pointer events are ignored on the focused Pointer device during | ||
678 | // drag. | ||
679 | |||
680 | // First create a window. | ||
681 | 1 | std::unique_ptr<Wrapland::Client::Surface> s(create_surface(c_1)); | |
682 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | auto server_surface = get_server_surface(); |
683 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | QVERIFY(server_surface); |
684 | |||
685 | // pass it pointer focus | ||
686 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | server.seat->pointers().set_focused_surface(server_surface); |
687 | |||
688 | // create signal spies for all the pointer events | ||
689 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy pointer_entered_spy(c_1.pointer, &Wrapland::Client::Pointer::entered); |
690 |
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(pointer_entered_spy.isValid()); |
691 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy pointer_left_spy(c_1.pointer, &Wrapland::Client::Pointer::left); |
692 |
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(pointer_left_spy.isValid()); |
693 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy pointer_motion_spy(c_1.pointer, &Wrapland::Client::Pointer::motion); |
694 |
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(pointer_motion_spy.isValid()); |
695 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy axis_spy(c_1.pointer, &Wrapland::Client::Pointer::axisChanged); |
696 |
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(axis_spy.isValid()); |
697 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy button_spy(c_1.pointer, &Wrapland::Client::Pointer::buttonStateChanged); |
698 |
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(button_spy.isValid()); |
699 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy drag_entered_spy(c_1.device, &Wrapland::Client::DataDevice::dragEntered); |
700 |
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(drag_entered_spy.isValid()); |
701 | |||
702 | // first simulate a few things | ||
703 | 1 | quint32 timestamp = 1; | |
704 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | server.seat->setTimestamp(timestamp++); |
705 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | server.seat->pointers().set_position(QPointF(10, 10)); |
706 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | server.seat->setTimestamp(timestamp++); |
707 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | server.seat->pointers().send_axis(Qt::Vertical, 5); |
708 | // verify that we have those | ||
709 |
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(axis_spy.wait()); |
710 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | QCOMPARE(axis_spy.count(), 1); |
711 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | QCOMPARE(pointer_motion_spy.count(), 1); |
712 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | QCOMPARE(pointer_entered_spy.count(), 1); |
713 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | QVERIFY(button_spy.isEmpty()); |
714 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | QVERIFY(pointer_left_spy.isEmpty()); |
715 | |||
716 | // let's start the drag | ||
717 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | server.seat->setTimestamp(timestamp++); |
718 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | server.seat->pointers().button_pressed(1); |
719 |
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(button_spy.wait()); |
720 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | QCOMPARE(button_spy.count(), 1); |
721 |
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 | c_1.device->startDrag(button_spy.first().first().value<quint32>(), c_1.source, s.get()); |
722 |
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(drag_entered_spy.wait()); |
723 | |||
724 | // now simulate all the possible pointer interactions | ||
725 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | server.seat->setTimestamp(timestamp++); |
726 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | server.seat->pointers().button_pressed(2); |
727 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | server.seat->setTimestamp(timestamp++); |
728 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | server.seat->pointers().button_released(2); |
729 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | server.seat->setTimestamp(timestamp++); |
730 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | server.seat->pointers().send_axis(Qt::Vertical, 5); |
731 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | server.seat->setTimestamp(timestamp++); |
732 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | server.seat->pointers().send_axis(Qt::Horizontal, 5); |
733 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | server.seat->setTimestamp(timestamp++); |
734 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | server.seat->pointers().set_focused_surface(nullptr); |
735 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | server.seat->setTimestamp(timestamp++); |
736 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | server.seat->pointers().set_focused_surface(server_surface); |
737 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | server.seat->setTimestamp(timestamp++); |
738 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | server.seat->pointers().set_position(QPointF(50, 50)); |
739 | |||
740 | // last but not least, simulate the drop | ||
741 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | QSignalSpy dropped_spy(c_1.device, &Wrapland::Client::DataDevice::dropped); |
742 |
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(dropped_spy.isValid()); |
743 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | server.seat->setTimestamp(timestamp++); |
744 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | server.seat->pointers().button_released(1); |
745 |
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(dropped_spy.wait()); |
746 | |||
747 | // all the changes should have been ignored | ||
748 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | QCOMPARE(axis_spy.count(), 1); |
749 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | QCOMPARE(pointer_motion_spy.count(), 1); |
750 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | QCOMPARE(pointer_entered_spy.count(), 1); |
751 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
|
1 | QCOMPARE(button_spy.count(), 1); |
752 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | QVERIFY(pointer_left_spy.isEmpty()); |
753 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | } |
754 | |||
755 |
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(TestDragAndDrop) |
756 | #include "drag_and_drop.moc" | ||
757 |