GCC Code Coverage Report


Directory: ./
File: autotests/client/blur.cpp
Date: 2024-01-22 17:25:27
Exec Total Coverage
Lines: 112 112 100.0%
Branches: 197 394 50.0%

Line Branch Exec Source
1 /********************************************************************
2 Copyright 2014 Martin Gräßlin <mgraesslin@kde.org>
3
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) version 3, or any
8 later version accepted by the membership of KDE e.V. (or its
9 successor approved by the membership of KDE e.V.), which shall
10 act as a proxy defined in Section 6 of version 3 of the license.
11
12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Lesser General Public License for more details.
16
17 You should have received a copy of the GNU Lesser General Public
18 License along with this library. If not, see <http://www.gnu.org/licenses/>.
19 *********************************************************************/
20 #include <QtTest>
21
22 #include "../../src/client/blur.h"
23 #include "../../src/client/compositor.h"
24 #include "../../src/client/connection_thread.h"
25 #include "../../src/client/event_queue.h"
26 #include "../../src/client/region.h"
27 #include "../../src/client/registry.h"
28 #include "../../src/client/surface.h"
29
30 #include "../../server/blur.h"
31 #include "../../server/compositor.h"
32 #include "../../server/display.h"
33 #include "../../server/region.h"
34 #include "../../server/surface.h"
35
36 #include "../../tests/globals.h"
37
38 using namespace Wrapland::Client;
39
40 class TestBlur : public QObject
41 {
42 Q_OBJECT
43 public:
44 explicit TestBlur(QObject* parent = nullptr);
45 private Q_SLOTS:
46 void init();
47 void cleanup();
48
49 void testCreate();
50 void testSurfaceDestroy();
51
52 private:
53 1 struct {
54 std::unique_ptr<Wrapland::Server::Display> display;
55 Wrapland::Server::globals globals;
56 } server;
57
58 Wrapland::Client::ConnectionThread* m_connection;
59 Wrapland::Client::Compositor* m_compositor;
60 Wrapland::Client::BlurManager* m_blurManager;
61 Wrapland::Client::EventQueue* m_queue;
62 QThread* m_thread;
63 };
64
65 constexpr auto socket_name = "wrapland-test-wayland-blur-0";
66
67
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 TestBlur::TestBlur(QObject* parent)
68 1 : QObject(parent)
69 1 , m_connection(nullptr)
70 1 , m_compositor(nullptr)
71 1 , m_queue(nullptr)
72 1 , m_thread(nullptr)
73 1 {
74 1 }
75
76 2 void TestBlur::init()
77 {
78 using namespace Wrapland::Server;
79 2 qRegisterMetaType<Wrapland::Server::Surface*>();
80
81 2 server.display = std::make_unique<Wrapland::Server::Display>();
82
2/4
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
2 server.display->set_socket_name(socket_name);
83 2 server.display->start();
84
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2 QVERIFY(server.display->running());
85
86 // setup connection
87
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2 m_connection = new Wrapland::Client::ConnectionThread;
88 2 QSignalSpy connectedSpy(m_connection, &ConnectionThread::establishedChanged);
89
3/6
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
2 QVERIFY(connectedSpy.isValid());
90
2/4
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
2 m_connection->setSocketName(socket_name);
91
92
2/4
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
2 m_thread = new QThread(this);
93
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2 m_connection->moveToThread(m_thread);
94
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2 m_thread->start();
95
96
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2 m_connection->establishConnection();
97
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
2 QVERIFY(connectedSpy.count() || connectedSpy.wait());
98
2/4
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
2 QCOMPARE(connectedSpy.count(), 1);
99
100
2/4
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
2 m_queue = new Wrapland::Client::EventQueue(this);
101
3/6
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
2 QVERIFY(!m_queue->isValid());
102
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2 m_queue->setup(m_connection);
103
3/6
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
2 QVERIFY(m_queue->isValid());
104
105
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2 Registry registry;
106
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2 QSignalSpy compositorSpy(&registry, &Registry::compositorAnnounced);
107
3/6
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
2 QVERIFY(compositorSpy.isValid());
108
109
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2 QSignalSpy blurSpy(&registry, &Registry::blurAnnounced);
110
3/6
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
2 QVERIFY(blurSpy.isValid());
111
112
3/6
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
2 QVERIFY(!registry.eventQueue());
113
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2 registry.setEventQueue(m_queue);
114
3/6
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
2 QCOMPARE(registry.eventQueue(), m_queue);
115
2/4
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
2 registry.create(m_connection->display());
116
3/6
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
2 QVERIFY(registry.isValid());
117
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2 registry.setup();
118
119 4 server.globals.compositor
120
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2 = std::make_unique<Wrapland::Server::Compositor>(server.display.get());
121
122
5/10
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
2 QVERIFY(compositorSpy.wait());
123
4/8
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
4 m_compositor = registry.createCompositor(compositorSpy.first().first().value<quint32>(),
124
3/6
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
2 compositorSpy.first().last().value<quint32>(),
125 this);
126
127 4 server.globals.blur_manager
128
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2 = std::make_unique<Wrapland::Server::BlurManager>(server.display.get());
129
130
5/10
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
2 QVERIFY(blurSpy.wait());
131
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2 m_blurManager = registry.createBlurManager(
132
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
2 blurSpy.first().first().value<quint32>(), blurSpy.first().last().value<quint32>(), this);
133
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
2 }
134
135 2 void TestBlur::cleanup()
136 {
137 #define CLEANUP(variable) \
138 if (variable) { \
139 delete variable; \
140 variable = nullptr; \
141 }
142
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
2 CLEANUP(m_compositor)
143
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
2 CLEANUP(m_blurManager)
144
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
2 CLEANUP(m_queue)
145
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
2 if (m_connection) {
146 2 m_connection->deleteLater();
147 2 m_connection = nullptr;
148 2 }
149
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
2 if (m_thread) {
150 2 m_thread->quit();
151 2 m_thread->wait();
152
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
2 delete m_thread;
153 2 m_thread = nullptr;
154 2 }
155 #undef CLEANUP
156
157
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2 server = {};
158 2 }
159
160 1 void TestBlur::testCreate()
161 {
162 1 QSignalSpy serverSurfaceCreated(server.globals.compositor.get(),
163 &Wrapland::Server::Compositor::surfaceCreated);
164
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(serverSurfaceCreated.isValid());
165
166
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> surface(m_compositor->createSurface());
167
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(serverSurfaceCreated.wait());
168
169
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 auto serverSurface = serverSurfaceCreated.first().first().value<Wrapland::Server::Surface*>();
170
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy commit_spy(serverSurface, &Wrapland::Server::Surface::committed);
171
172
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 auto* blur = m_blurManager->createBlur(surface.get(), surface.get());
173
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 blur->setRegion(m_compositor->createRegion(QRegion(0, 0, 10, 20), blur));
174
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 blur->commit();
175
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 surface->commit(Wrapland::Client::Surface::CommitFlag::None);
176
177
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());
178
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(serverSurface->state().updates & Wrapland::Server::surface_change::blur);
179
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(serverSurface->state().blur->region(), QRegion(0, 0, 10, 20));
180
181 // and destroy
182
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QSignalSpy destroyedSpy(serverSurface->state().blur, &QObject::destroyed);
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 QVERIFY(destroyedSpy.isValid());
184
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 delete blur;
185
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(destroyedSpy.wait());
186
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
187
188 1 void TestBlur::testSurfaceDestroy()
189 {
190 1 QSignalSpy serverSurfaceCreated(server.globals.compositor.get(),
191 &Wrapland::Server::Compositor::surfaceCreated);
192
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(serverSurfaceCreated.isValid());
193
194
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> surface(m_compositor->createSurface());
195
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(serverSurfaceCreated.wait());
196
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 auto serverSurface = serverSurfaceCreated.first().first().value<Wrapland::Server::Surface*>();
198
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy commit_spy(serverSurface, &Wrapland::Server::Surface::committed);
199
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());
200
201
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Blur> blur(m_blurManager->createBlur(surface.get()));
202
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 blur->setRegion(m_compositor->createRegion(QRegion(0, 0, 10, 20), blur.get()));
203
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 blur->commit();
204
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 surface->commit(Wrapland::Client::Surface::CommitFlag::None);
205
206
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());
207
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(serverSurface->state().updates & Wrapland::Server::surface_change::blur);
208
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(serverSurface->state().blur->region(), QRegion(0, 0, 10, 20));
209
210 // destroy the parent surface
211
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy surfaceDestroyedSpy(serverSurface, &QObject::destroyed);
212
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(surfaceDestroyedSpy.isValid());
213
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QSignalSpy blurDestroyedSpy(serverSurface->state().blur, &QObject::destroyed);
214
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(blurDestroyedSpy.isValid());
215 1 surface.reset();
216
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(surfaceDestroyedSpy.wait());
217
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(blurDestroyedSpy.isEmpty());
218 // destroy the blur
219 1 blur.reset();
220
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(blurDestroyedSpy.wait());
221
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
222
223
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(TestBlur)
224 #include "blur.moc"
225