GCC Code Coverage Report


Directory: ./
File: autotests/client/layer_shell.cpp
Date: 2024-01-22 17:25:27
Exec Total Coverage
Lines: 314 314 100.0%
Branches: 551 1102 50.0%

Line Branch Exec Source
1 /*
2 SPDX-FileCopyrightText: 2021 Roman Gilg <subdiff@gmail.com>
3
4 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only
5 */
6 #include <QtTest>
7
8 #include "../../src/client/compositor.h"
9 #include "../../src/client/connection_thread.h"
10 #include "../../src/client/event_queue.h"
11 #include "../../src/client/layer_shell_v1.h"
12 #include "../../src/client/output.h"
13 #include "../../src/client/registry.h"
14 #include "../../src/client/shm_pool.h"
15 #include "../../src/client/surface.h"
16 #include "../../src/client/xdg_shell.h"
17
18 #include "../../server/buffer.h"
19 #include "../../server/client.h"
20 #include "../../server/compositor.h"
21 #include "../../server/display.h"
22 #include "../../server/layer_shell_v1.h"
23 #include "../../server/surface.h"
24 #include "../../server/xdg_shell.h"
25
26 #include "../../tests/globals.h"
27
28 namespace Clt = Wrapland::Client;
29 namespace Srv = Wrapland::Server;
30
31 1 class layer_shell_test : public QObject
32 {
33 Q_OBJECT
34 private Q_SLOTS:
35 void init();
36 void cleanup();
37
38 void test_create_layer_surface();
39 void test_data_transfer();
40
41 void test_exclusive_edge_data();
42 void test_exclusive_edge();
43
44 void test_margin();
45 void test_xdg_popup();
46 void test_output_removal();
47
48 private:
49 1 struct {
50 std::unique_ptr<Wrapland::Server::Display> display;
51 std::unique_ptr<Wrapland::Server::output> output;
52 Wrapland::Server::globals globals;
53 } server;
54
55 1 QThread* m_thread{nullptr};
56 1 Clt::ConnectionThread* connection{nullptr};
57 1 Clt::EventQueue* queue{nullptr};
58 1 Clt::ShmPool* shm{nullptr};
59 1 Clt::Compositor* compositor{nullptr};
60 1 Clt::LayerShellV1* layer_shell{nullptr};
61 1 Clt::XdgShell* xdg_shell{nullptr};
62 1 Clt::Output* output{nullptr};
63 };
64
65 constexpr auto socket_name{"wrapland-test-layer-shell-0"};
66
67 10 void layer_shell_test::init()
68 {
69 10 qRegisterMetaType<Srv::Surface*>();
70
71 10 server.display = std::make_unique<Wrapland::Server::Display>();
72
2/4
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
10 server.display->set_socket_name(std::string(socket_name));
73 10 server.display->start();
74
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
10 QVERIFY(server.display->running());
75
76 20 server.globals.output_manager
77 20 = std::make_unique<Wrapland::Server::output_manager>(*server.display);
78 10 server.display->createShm();
79 20 server.globals.compositor
80 20 = std::make_unique<Wrapland::Server::Compositor>(server.display.get());
81 20 server.globals.layer_shell_v1
82 20 = std::make_unique<Wrapland::Server::LayerShellV1>(server.display.get());
83 10 server.globals.xdg_shell = std::make_unique<Wrapland::Server::XdgShell>(server.display.get());
84
85 10 server.output = std::make_unique<Wrapland::Server::output>(*server.globals.output_manager);
86 10 server.output->add_mode({.size = QSize{1920, 1080}, .id = 0});
87 10 auto state = server.output->get_state();
88 10 state.enabled = true;
89 10 server.output->set_state(state);
90 10 server.output->done();
91
92 // setup connection
93
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
10 connection = new Clt::ConnectionThread;
94 10 QSignalSpy connectedSpy(connection, &Clt::ConnectionThread::establishedChanged);
95
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(connectedSpy.isValid());
96
2/4
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
10 connection->setSocketName(socket_name);
97
98
2/4
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
10 m_thread = new QThread(this);
99
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
10 connection->moveToThread(m_thread);
100
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
10 m_thread->start();
101
102
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
10 connection->establishConnection();
103
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(connectedSpy.count() || connectedSpy.wait());
104
2/4
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
10 QCOMPARE(connectedSpy.count(), 1);
105
106
2/4
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
10 queue = new Clt::EventQueue(this);
107
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
10 queue->setup(connection);
108
109
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
10 Clt::Registry registry;
110
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
10 QSignalSpy output_announced_spy(&registry, &Clt::Registry::outputAnnounced);
111
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(output_announced_spy.isValid());
112
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
10 QSignalSpy interfaces_announced_spy(&registry, &Clt::Registry::interfacesAnnounced);
113
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());
114
115
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
10 registry.setEventQueue(queue);
116
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
10 registry.create(connection);
117
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(registry.isValid());
118
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
10 registry.setup();
119
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());
120
121
2/4
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
10 shm = registry.createShmPool(registry.interface(Clt::Registry::Interface::Shm).name,
122
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
10 registry.interface(Clt::Registry::Interface::Shm).version,
123 this);
124
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(shm->isValid());
125
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
10 compositor = registry.createCompositor(
126
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
10 registry.interface(Clt::Registry::Interface::Compositor).name,
127
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
10 registry.interface(Clt::Registry::Interface::Compositor).version,
128 this);
129
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(compositor->isValid());
130
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
10 layer_shell = registry.createLayerShellV1(
131
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
10 registry.interface(Clt::Registry::Interface::LayerShellV1).name,
132
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
10 registry.interface(Clt::Registry::Interface::LayerShellV1).version,
133 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(layer_shell->isValid());
135 10 xdg_shell
136
2/4
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
10 = registry.createXdgShell(registry.interface(Clt::Registry::Interface::XdgShell).name,
137
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
10 registry.interface(Clt::Registry::Interface::XdgShell).version,
138 this);
139
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(xdg_shell->isValid());
140
4/8
✓ 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.
20 output = registry.createOutput(output_announced_spy.first().first().value<quint32>(),
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 output_announced_spy.first().last().value<quint32>(),
142 this);
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(output->isValid());
144
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
10 }
145
146 10 void layer_shell_test::cleanup()
147 {
148 #define CLEANUP(variable) \
149 if (variable) { \
150 delete variable; \
151 variable = nullptr; \
152 }
153
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
10 CLEANUP(shm)
154
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
10 CLEANUP(compositor)
155
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
10 CLEANUP(layer_shell)
156
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
10 CLEANUP(xdg_shell)
157
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
10 CLEANUP(output)
158
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
10 CLEANUP(queue)
159
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
10 if (connection) {
160 10 connection->deleteLater();
161 10 connection = nullptr;
162 10 }
163
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
10 if (m_thread) {
164 10 m_thread->quit();
165 10 m_thread->wait();
166
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
10 delete m_thread;
167 10 m_thread = nullptr;
168 10 }
169 #undef CLEANUP
170
171
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
10 server = {};
172 10 }
173
174 1 void layer_shell_test::test_create_layer_surface()
175 {
176 // This test verifies that a layer surface can be created and communicates.
177 1 QSignalSpy server_surface_spy(server.globals.compositor.get(),
178 &Srv::Compositor::surfaceCreated);
179
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_surface_spy.isValid());
180
181
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Clt::Surface> surface{compositor->createSurface()};
182
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(server_surface_spy.wait());
183
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 auto server_surface = server_surface_spy.first().first().value<Srv::Surface*>();
184
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(server_surface);
185
186
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy layer_surface_spy(server.globals.layer_shell_v1.get(),
187 &Srv::LayerShellV1::surface_created);
188
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(layer_surface_spy.isValid());
189
190
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Clt::LayerSurfaceV1> layer_surface{layer_shell->get_layer_surface(
191
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 surface.get(), nullptr, Clt::LayerShellV1::layer::background, "")};
192
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 layer_surface->set_size(QSize(1, 1));
193
194
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(layer_surface_spy.wait());
195
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 auto server_layer_surface = layer_surface_spy.first().first().value<Srv::LayerSurfaceV1*>();
196
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(server_layer_surface);
197
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_layer_surface->surface(), server_surface);
198
199
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy commit_spy(server_surface, &Srv::Surface::committed);
200
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(commit_spy.isValid());
201
202 // Now do a first commit according to protocol.
203
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 surface->commit(Clt::Surface::CommitFlag::None);
204
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(commit_spy.wait());
205
206
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy configure_spy(layer_surface.get(), &Clt::LayerSurfaceV1::configure_requested);
207
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(configure_spy.isValid());
208
209 // Server replies with configure event.
210 1 auto const size = QSize(100, 100);
211
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server_layer_surface->configure(size);
212
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(configure_spy.wait());
213
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(configure_spy.first().first().value<QSize>(), size);
214
215
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 auto const serial = configure_spy.first().last().value<quint32>();
216
217
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy ack_configure_spy(server_layer_surface,
218 &Srv::LayerSurfaceV1::configure_acknowledged);
219
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(ack_configure_spy.isValid());
220
221
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QImage img(size, QImage::Format_ARGB32_Premultiplied);
222
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 img.fill(Qt::black);
223
224
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 auto buf = shm->createBuffer(img);
225
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 surface->attachBuffer(buf);
226
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 surface->damage(QRect(QPoint(), size));
227
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 layer_surface->ack_configure(serial);
228
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 surface->commit(Clt::Surface::CommitFlag::None);
229
230
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(commit_spy.wait());
231
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(ack_configure_spy.size(), 1);
232
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(ack_configure_spy.first().first().value<quint32>(), serial);
233
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
234
235 1 void layer_shell_test::test_data_transfer()
236 {
237 // Tests that basic data is set and received.
238 1 QSignalSpy server_surface_spy(server.globals.compositor.get(),
239 &Srv::Compositor::surfaceCreated);
240
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_surface_spy.isValid());
241
242
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Clt::Surface> surface{compositor->createSurface()};
243
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(server_surface_spy.wait());
244
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 auto server_surface = server_surface_spy.first().first().value<Srv::Surface*>();
245
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(server_surface);
246
247
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy layer_surface_spy(server.globals.layer_shell_v1.get(),
248 &Srv::LayerShellV1::surface_created);
249
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(layer_surface_spy.isValid());
250
251
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Clt::LayerSurfaceV1> layer_surface{layer_shell->get_layer_surface(
252
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 surface.get(), output, Clt::LayerShellV1::layer::background, "")};
253
254
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(layer_surface_spy.wait());
255
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 auto server_layer_surface = layer_surface_spy.first().first().value<Srv::LayerSurfaceV1*>();
256
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(server_layer_surface);
257
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_layer_surface->surface(), server_surface);
258
259
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 layer_surface->set_anchor(Qt::LeftEdge);
260
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 layer_surface->set_exclusive_zone(10);
261
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 layer_surface->set_keyboard_interactivity(Clt::LayerShellV1::keyboard_interactivity::on_demand);
262
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 layer_surface->set_layer(Clt::LayerShellV1::layer::top);
263
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 layer_surface->set_margin(QMargins(1, 0, 0, 0));
264
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 layer_surface->set_size(QSize(100, 100));
265
266
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy commit_spy(server_surface, &Srv::Surface::committed);
267
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(commit_spy.isValid());
268
269
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 surface->commit(Clt::Surface::CommitFlag::None);
270
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(commit_spy.wait());
271
272
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_layer_surface->output(), server.output.get());
273
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_layer_surface->anchor(), Qt::LeftEdge);
274
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_layer_surface->exclusive_zone(), 10);
275
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_layer_surface->layer(), Srv::LayerSurfaceV1::Layer::Top);
276
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_layer_surface->margins(), QMargins(1, 0, 0, 0));
277
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_layer_surface->size(), QSize(100, 100));
278
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
279
280 1 void layer_shell_test::test_exclusive_edge_data()
281 {
282 1 QTest::addColumn<Qt::Edges>("anchor");
283 1 QTest::addColumn<Qt::Edge>("excl_anchor");
284 1 QTest::addColumn<int>("zone");
285
286 1 QTest::newRow("single") << Qt::Edges(Qt::LeftEdge) << Qt::LeftEdge << 1;
287 1 QTest::newRow("horizontal") << (Qt::LeftEdge | Qt::RightEdge) << Qt::Edge() << 0;
288 1 QTest::newRow("vertical") << (Qt::TopEdge | Qt::BottomEdge) << Qt::Edge() << 0;
289 1 QTest::newRow("orthogonal") << (Qt::LeftEdge | Qt::BottomEdge) << Qt::Edge() << 0;
290 1 QTest::newRow("3-way") << (Qt::LeftEdge | Qt::BottomEdge | Qt::RightEdge) << Qt::BottomEdge
291 1 << 1;
292 1 }
293
294 5 void layer_shell_test::test_exclusive_edge()
295 {
296 // Tests that the exclusive edge is correctly set.
297 5 QSignalSpy server_surface_spy(server.globals.compositor.get(),
298 &Srv::Compositor::surfaceCreated);
299
3/6
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 5 times.
✗ Branch 5 not taken.
5 QVERIFY(server_surface_spy.isValid());
300
301
1/2
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
5 std::unique_ptr<Clt::Surface> surface{compositor->createSurface()};
302
5/10
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 5 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 5 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 5 times.
5 QVERIFY(server_surface_spy.wait());
303
3/6
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 5 times.
✗ Branch 5 not taken.
5 auto server_surface = server_surface_spy.first().first().value<Srv::Surface*>();
304
2/4
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
5 QVERIFY(server_surface);
305
306
1/2
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
5 QSignalSpy layer_surface_spy(server.globals.layer_shell_v1.get(),
307 &Srv::LayerShellV1::surface_created);
308
3/6
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 5 times.
✗ Branch 5 not taken.
5 QVERIFY(layer_surface_spy.isValid());
309
310
1/2
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
5 std::unique_ptr<Clt::LayerSurfaceV1> layer_surface{layer_shell->get_layer_surface(
311
1/2
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
5 surface.get(), nullptr, Clt::LayerShellV1::layer::background, "")};
312
313
5/10
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 5 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 5 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 5 times.
5 QVERIFY(layer_surface_spy.wait());
314
3/6
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 5 times.
✗ Branch 5 not taken.
5 auto server_layer_surface = layer_surface_spy.first().first().value<Srv::LayerSurfaceV1*>();
315
2/4
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
5 QVERIFY(server_layer_surface);
316
3/6
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 5 times.
✗ Branch 5 not taken.
5 QCOMPARE(server_layer_surface->surface(), server_surface);
317
318
2/4
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
5 QFETCH(Qt::Edges, anchor);
319
1/2
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
5 layer_surface->set_anchor(anchor);
320
1/2
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
5 layer_surface->set_size(QSize(1, 1));
321
322 // Exclusive zone set to -1 should always produce the value.
323
1/2
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
5 layer_surface->set_exclusive_zone(-1);
324
325
3/6
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 5 times.
✗ Branch 5 not taken.
5 QCOMPARE(server_layer_surface->exclusive_zone(), 0);
326
327
1/2
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
5 QSignalSpy commit_spy(server_surface, &Srv::Surface::committed);
328
3/6
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 5 times.
✗ Branch 5 not taken.
5 QVERIFY(commit_spy.isValid());
329
330
1/2
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
5 surface->commit(Clt::Surface::CommitFlag::None);
331
5/10
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 5 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 5 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 5 times.
5 QVERIFY(commit_spy.wait());
332
333
3/6
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 5 times.
5 QCOMPARE(server_layer_surface->exclusive_edge(), Qt::Edge());
334
3/6
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 5 times.
✗ Branch 5 not taken.
5 QCOMPARE(server_layer_surface->exclusive_zone(), -1);
335
336
1/2
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
5 layer_surface->set_exclusive_zone(1);
337
1/2
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
5 surface->commit(Clt::Surface::CommitFlag::None);
338
5/10
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 5 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 5 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 5 times.
5 QVERIFY(commit_spy.wait());
339
340
2/4
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
5 QFETCH(Qt::Edge, excl_anchor);
341
2/4
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
5 QFETCH(int, zone);
342
3/6
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 5 times.
5 QCOMPARE(server_layer_surface->exclusive_edge(), excl_anchor);
343
3/6
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 5 times.
✗ Branch 5 not taken.
5 QCOMPARE(server_layer_surface->exclusive_zone(), zone);
344
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
5 }
345
346 1 void layer_shell_test::test_margin()
347 {
348 // Tests that margins are set and unset according to the anchor.
349 1 QSignalSpy server_surface_spy(server.globals.compositor.get(),
350 &Srv::Compositor::surfaceCreated);
351
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_surface_spy.isValid());
352
353
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Clt::Surface> surface{compositor->createSurface()};
354
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(server_surface_spy.wait());
355
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 auto server_surface = server_surface_spy.first().first().value<Srv::Surface*>();
356
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(server_surface);
357
358
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy layer_surface_spy(server.globals.layer_shell_v1.get(),
359 &Srv::LayerShellV1::surface_created);
360
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(layer_surface_spy.isValid());
361
362
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Clt::LayerSurfaceV1> layer_surface{layer_shell->get_layer_surface(
363
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 surface.get(), nullptr, Clt::LayerShellV1::layer::background, "")};
364
365
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(layer_surface_spy.wait());
366
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 auto server_layer_surface = layer_surface_spy.first().first().value<Srv::LayerSurfaceV1*>();
367
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(server_layer_surface);
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 QCOMPARE(server_layer_surface->surface(), server_surface);
369
370
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 layer_surface->set_anchor(Qt::LeftEdge | Qt::RightEdge);
371
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 layer_surface->set_size(QSize(1, 1));
372
373 // Exclusive zone set to -1 should always produce the value.
374
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 layer_surface->set_margin(QMargins(1, 2, 3, 4));
375
376
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_layer_surface->margins(), QMargins());
377
378
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy commit_spy(server_surface, &Srv::Surface::committed);
379
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(commit_spy.isValid());
380
381
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 surface->commit(Clt::Surface::CommitFlag::None);
382
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(commit_spy.wait());
383
384
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_layer_surface->margins(), QMargins(1, 0, 3, 0));
385
386
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 layer_surface->set_margin(QMargins(11, 12, 13, 14));
387
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 surface->commit(Clt::Surface::CommitFlag::None);
388
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(commit_spy.wait());
389
390
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_layer_surface->margins(), QMargins(11, 0, 13, 0));
391
392
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 layer_surface->set_anchor(Qt::TopEdge);
393
394
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 surface->commit(Clt::Surface::CommitFlag::None);
395
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(commit_spy.wait());
396
397
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(server_layer_surface->margins(), QMargins(0, 12, 0, 0));
398
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
399
400 1 void layer_shell_test::test_xdg_popup()
401 {
402 // Tests setting the layer surface as parent to an xdg-popup.
403 1 QSignalSpy server_surface_spy(server.globals.compositor.get(),
404 &Srv::Compositor::surfaceCreated);
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 QVERIFY(server_surface_spy.isValid());
406
407
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Clt::Surface> surface{compositor->createSurface()};
408
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(server_surface_spy.wait());
409
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 auto server_surface = server_surface_spy.first().first().value<Srv::Surface*>();
410
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(server_surface);
411
412
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy layer_surface_spy(server.globals.layer_shell_v1.get(),
413 &Srv::LayerShellV1::surface_created);
414
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(layer_surface_spy.isValid());
415
416
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Clt::LayerSurfaceV1> layer_surface{layer_shell->get_layer_surface(
417
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 surface.get(), nullptr, Clt::LayerShellV1::layer::background, "")};
418
419
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(layer_surface_spy.wait());
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 auto server_layer_surface = layer_surface_spy.first().first().value<Srv::LayerSurfaceV1*>();
421
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(server_layer_surface);
422
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_layer_surface->surface(), server_surface);
423
424
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy popup_created_spy(server.globals.xdg_shell.get(), &Srv::XdgShell::popupCreated);
425
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(popup_created_spy.isValid());
426
427
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Clt::Surface> popup_surface{compositor->createSurface()};
428 1 Clt::xdg_shell_positioner_data positioner_data;
429 1 positioner_data.size = QSize(10, 10);
430 1 positioner_data.anchor.rect = QRect(100, 100, 50, 50);
431
432 // Now create the popup.
433 1 std::unique_ptr<Clt::XdgShellPopup> xdg_popup{
434
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 xdg_shell->create_popup(popup_surface.get(), positioner_data)};
435
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(popup_created_spy.wait());
436
437
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 auto server_xdg_popup = popup_created_spy.first().first().value<Srv::XdgShellPopup*>();
438
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(server_xdg_popup);
439
440 // Get the popup on the layer surface.
441
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy got_popup_spy(server_layer_surface, &Srv::LayerSurfaceV1::got_popup);
442
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(got_popup_spy.isValid());
443
444
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 layer_surface->get_popup(xdg_popup.get());
445
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(got_popup_spy.wait());
446
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(got_popup_spy.first().first().value<Srv::XdgShellPopup*>(), server_xdg_popup);
447
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
448
449 1 void layer_shell_test::test_output_removal()
450 {
451 // This test verifies that a layer surface is closed once the associated output is removed.
452 1 QSignalSpy server_surface_spy(server.globals.compositor.get(),
453 &Srv::Compositor::surfaceCreated);
454
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_surface_spy.isValid());
455
456
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Clt::Surface> surface{compositor->createSurface()};
457
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(server_surface_spy.wait());
458
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 auto server_surface = server_surface_spy.first().first().value<Srv::Surface*>();
459
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(server_surface);
460
461
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy layer_surface_spy(server.globals.layer_shell_v1.get(),
462 &Srv::LayerShellV1::surface_created);
463
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(layer_surface_spy.isValid());
464
465
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Clt::LayerSurfaceV1> layer_surface{layer_shell->get_layer_surface(
466
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 surface.get(), output, Clt::LayerShellV1::layer::background, "")};
467 1 auto const size = QSize(100, 100);
468
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 layer_surface->set_size(size);
469
470
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(layer_surface_spy.wait());
471
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 auto server_layer_surface = layer_surface_spy.first().first().value<Srv::LayerSurfaceV1*>();
472
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(server_layer_surface);
473
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QCOMPARE(server_layer_surface->surface(), server_surface);
474
475
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy commit_spy(server_surface, &Srv::Surface::committed);
476
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(commit_spy.isValid());
477
478 // Now do a first commit according to protocol.
479
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 surface->commit(Clt::Surface::CommitFlag::None);
480
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(commit_spy.wait());
481
482
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy configure_spy(layer_surface.get(), &Clt::LayerSurfaceV1::configure_requested);
483
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(configure_spy.isValid());
484
485 // Server replies with configure event.
486
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server_layer_surface->configure(size);
487
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(configure_spy.wait());
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 QCOMPARE(configure_spy.first().first().value<QSize>(), size);
489
490
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QImage img(size, QImage::Format_ARGB32_Premultiplied);
491
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 img.fill(Qt::black);
492
493
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 auto buf = shm->createBuffer(img);
494
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 surface->attachBuffer(buf);
495
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 surface->damage(QRect(QPoint(), size));
496
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 layer_surface->ack_configure(configure_spy.first().last().value<quint32>());
497
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 surface->commit(Clt::Surface::CommitFlag::None);
498
499
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy closed_spy(layer_surface.get(), &Clt::LayerSurfaceV1::closed);
500
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(closed_spy.isValid());
501
502 // Now destroy output.
503 1 server.output.reset();
504
505
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(closed_spy.wait());
506
507 // Later commits are dropped.
508
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 surface->damage(QRect(QPoint(), size));
509
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 surface->commit(Clt::Surface::CommitFlag::None);
510
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(!commit_spy.wait(100));
511
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
512
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 taken 1 times.
✗ Branch 7 not taken.
1 QTEST_GUILESS_MAIN(layer_shell_test)
514 #include "layer_shell.moc"
515