qi3pc(1.0.0-rc1) (Debug GNU 15.2.1)


./
File: tests/test_qi3pc.cpp
Date: 2025-12-19 02:36:39
Lines:
156 of 170, 0 excluded
91.8%
Functions:
25 of 26, 0 excluded
96.2%
Branches:
307 of 1042, 0 excluded
29.5%

Line Branch Exec Source
1 /* \author Hantz Vius
2 *
3 * \copyright Copyright (C) 2019-2025 Hantz Vius
4 *
5 * \license{
6 * This file is part of qi3pc.
7 *
8 * qi3pc is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU Affero General Public License as published by
10 * the Free Software Foundation, either version 3 of the License, or
11 * (at your option) any later version.
12 *
13 * This program 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
16 * GNU Affero General Public License for more details.
17 *
18 * You should have received a copy of the GNU Affero General Public License
19 * along with this program. If not, see <https://www.gnu.org/licenses/>.}
20 */
21
22 #include <QTest>
23 #include <QSignalSpy>
24
25 #include "test_qi3pc.h"
26 #include "data/i3_messages.h"
27
28 Q_LOGGING_CATEGORY(TestBlackBoxQi3pcLogger, "qi3pc.test", QtMsgType::QtDebugMsg);
29
30 void
31 5 TestBlackBoxQi3pc::initTestCase() {
32
1/2
✓ Branch 3 → 4 taken 5 times.
✗ Branch 3 → 26 not taken.
5 QString timestamp = QString::number(QDateTime::currentMSecsSinceEpoch());
33
2/4
✓ Branch 4 → 5 taken 5 times.
✗ Branch 4 → 19 not taken.
✓ Branch 6 → 7 taken 5 times.
✗ Branch 6 → 16 not taken.
10 m_socketPath = QString("/tmp/mock-i3wm-server-%1.socket").arg(timestamp);
34
3/8
✓ Branch 10 → 11 taken 5 times.
✗ Branch 10 → 24 not taken.
✓ Branch 11 → 12 taken 5 times.
✗ Branch 11 → 21 not taken.
✗ Branch 12 → 13 not taken.
✓ Branch 12 → 14 taken 5 times.
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
5 m_mockServer = new MockI3Server(m_socketPath, this);
35 5 }
36
37 void
38 5 TestBlackBoxQi3pc::cleanupTestCase() {
39
1/2
✓ Branch 2 → 3 taken 5 times.
✗ Branch 2 → 4 not taken.
5 delete m_mockServer;
40 5 }
41
42 void
43 75 TestBlackBoxQi3pc::init() {
44
2/6
✓ Branch 3 → 4 taken 75 times.
✗ Branch 3 → 7 not taken.
✗ Branch 4 → 5 not taken.
✓ Branch 4 → 6 taken 75 times.
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
75 m_qi3pc = new qi3pc(m_socketPath, this);
45 75 }
46
47 void
48 75 TestBlackBoxQi3pc::cleanup() {
49
1/2
✓ Branch 12 → 13 taken 75 times.
✗ Branch 12 → 17 not taken.
75 m_connections.erase(
50
1/2
✓ Branch 8 → 9 taken 75 times.
✗ Branch 8 → 17 not taken.
75 std::remove_if(m_connections.begin(), m_connections.end(), [](const QMetaObject::Connection& c) {
51 70 QObject::disconnect(c);
52 70 return true;
53 }),
54 75 m_connections.end()
55 );
56
57 75 m_qi3pc->disconnect();
58
1/2
✓ Branch 14 → 15 taken 75 times.
✗ Branch 14 → 16 not taken.
75 delete m_qi3pc;
59 75 }
60
61 void
62 5 TestBlackBoxQi3pc::test_ctor() {
63
3/6
✓ Branch 3 → 4 taken 5 times.
✗ Branch 3 → 7 not taken.
✓ Branch 5 → 6 taken 5 times.
✗ Branch 5 → 7 not taken.
✓ Branch 8 → 9 taken 5 times.
✗ Branch 8 → 12 not taken.
10 if (qEnvironmentVariableIsEmpty("DISPLAY") &&
64 5 qEnvironmentVariableIsEmpty("WAYLAND_DISPLAY")) {
65 5 QSKIP("Skipping: No display server.");
66 }
67
68 QVERIFY_THROWS_EXCEPTION(std::invalid_argument, {qi3pc("", this);});
69
70 {
71 ScopedEnv("I3SOCK");
72
73 QProcess process;
74 process.start("i3", QStringList("--get-socketpath"));
75 process.waitForReadyRead();
76 auto path = QString(process.readAllStandardOutput()).trimmed();
77 process.kill();
78 process.waitForFinished();
79
80 QString selectedPath;
81 QVERIFY_THROWS_NO_EXCEPTION(
82 {
83 qi3pc obj{};
84 selectedPath = obj.socketPath();
85 }
86 );
87 QVERIFY2(selectedPath == path,
88 qPrintable(QString("qi3pc constructed with unexpected socket path.\n"
89 "Expected %1 - Found %2")
90 .arg(path)
91 .arg(selectedPath)
92 ));
93 }
94 }
95
96 void
97 5 TestBlackBoxQi3pc::test_connection() {
98
4/16
✓ Branch 2 → 3 taken 5 times.
✗ Branch 2 → 97 not taken.
✓ Branch 3 → 4 taken 5 times.
✗ Branch 3 → 8 not taken.
✓ Branch 4 → 5 taken 5 times.
✗ Branch 4 → 97 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 12 taken 5 times.
✗ Branch 6 → 7 not taken.
✗ Branch 6 → 97 not taken.
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 97 not taken.
✗ Branch 9 → 10 not taken.
✗ Branch 9 → 12 not taken.
✗ Branch 10 → 11 not taken.
✗ Branch 10 → 97 not taken.
5 QVERIFY2(!m_qi3pc->isConnected(), "Already connected before ::connect.");
99
100
4/16
✓ Branch 12 → 13 taken 5 times.
✗ Branch 12 → 97 not taken.
✓ Branch 13 → 14 taken 5 times.
✗ Branch 13 → 18 not taken.
✓ Branch 14 → 15 taken 5 times.
✗ Branch 14 → 97 not taken.
✗ Branch 15 → 16 not taken.
✓ Branch 15 → 22 taken 5 times.
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 97 not taken.
✗ Branch 18 → 19 not taken.
✗ Branch 18 → 97 not taken.
✗ Branch 19 → 20 not taken.
✗ Branch 19 → 22 not taken.
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 97 not taken.
5 QVERIFY2(m_qi3pc->connect(), "::connect failed.");
101
4/16
✓ Branch 22 → 23 taken 5 times.
✗ Branch 22 → 97 not taken.
✓ Branch 23 → 24 taken 5 times.
✗ Branch 23 → 28 not taken.
✓ Branch 24 → 25 taken 5 times.
✗ Branch 24 → 97 not taken.
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 32 taken 5 times.
✗ Branch 26 → 27 not taken.
✗ Branch 26 → 97 not taken.
✗ Branch 28 → 29 not taken.
✗ Branch 28 → 97 not taken.
✗ Branch 29 → 30 not taken.
✗ Branch 29 → 32 not taken.
✗ Branch 30 → 31 not taken.
✗ Branch 30 → 97 not taken.
5 QVERIFY2(m_qi3pc->isConnected(), "Not connected after ::connect.");
102
103
4/16
✓ Branch 32 → 33 taken 5 times.
✗ Branch 32 → 97 not taken.
✓ Branch 33 → 34 taken 5 times.
✗ Branch 33 → 38 not taken.
✓ Branch 34 → 35 taken 5 times.
✗ Branch 34 → 97 not taken.
✗ Branch 35 → 36 not taken.
✓ Branch 35 → 42 taken 5 times.
✗ Branch 36 → 37 not taken.
✗ Branch 36 → 97 not taken.
✗ Branch 38 → 39 not taken.
✗ Branch 38 → 97 not taken.
✗ Branch 39 → 40 not taken.
✗ Branch 39 → 42 not taken.
✗ Branch 40 → 41 not taken.
✗ Branch 40 → 97 not taken.
5 QVERIFY2(m_qi3pc->disconnect(), "::disconnect failed.");
104
4/16
✓ Branch 42 → 43 taken 5 times.
✗ Branch 42 → 97 not taken.
✓ Branch 43 → 44 taken 5 times.
✗ Branch 43 → 48 not taken.
✓ Branch 44 → 45 taken 5 times.
✗ Branch 44 → 97 not taken.
✗ Branch 45 → 46 not taken.
✓ Branch 45 → 52 taken 5 times.
✗ Branch 46 → 47 not taken.
✗ Branch 46 → 97 not taken.
✗ Branch 48 → 49 not taken.
✗ Branch 48 → 97 not taken.
✗ Branch 49 → 50 not taken.
✗ Branch 49 → 52 not taken.
✗ Branch 50 → 51 not taken.
✗ Branch 50 → 97 not taken.
5 QVERIFY2(!m_qi3pc->isConnected(), "Still connected after ::disconnect.");
105
106
2/4
✓ Branch 52 → 53 taken 5 times.
✗ Branch 52 → 94 not taken.
✓ Branch 53 → 54 taken 5 times.
✗ Branch 53 → 92 not taken.
5 qi3pc obj{"/tmp/mock-i3wm-server-non-existent.socket", this};
107
4/16
✓ Branch 55 → 56 taken 5 times.
✗ Branch 55 → 95 not taken.
✓ Branch 56 → 57 taken 5 times.
✗ Branch 56 → 61 not taken.
✓ Branch 57 → 58 taken 5 times.
✗ Branch 57 → 95 not taken.
✗ Branch 58 → 59 not taken.
✓ Branch 58 → 65 taken 5 times.
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 95 not taken.
✗ Branch 61 → 62 not taken.
✗ Branch 61 → 95 not taken.
✗ Branch 62 → 63 not taken.
✗ Branch 62 → 65 not taken.
✗ Branch 63 → 64 not taken.
✗ Branch 63 → 95 not taken.
5 QVERIFY2(!obj.connect(), "Connectio to non-existent server succeeded.");
108
4/16
✓ Branch 65 → 66 taken 5 times.
✗ Branch 65 → 95 not taken.
✓ Branch 66 → 67 taken 5 times.
✗ Branch 66 → 71 not taken.
✓ Branch 67 → 68 taken 5 times.
✗ Branch 67 → 95 not taken.
✗ Branch 68 → 69 not taken.
✓ Branch 68 → 75 taken 5 times.
✗ Branch 69 → 70 not taken.
✗ Branch 69 → 95 not taken.
✗ Branch 71 → 72 not taken.
✗ Branch 71 → 95 not taken.
✗ Branch 72 → 73 not taken.
✗ Branch 72 → 75 not taken.
✗ Branch 73 → 74 not taken.
✗ Branch 73 → 95 not taken.
5 QVERIFY2(!obj.isConnected(), "Connected to non-existent server.");
109
4/16
✓ Branch 75 → 76 taken 5 times.
✗ Branch 75 → 95 not taken.
✓ Branch 76 → 77 taken 5 times.
✗ Branch 76 → 81 not taken.
✓ Branch 77 → 78 taken 5 times.
✗ Branch 77 → 95 not taken.
✗ Branch 78 → 79 not taken.
✓ Branch 78 → 85 taken 5 times.
✗ Branch 79 → 80 not taken.
✗ Branch 79 → 95 not taken.
✗ Branch 81 → 82 not taken.
✗ Branch 81 → 95 not taken.
✗ Branch 82 → 83 not taken.
✗ Branch 82 → 85 not taken.
✗ Branch 83 → 84 not taken.
✗ Branch 83 → 95 not taken.
5 QVERIFY2(obj.disconnect(), "Could not disconnect from non-existent server.");
110
1/2
✓ Branch 87 → 88 taken 5 times.
✗ Branch 87 → 90 not taken.
5 }
111
112 5 void TestBlackBoxQi3pc::test_subscription() {
113
1/2
✓ Branch 2 → 3 taken 5 times.
✗ Branch 2 → 180 not taken.
5 m_qi3pc->connect();
114
115
1/2
✓ Branch 3 → 4 taken 5 times.
✗ Branch 3 → 180 not taken.
5 QByteArray missedPayload = "Missed tick";
116
1/2
✓ Branch 4 → 5 taken 5 times.
✗ Branch 4 → 178 not taken.
5 QByteArray caughtPayload = "Caught tick";
117
118
2/4
✓ Branch 6 → 7 taken 5 times.
✗ Branch 6 → 116 not taken.
✓ Branch 7 → 8 taken 5 times.
✗ Branch 7 → 114 not taken.
5 m_connections.push_back(connect(m_qi3pc, &qi3pc::tickEvent, [=](const QString& payload) {
119
7/26
✓ Branch 3 → 4 taken 5 times.
✗ Branch 3 → 20 not taken.
✓ Branch 4 → 5 taken 5 times.
✗ Branch 4 → 47 not taken.
✓ Branch 6 → 7 taken 5 times.
✗ Branch 6 → 44 not taken.
✓ Branch 8 → 9 taken 5 times.
✗ Branch 8 → 41 not taken.
✓ Branch 10 → 11 taken 5 times.
✗ Branch 10 → 39 not taken.
✓ Branch 12 → 13 taken 5 times.
✗ Branch 12 → 37 not taken.
✗ Branch 17 → 18 not taken.
✓ Branch 17 → 36 taken 5 times.
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 61 not taken.
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 58 not taken.
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 55 not taken.
✗ Branch 26 → 27 not taken.
✗ Branch 26 → 53 not taken.
✗ Branch 28 → 29 not taken.
✗ Branch 28 → 51 not taken.
✗ Branch 33 → 34 not taken.
✗ Branch 33 → 36 not taken.
15 QVERIFY2(payload == caughtPayload, qPrintable(QString("::tickEvent emitted with unexpected payload.\n"
120 "Expected: %1\n"
121 "Found: %2")
122 .arg(caughtPayload)
123 .arg(payload)));
124 }));
125
126
1/2
✓ Branch 10 → 11 taken 5 times.
✗ Branch 10 → 176 not taken.
5 QSignalSpy spy(m_qi3pc, &qi3pc::tickEvent);
127
1/2
✓ Branch 11 → 12 taken 5 times.
✗ Branch 11 → 174 not taken.
5 m_qi3pc->sendTick(missedPayload);
128
4/16
✓ Branch 12 → 13 taken 5 times.
✗ Branch 12 → 174 not taken.
✓ Branch 13 → 14 taken 5 times.
✗ Branch 13 → 18 not taken.
✓ Branch 14 → 15 taken 5 times.
✗ Branch 14 → 174 not taken.
✗ Branch 15 → 16 not taken.
✓ Branch 15 → 22 taken 5 times.
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 174 not taken.
✗ Branch 18 → 19 not taken.
✗ Branch 18 → 174 not taken.
✗ Branch 19 → 20 not taken.
✗ Branch 19 → 22 not taken.
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 174 not taken.
5 QVERIFY2(!spy.wait(1000), "::tickEvent was emitted while not subscribed to ticks");
129
130 5 auto count = spy.count();
131
6/26
✓ Branch 23 → 24 taken 5 times.
✗ Branch 23 → 37 not taken.
✓ Branch 24 → 25 taken 5 times.
✗ Branch 24 → 127 not taken.
✓ Branch 26 → 27 taken 5 times.
✗ Branch 26 → 124 not taken.
✓ Branch 28 → 29 taken 5 times.
✗ Branch 28 → 122 not taken.
✓ Branch 30 → 31 taken 5 times.
✗ Branch 30 → 120 not taken.
✗ Branch 34 → 35 not taken.
✓ Branch 34 → 50 taken 5 times.
✗ Branch 35 → 36 not taken.
✗ Branch 35 → 174 not taken.
✗ Branch 37 → 38 not taken.
✗ Branch 37 → 137 not taken.
✗ Branch 39 → 40 not taken.
✗ Branch 39 → 134 not taken.
✗ Branch 41 → 42 not taken.
✗ Branch 41 → 132 not taken.
✗ Branch 43 → 44 not taken.
✗ Branch 43 → 130 not taken.
✗ Branch 47 → 48 not taken.
✗ Branch 47 → 50 not taken.
✗ Branch 48 → 49 not taken.
✗ Branch 48 → 174 not taken.
10 QVERIFY2(count == 0, qPrintable(QString("::tickEvent was emitted %1 times - expected 0 emissions.")
132 .arg(count)));
133
134
7/16
✓ Branch 51 → 52 taken 5 times.
✗ Branch 51 → 146 not taken.
✓ Branch 53 → 51 taken 5 times.
✓ Branch 53 → 54 taken 5 times.
✓ Branch 54 → 55 taken 5 times.
✗ Branch 54 → 142 not taken.
✓ Branch 55 → 56 taken 5 times.
✗ Branch 55 → 140 not taken.
✓ Branch 58 → 59 taken 5 times.
✓ Branch 58 → 60 taken 5 times.
✗ Branch 143 → 144 not taken.
✗ Branch 143 → 145 not taken.
✗ Branch 147 → 148 not taken.
✗ Branch 147 → 151 not taken.
✗ Branch 149 → 150 not taken.
✗ Branch 149 → 151 not taken.
15 m_qi3pc->subscribe({"tick"});
135
1/2
✓ Branch 60 → 61 taken 5 times.
✗ Branch 60 → 174 not taken.
5 m_qi3pc->sendTick(caughtPayload);
136
137
4/16
✓ Branch 61 → 62 taken 5 times.
✗ Branch 61 → 174 not taken.
✓ Branch 62 → 63 taken 5 times.
✗ Branch 62 → 67 not taken.
✓ Branch 63 → 64 taken 5 times.
✗ Branch 63 → 174 not taken.
✗ Branch 64 → 65 not taken.
✓ Branch 64 → 71 taken 5 times.
✗ Branch 65 → 66 not taken.
✗ Branch 65 → 174 not taken.
✗ Branch 67 → 68 not taken.
✗ Branch 67 → 174 not taken.
✗ Branch 68 → 69 not taken.
✗ Branch 68 → 71 not taken.
✗ Branch 69 → 70 not taken.
✗ Branch 69 → 174 not taken.
5 QVERIFY2(spy.wait(1000), "::tickEvent was not emitted (1000ms timeout)");
138
139 5 count = spy.count();
140
6/26
✓ Branch 72 → 73 taken 5 times.
✗ Branch 72 → 86 not taken.
✓ Branch 73 → 74 taken 5 times.
✗ Branch 73 → 161 not taken.
✓ Branch 75 → 76 taken 5 times.
✗ Branch 75 → 158 not taken.
✓ Branch 77 → 78 taken 5 times.
✗ Branch 77 → 156 not taken.
✓ Branch 79 → 80 taken 5 times.
✗ Branch 79 → 154 not taken.
✗ Branch 83 → 84 not taken.
✓ Branch 83 → 99 taken 5 times.
✗ Branch 84 → 85 not taken.
✗ Branch 84 → 174 not taken.
✗ Branch 86 → 87 not taken.
✗ Branch 86 → 171 not taken.
✗ Branch 88 → 89 not taken.
✗ Branch 88 → 168 not taken.
✗ Branch 90 → 91 not taken.
✗ Branch 90 → 166 not taken.
✗ Branch 92 → 93 not taken.
✗ Branch 92 → 164 not taken.
✗ Branch 96 → 97 not taken.
✗ Branch 96 → 99 not taken.
✗ Branch 97 → 98 not taken.
✗ Branch 97 → 174 not taken.
10 QVERIFY2(count == 1, qPrintable(QString("::tickEvent was emitted %1 times - expected 3 emissions.")
141 .arg(count)));
142
3/6
✓ Branch 101 → 102 taken 5 times.
✗ Branch 101 → 103 not taken.
✓ Branch 105 → 106 taken 5 times.
✗ Branch 105 → 107 not taken.
✓ Branch 109 → 110 taken 5 times.
✗ Branch 109 → 112 not taken.
5 }
143
144 void
145 5 TestBlackBoxQi3pc::test_fetchWorkspaces() {
146 10 fetchTest(
147
1/2
✓ Branch 4 → 5 taken 5 times.
✗ Branch 4 → 8 not taken.
5 *m_qi3pc,
148
2/4
✓ Branch 2 → 3 taken 5 times.
✗ Branch 2 → 12 not taken.
✓ Branch 3 → 4 taken 5 times.
✗ Branch 3 → 10 not taken.
10 QJsonDocument::fromJson(test_qi3pc::data::i3messages::workspaces).array(),
149 &qi3pc::fetchWorkspaces,
150 &qi3pc::workspaces,
151 &qi3pc::workspacesUpdated,
152 "workspacesUpdated"
153 );
154 5 }
155
156 void
157 5 TestBlackBoxQi3pc::test_fetchTree() {
158 10 fetchTest(
159
1/2
✓ Branch 4 → 5 taken 5 times.
✗ Branch 4 → 8 not taken.
5 *m_qi3pc,
160
2/4
✓ Branch 2 → 3 taken 5 times.
✗ Branch 2 → 12 not taken.
✓ Branch 3 → 4 taken 5 times.
✗ Branch 3 → 10 not taken.
10 QJsonDocument::fromJson(test_qi3pc::data::i3messages::tree).object(),
161 &qi3pc::fetchTree,
162 &qi3pc::tree,
163 &qi3pc::treeUpdated,
164 "treeUpdated"
165 );
166 5 }
167
168 5 void TestBlackBoxQi3pc::test_fetchOutputs() {
169 10 fetchTest(
170
1/2
✓ Branch 4 → 5 taken 5 times.
✗ Branch 4 → 8 not taken.
5 *m_qi3pc,
171
2/4
✓ Branch 2 → 3 taken 5 times.
✗ Branch 2 → 12 not taken.
✓ Branch 3 → 4 taken 5 times.
✗ Branch 3 → 10 not taken.
10 QJsonDocument::fromJson(test_qi3pc::data::i3messages::outputs).array(),
172 &qi3pc::fetchOutputs,
173 &qi3pc::outputs,
174 &qi3pc::outputsUpdated,
175 "outputsUpdated"
176 );
177 5 }
178
179 5 void TestBlackBoxQi3pc::test_fetchMarks() {
180 10 fetchTest(
181
1/2
✓ Branch 4 → 5 taken 5 times.
✗ Branch 4 → 8 not taken.
5 *m_qi3pc,
182
2/4
✓ Branch 2 → 3 taken 5 times.
✗ Branch 2 → 12 not taken.
✓ Branch 3 → 4 taken 5 times.
✗ Branch 3 → 10 not taken.
10 QJsonDocument::fromJson(test_qi3pc::data::i3messages::marks).array(),
183 &qi3pc::fetchMarks,
184 &qi3pc::marks,
185 &qi3pc::marksUpdated,
186 "marksUpdated"
187 );
188 5 }
189
190 void
191 5 TestBlackBoxQi3pc::test_fetchBarConfigs() {
192
1/2
✓ Branch 2 → 3 taken 5 times.
✗ Branch 2 → 552 not taken.
5 m_qi3pc->connect();
193
194 5 auto bars = test_qi3pc::data::i3messages::barConfigs;
195
1/2
✓ Branch 4 → 5 taken 5 times.
✗ Branch 4 → 550 not taken.
5 auto ids = test_qi3pc::data::i3messages::barIds();
196
197
1/2
✓ Branch 5 → 6 taken 5 times.
✗ Branch 5 → 548 not taken.
5 QSignalSpy newConfigSpy(m_qi3pc, &qi3pc::newBarConfig);
198
1/2
✓ Branch 9 → 10 taken 5 times.
✗ Branch 9 → 324 not taken.
5 m_connections.push_back(
199
2/6
✓ Branch 8 → 9 taken 5 times.
✗ Branch 8 → 326 not taken.
✗ Branch 12 → 13 not taken.
✓ Branch 12 → 14 taken 5 times.
✗ Branch 328 → 329 not taken.
✗ Branch 328 → 330 not taken.
10 connect(m_qi3pc, &qi3pc::newBarConfig, [=](const QString& id){
200
5/18
✓ Branch 3 → 4 taken 5 times.
✗ Branch 3 → 14 not taken.
✓ Branch 4 → 5 taken 5 times.
✗ Branch 4 → 63 not taken.
✓ Branch 6 → 7 taken 5 times.
✗ Branch 6 → 61 not taken.
✓ Branch 8 → 9 taken 5 times.
✗ Branch 8 → 59 not taken.
✗ Branch 11 → 12 not taken.
✓ Branch 11 → 24 taken 5 times.
✗ Branch 14 → 15 not taken.
✗ Branch 14 → 69 not taken.
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 67 not taken.
✗ Branch 18 → 19 not taken.
✗ Branch 18 → 65 not taken.
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 24 not taken.
5 QVERIFY2(!id.isEmpty(),
201 qPrintable(QString("::newBarConfig emitted with empty id.")));
202
203
7/26
✓ Branch 25 → 26 taken 5 times.
✗ Branch 25 → 42 not taken.
✓ Branch 26 → 27 taken 5 times.
✗ Branch 26 → 81 not taken.
✓ Branch 28 → 29 taken 5 times.
✗ Branch 28 → 78 not taken.
✓ Branch 30 → 31 taken 5 times.
✗ Branch 30 → 75 not taken.
✓ Branch 32 → 33 taken 5 times.
✗ Branch 32 → 73 not taken.
✓ Branch 34 → 35 taken 5 times.
✗ Branch 34 → 71 not taken.
✗ Branch 39 → 40 not taken.
✓ Branch 39 → 58 taken 5 times.
✗ Branch 42 → 43 not taken.
✗ Branch 42 → 95 not taken.
✗ Branch 44 → 45 not taken.
✗ Branch 44 → 92 not taken.
✗ Branch 46 → 47 not taken.
✗ Branch 46 → 89 not taken.
✗ Branch 48 → 49 not taken.
✗ Branch 48 → 87 not taken.
✗ Branch 50 → 51 not taken.
✗ Branch 50 → 85 not taken.
✗ Branch 55 → 56 not taken.
✗ Branch 55 → 58 not taken.
15 QVERIFY2(bars.contains(id),
204 qPrintable(QString("::newBarConfig emitted with unexpected id.\n"
205 "Expected one of %1\n."
206 "Found: %2")
207 .arg(ids)
208 .arg(id)));
209 }));
210
211
1/2
✓ Branch 14 → 15 taken 5 times.
✗ Branch 14 → 546 not taken.
5 m_qi3pc->fetchBarConfigs();
212
6/24
✓ Branch 15 → 16 taken 5 times.
✗ Branch 15 → 546 not taken.
✓ Branch 16 → 17 taken 5 times.
✗ Branch 16 → 27 not taken.
✓ Branch 17 → 18 taken 5 times.
✗ Branch 17 → 337 not taken.
✓ Branch 19 → 20 taken 5 times.
✗ Branch 19 → 335 not taken.
✓ Branch 21 → 22 taken 5 times.
✗ Branch 21 → 333 not taken.
✗ Branch 24 → 25 not taken.
✓ Branch 24 → 37 taken 5 times.
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 546 not taken.
✗ Branch 27 → 28 not taken.
✗ Branch 27 → 343 not taken.
✗ Branch 29 → 30 not taken.
✗ Branch 29 → 341 not taken.
✗ Branch 31 → 32 not taken.
✗ Branch 31 → 339 not taken.
✗ Branch 34 → 35 not taken.
✗ Branch 34 → 37 not taken.
✗ Branch 35 → 36 not taken.
✗ Branch 35 → 546 not taken.
5 QVERIFY2(newConfigSpy.wait(1000),
213 qPrintable(QString(("::newBarConfig was not emitted (1000ms timeout)"))));
214
215 5 auto count = newConfigSpy.count();
216
5/22
✓ Branch 38 → 39 taken 5 times.
✗ Branch 38 → 49 not taken.
✓ Branch 39 → 40 taken 5 times.
✗ Branch 39 → 349 not taken.
✓ Branch 41 → 42 taken 5 times.
✗ Branch 41 → 347 not taken.
✓ Branch 43 → 44 taken 5 times.
✗ Branch 43 → 345 not taken.
✗ Branch 46 → 47 not taken.
✓ Branch 46 → 59 taken 5 times.
✗ Branch 47 → 48 not taken.
✗ Branch 47 → 546 not taken.
✗ Branch 49 → 50 not taken.
✗ Branch 49 → 355 not taken.
✗ Branch 51 → 52 not taken.
✗ Branch 51 → 353 not taken.
✗ Branch 53 → 54 not taken.
✗ Branch 53 → 351 not taken.
✗ Branch 56 → 57 not taken.
✗ Branch 56 → 59 not taken.
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 546 not taken.
5 QVERIFY2(count == 1,
217 qPrintable(QString("::newBarConfig emitted %1 times - expected 1 emision")));
218
219
1/2
✓ Branch 59 → 60 taken 5 times.
✗ Branch 59 → 546 not taken.
5 auto data = m_qi3pc->barConfigs();
220
5/22
✓ Branch 62 → 63 taken 5 times.
✗ Branch 62 → 73 not taken.
✓ Branch 63 → 64 taken 5 times.
✗ Branch 63 → 361 not taken.
✓ Branch 65 → 66 taken 5 times.
✗ Branch 65 → 359 not taken.
✓ Branch 67 → 68 taken 5 times.
✗ Branch 67 → 357 not taken.
✗ Branch 70 → 71 not taken.
✓ Branch 70 → 83 taken 5 times.
✗ Branch 71 → 72 not taken.
✗ Branch 71 → 544 not taken.
✗ Branch 73 → 74 not taken.
✗ Branch 73 → 367 not taken.
✗ Branch 75 → 76 not taken.
✗ Branch 75 → 365 not taken.
✗ Branch 77 → 78 not taken.
✗ Branch 77 → 363 not taken.
✗ Branch 80 → 81 not taken.
✗ Branch 80 → 83 not taken.
✗ Branch 81 → 82 not taken.
✗ Branch 81 → 544 not taken.
5 QVERIFY2(data.has_value(),
221 qPrintable(QString("::barConfigs returned empty data.")));
222
223
5/8
✓ Branch 84 → 85 taken 5 times.
✗ Branch 84 → 543 not taken.
✓ Branch 85 → 86 taken 5 times.
✗ Branch 85 → 541 not taken.
✓ Branch 86 → 87 taken 5 times.
✗ Branch 86 → 541 not taken.
✓ Branch 299 → 88 taken 5 times.
✓ Branch 299 → 300 taken 5 times.
10 for(const QString& key: data->first.keys()) {
224
8/32
✓ Branch 89 → 90 taken 5 times.
✗ Branch 89 → 540 not taken.
✓ Branch 90 → 91 taken 5 times.
✗ Branch 90 → 107 not taken.
✓ Branch 91 → 92 taken 5 times.
✗ Branch 91 → 379 not taken.
✓ Branch 93 → 94 taken 5 times.
✗ Branch 93 → 376 not taken.
✓ Branch 95 → 96 taken 5 times.
✗ Branch 95 → 373 not taken.
✓ Branch 97 → 98 taken 5 times.
✗ Branch 97 → 371 not taken.
✓ Branch 99 → 100 taken 5 times.
✗ Branch 99 → 369 not taken.
✗ Branch 104 → 105 not taken.
✓ Branch 104 → 123 taken 5 times.
✗ Branch 105 → 106 not taken.
✗ Branch 105 → 540 not taken.
✗ Branch 107 → 108 not taken.
✗ Branch 107 → 393 not taken.
✗ Branch 109 → 110 not taken.
✗ Branch 109 → 390 not taken.
✗ Branch 111 → 112 not taken.
✗ Branch 111 → 387 not taken.
✗ Branch 113 → 114 not taken.
✗ Branch 113 → 385 not taken.
✗ Branch 115 → 116 not taken.
✗ Branch 115 → 383 not taken.
✗ Branch 120 → 121 not taken.
✗ Branch 120 → 123 not taken.
✗ Branch 121 → 122 not taken.
✗ Branch 121 → 540 not taken.
15 QVERIFY2(bars.contains(key),
225 qPrintable(QString("::barConfigs returned unexpected data.\n"
226 "Expected one of %1\n"
227 "Found: %2")
228 .arg(ids)
229 .arg(key)));
230
231
13/48
✓ Branch 123 → 124 taken 5 times.
✗ Branch 123 → 400 not taken.
✓ Branch 125 → 126 taken 5 times.
✗ Branch 125 → 397 not taken.
✓ Branch 126 → 127 taken 5 times.
✗ Branch 126 → 397 not taken.
✓ Branch 128 → 129 taken 5 times.
✗ Branch 128 → 151 not taken.
✓ Branch 129 → 130 taken 5 times.
✗ Branch 129 → 418 not taken.
✓ Branch 131 → 132 taken 5 times.
✗ Branch 131 → 415 not taken.
✓ Branch 134 → 135 taken 5 times.
✗ Branch 134 → 409 not taken.
✓ Branch 135 → 136 taken 5 times.
✗ Branch 135 → 409 not taken.
✓ Branch 136 → 137 taken 5 times.
✗ Branch 136 → 407 not taken.
✓ Branch 137 → 138 taken 5 times.
✗ Branch 137 → 405 not taken.
✓ Branch 139 → 140 taken 5 times.
✗ Branch 139 → 403 not taken.
✓ Branch 141 → 142 taken 5 times.
✗ Branch 141 → 401 not taken.
✗ Branch 148 → 149 not taken.
✓ Branch 148 → 173 taken 5 times.
✗ Branch 149 → 150 not taken.
✗ Branch 149 → 540 not taken.
✗ Branch 151 → 152 not taken.
✗ Branch 151 → 439 not taken.
✗ Branch 153 → 154 not taken.
✗ Branch 153 → 436 not taken.
✗ Branch 156 → 157 not taken.
✗ Branch 156 → 430 not taken.
✗ Branch 157 → 158 not taken.
✗ Branch 157 → 430 not taken.
✗ Branch 158 → 159 not taken.
✗ Branch 158 → 428 not taken.
✗ Branch 159 → 160 not taken.
✗ Branch 159 → 426 not taken.
✗ Branch 161 → 162 not taken.
✗ Branch 161 → 424 not taken.
✗ Branch 163 → 164 not taken.
✗ Branch 163 → 422 not taken.
✗ Branch 170 → 171 not taken.
✗ Branch 170 → 173 not taken.
✗ Branch 171 → 172 not taken.
✗ Branch 171 → 540 not taken.
15 QVERIFY2(data->first[key] == QJsonValue::Null,
232 qPrintable(QString("::barConfigs returned unexpected config for %1\n"
233 "Excpected: QJsonValue::Undefined\n"
234 "Found\n====%2\n====")
235 .arg(key)
236 .arg(prettify(data->first[key].toObject()))));
237
238
1/2
✓ Branch 173 → 174 taken 5 times.
✗ Branch 173 → 540 not taken.
5 auto expected = test_qi3pc::data::i3messages::barConfig(key);
239
1/2
✓ Branch 177 → 178 taken 5 times.
✗ Branch 177 → 443 not taken.
5 m_connections.push_back(
240
2/6
✓ Branch 176 → 177 taken 5 times.
✗ Branch 176 → 445 not taken.
✗ Branch 180 → 181 not taken.
✓ Branch 180 → 182 taken 5 times.
✗ Branch 447 → 448 not taken.
✗ Branch 447 → 449 not taken.
10 connect(m_qi3pc, &qi3pc::barConfigUpdated, [=](const QJsonObject& config){
241
10/38
✓ Branch 3 → 4 taken 5 times.
✗ Branch 3 → 27 not taken.
✓ Branch 4 → 5 taken 5 times.
✗ Branch 4 → 70 not taken.
✓ Branch 6 → 7 taken 5 times.
✗ Branch 6 → 67 not taken.
✓ Branch 8 → 9 taken 5 times.
✗ Branch 8 → 63 not taken.
✓ Branch 9 → 10 taken 5 times.
✗ Branch 9 → 61 not taken.
✓ Branch 11 → 12 taken 5 times.
✗ Branch 11 → 57 not taken.
✓ Branch 12 → 13 taken 5 times.
✗ Branch 12 → 55 not taken.
✓ Branch 14 → 15 taken 5 times.
✗ Branch 14 → 53 not taken.
✓ Branch 16 → 17 taken 5 times.
✗ Branch 16 → 51 not taken.
✗ Branch 24 → 25 not taken.
✓ Branch 24 → 50 taken 5 times.
✗ Branch 27 → 28 not taken.
✗ Branch 27 → 94 not taken.
✗ Branch 29 → 30 not taken.
✗ Branch 29 → 91 not taken.
✗ Branch 31 → 32 not taken.
✗ Branch 31 → 87 not taken.
✗ Branch 32 → 33 not taken.
✗ Branch 32 → 85 not taken.
✗ Branch 34 → 35 not taken.
✗ Branch 34 → 81 not taken.
✗ Branch 35 → 36 not taken.
✗ Branch 35 → 79 not taken.
✗ Branch 37 → 38 not taken.
✗ Branch 37 → 77 not taken.
✗ Branch 39 → 40 not taken.
✗ Branch 39 → 75 not taken.
✗ Branch 47 → 48 not taken.
✗ Branch 47 → 50 not taken.
20 QVERIFY2(config == expected,
242 qPrintable(QString("::barConfigUpdated emiitted with unexpected data for %1\n"
243 "Expected\n====%2\n====\n"
244 "Found\n====%3\n====\n")
245 .arg(key)
246 .arg(prettify(expected))
247 .arg(prettify(config))));
248 }));
249
250
1/2
✓ Branch 182 → 183 taken 5 times.
✗ Branch 182 → 538 not taken.
5 QSignalSpy updatedConfigSpy(m_qi3pc, &qi3pc::barConfigUpdated);
251
1/2
✓ Branch 183 → 184 taken 5 times.
✗ Branch 183 → 536 not taken.
5 m_qi3pc->fetchBarConfig(key);
252
6/24
✓ Branch 184 → 185 taken 5 times.
✗ Branch 184 → 536 not taken.
✓ Branch 185 → 186 taken 5 times.
✗ Branch 185 → 196 not taken.
✓ Branch 186 → 187 taken 5 times.
✗ Branch 186 → 456 not taken.
✓ Branch 188 → 189 taken 5 times.
✗ Branch 188 → 454 not taken.
✓ Branch 190 → 191 taken 5 times.
✗ Branch 190 → 452 not taken.
✗ Branch 193 → 194 not taken.
✓ Branch 193 → 206 taken 5 times.
✗ Branch 194 → 195 not taken.
✗ Branch 194 → 536 not taken.
✗ Branch 196 → 197 not taken.
✗ Branch 196 → 462 not taken.
✗ Branch 198 → 199 not taken.
✗ Branch 198 → 460 not taken.
✗ Branch 200 → 201 not taken.
✗ Branch 200 → 458 not taken.
✗ Branch 203 → 204 not taken.
✗ Branch 203 → 206 not taken.
✗ Branch 204 → 205 not taken.
✗ Branch 204 → 536 not taken.
5 QVERIFY2(updatedConfigSpy.wait(1000),
253 qPrintable(QString("::barConfigUpdated was not emitted (1000ms timeout)")));
254
255 5 auto count = updatedConfigSpy.count();
256
5/22
✓ Branch 207 → 208 taken 5 times.
✗ Branch 207 → 218 not taken.
✓ Branch 208 → 209 taken 5 times.
✗ Branch 208 → 468 not taken.
✓ Branch 210 → 211 taken 5 times.
✗ Branch 210 → 466 not taken.
✓ Branch 212 → 213 taken 5 times.
✗ Branch 212 → 464 not taken.
✗ Branch 215 → 216 not taken.
✓ Branch 215 → 228 taken 5 times.
✗ Branch 216 → 217 not taken.
✗ Branch 216 → 536 not taken.
✗ Branch 218 → 219 not taken.
✗ Branch 218 → 474 not taken.
✗ Branch 220 → 221 not taken.
✗ Branch 220 → 472 not taken.
✗ Branch 222 → 223 not taken.
✗ Branch 222 → 470 not taken.
✗ Branch 225 → 226 not taken.
✗ Branch 225 → 228 not taken.
✗ Branch 226 → 227 not taken.
✗ Branch 226 → 536 not taken.
5 QVERIFY2(count == 1,
257 qPrintable(QString("::barConfigUpdated was emitted %1 times - expected 1 emission")));
258
259
260
15/56
✓ Branch 228 → 229 taken 5 times.
✗ Branch 228 → 479 not taken.
✓ Branch 230 → 231 taken 5 times.
✗ Branch 230 → 476 not taken.
✓ Branch 231 → 232 taken 5 times.
✗ Branch 231 → 476 not taken.
✓ Branch 233 → 234 taken 5 times.
✗ Branch 233 → 261 not taken.
✓ Branch 234 → 235 taken 5 times.
✗ Branch 234 → 503 not taken.
✓ Branch 236 → 237 taken 5 times.
✗ Branch 236 → 500 not taken.
✓ Branch 238 → 239 taken 5 times.
✗ Branch 238 → 496 not taken.
✓ Branch 239 → 240 taken 5 times.
✗ Branch 239 → 494 not taken.
✓ Branch 242 → 243 taken 5 times.
✗ Branch 242 → 488 not taken.
✓ Branch 243 → 244 taken 5 times.
✗ Branch 243 → 488 not taken.
✓ Branch 244 → 245 taken 5 times.
✗ Branch 244 → 486 not taken.
✓ Branch 245 → 246 taken 5 times.
✗ Branch 245 → 484 not taken.
✓ Branch 247 → 248 taken 5 times.
✗ Branch 247 → 482 not taken.
✓ Branch 249 → 250 taken 5 times.
✗ Branch 249 → 480 not taken.
✗ Branch 258 → 259 not taken.
✓ Branch 258 → 288 taken 5 times.
✗ Branch 259 → 260 not taken.
✗ Branch 259 → 536 not taken.
✗ Branch 261 → 262 not taken.
✗ Branch 261 → 531 not taken.
✗ Branch 263 → 264 not taken.
✗ Branch 263 → 528 not taken.
✗ Branch 265 → 266 not taken.
✗ Branch 265 → 524 not taken.
✗ Branch 266 → 267 not taken.
✗ Branch 266 → 522 not taken.
✗ Branch 269 → 270 not taken.
✗ Branch 269 → 516 not taken.
✗ Branch 270 → 271 not taken.
✗ Branch 270 → 516 not taken.
✗ Branch 271 → 272 not taken.
✗ Branch 271 → 514 not taken.
✗ Branch 272 → 273 not taken.
✗ Branch 272 → 512 not taken.
✗ Branch 274 → 275 not taken.
✗ Branch 274 → 510 not taken.
✗ Branch 276 → 277 not taken.
✗ Branch 276 → 508 not taken.
✗ Branch 285 → 286 not taken.
✗ Branch 285 → 288 not taken.
✗ Branch 286 → 287 not taken.
✗ Branch 286 → 536 not taken.
20 QVERIFY2(data->first[key] == QJsonValue::Null,
261 qPrintable(QString("::barConfigs returned unexpected config for %1\n"
262 "Excpected\n====%2\n====\n"
263 "Found\n====%3\n====")
264 .arg(key)
265 .arg(prettify(expected))
266 .arg(prettify(data->first[key].toObject()))));
267
3/6
✓ Branch 290 → 291 taken 5 times.
✗ Branch 290 → 292 not taken.
✓ Branch 294 → 295 taken 5 times.
✗ Branch 294 → 297 not taken.
✓ Branch 302 → 303 taken 5 times.
✗ Branch 302 → 305 not taken.
10 }
268
4/8
✓ Branch 307 → 308 taken 5 times.
✗ Branch 307 → 309 not taken.
✓ Branch 311 → 312 taken 5 times.
✗ Branch 311 → 313 not taken.
✓ Branch 315 → 316 taken 5 times.
✗ Branch 315 → 317 not taken.
✓ Branch 319 → 320 taken 5 times.
✗ Branch 319 → 322 not taken.
5 }
269
270 void
271 5 TestBlackBoxQi3pc::test_fetchVersion() {
272 10 fetchTest(
273
1/2
✓ Branch 4 → 5 taken 5 times.
✗ Branch 4 → 8 not taken.
5 *m_qi3pc,
274
2/4
✓ Branch 2 → 3 taken 5 times.
✗ Branch 2 → 12 not taken.
✓ Branch 3 → 4 taken 5 times.
✗ Branch 3 → 10 not taken.
10 QJsonDocument::fromJson(test_qi3pc::data::i3messages::version).object(),
275 &qi3pc::fetchVersion,
276 &qi3pc::version,
277 &qi3pc::versionUpdated,
278 "versionUpdated"
279 );
280 5 }
281
282 void
283 5 TestBlackBoxQi3pc::test_fetchBindingModes() {
284 10 fetchTest(
285
1/2
✓ Branch 4 → 5 taken 5 times.
✗ Branch 4 → 8 not taken.
5 *m_qi3pc,
286
2/4
✓ Branch 2 → 3 taken 5 times.
✗ Branch 2 → 12 not taken.
✓ Branch 3 → 4 taken 5 times.
✗ Branch 3 → 10 not taken.
10 QJsonDocument::fromJson(test_qi3pc::data::i3messages::bindingModes).array(),
287 &qi3pc::fetchBindingModes,
288 &qi3pc::bindingModes,
289 &qi3pc::bindingModesUpdated,
290 "bindingModesUpdated"
291 );
292 5 }
293
294 void
295 5 TestBlackBoxQi3pc::test_fetchConfig() {
296 10 fetchTest(
297
1/2
✓ Branch 4 → 5 taken 5 times.
✗ Branch 4 → 8 not taken.
5 *m_qi3pc,
298
2/4
✓ Branch 2 → 3 taken 5 times.
✗ Branch 2 → 12 not taken.
✓ Branch 3 → 4 taken 5 times.
✗ Branch 3 → 10 not taken.
10 QJsonDocument::fromJson(test_qi3pc::data::i3messages::config).object(),
299 &qi3pc::fetchConfig,
300 &qi3pc::config,
301 &qi3pc::configUpdated,
302 "configUpdated"
303 );
304 5 }
305
306 void
307 5 TestBlackBoxQi3pc::test_fetchBindingState() {
308 10 fetchTest(
309
1/2
✓ Branch 3 → 4 taken 5 times.
✗ Branch 3 → 6 not taken.
5 *m_qi3pc,
310
1/2
✓ Branch 2 → 3 taken 5 times.
✗ Branch 2 → 8 not taken.
10 QString::fromUtf8(test_qi3pc::data::i3messages::parsedBindingState),
311 &qi3pc::fetchBindingState,
312 &qi3pc::bindingState,
313 &qi3pc::bindingStateUpdated,
314 "bindingStateUpdated"
315 );
316 5 }
317
318 void
319 5 TestBlackBoxQi3pc::test_runCommand_data()
320 {
321 5 QTest::addColumn<QByteArray>("command");
322 5 QTest::addColumn<QByteArray>("reply");
323
324
4/6
✓ Branch 4 → 5 taken 5 times.
✗ Branch 4 → 16 not taken.
✓ Branch 5 → 6 taken 5 times.
✗ Branch 5 → 16 not taken.
✓ Branch 14 → 7 taken 15 times.
✓ Branch 14 → 15 taken 5 times.
20 for (const auto& [cmd, reply]: std::as_const(test_qi3pc::data::i3messages::commands)) {
325
3/6
✓ Branch 9 → 10 taken 15 times.
✗ Branch 9 → 16 not taken.
✓ Branch 10 → 11 taken 15 times.
✗ Branch 10 → 16 not taken.
✓ Branch 11 → 12 taken 15 times.
✗ Branch 11 → 16 not taken.
15 QTest::newRow(cmd) << cmd << reply;
326 }
327 5 }
328
329 void
330 15 TestBlackBoxQi3pc::test_runCommand()
331 {
332 30 auto CommandResultsToString = [](qi3pc::CommandResults result) -> QString {
333 30 QString str = "[";
334
2/2
✓ Branch 36 → 5 taken 40 times.
✓ Branch 36 → 37 taken 30 times.
140 for(const auto& [success, parsedReply]: result) {
335
4/6
✓ Branch 10 → 11 taken 20 times.
✓ Branch 10 → 13 taken 20 times.
✓ Branch 12 → 14 taken 20 times.
✗ Branch 12 → 54 not taken.
✓ Branch 13 → 14 taken 20 times.
✗ Branch 13 → 54 not taken.
40 QString replyStr = parsedReply.has_value() ? parsedReply->toString() : "{}";
336
7/12
✓ Branch 14 → 15 taken 20 times.
✓ Branch 14 → 16 taken 20 times.
✓ Branch 17 → 18 taken 40 times.
✗ Branch 17 → 48 not taken.
✓ Branch 18 → 19 taken 40 times.
✗ Branch 18 → 46 not taken.
✓ Branch 19 → 20 taken 40 times.
✗ Branch 19 → 44 not taken.
✓ Branch 20 → 21 taken 40 times.
✗ Branch 20 → 42 not taken.
✓ Branch 21 → 22 taken 40 times.
✗ Branch 21 → 40 not taken.
40 str += QString("{") + (success ? "true," : "false,") + replyStr + "}";
337 40 }
338
1/2
✓ Branch 37 → 38 taken 30 times.
✗ Branch 37 → 56 not taken.
30 str += "]";
339
340 30 return str;
341 };
342
343
1/2
✓ Branch 3 → 4 taken 15 times.
✗ Branch 3 → 216 not taken.
15 QFETCH(QByteArray, command);
344
1/2
✓ Branch 6 → 7 taken 15 times.
✗ Branch 6 → 214 not taken.
15 QFETCH(QByteArray, reply);
345
346 using Command = test_qi3pc::data::i3messages::Command;
347
1/2
✓ Branch 8 → 9 taken 15 times.
✗ Branch 8 → 212 not taken.
15 m_qi3pc->connect();
348
349 15 QJsonParseError parseError;
350
2/4
✓ Branch 9 → 10 taken 15 times.
✗ Branch 9 → 130 not taken.
✓ Branch 10 → 11 taken 15 times.
✗ Branch 10 → 128 not taken.
15 QJsonArray replies = QJsonDocument::fromJson(reply, &parseError).array();
351
352 15 qi3pc::CommandResults expectedResult;
353
3/4
✓ Branch 14 → 15 taken 15 times.
✗ Branch 14 → 145 not taken.
✓ Branch 30 → 16 taken 20 times.
✓ Branch 30 → 31 taken 15 times.
35 for(const auto& r: std::as_const(replies)) {
354
1/2
✓ Branch 17 → 18 taken 20 times.
✗ Branch 17 → 144 not taken.
20 auto reply = r.toObject();
355
4/8
✓ Branch 18 → 19 taken 20 times.
✗ Branch 18 → 138 not taken.
✓ Branch 19 → 20 taken 20 times.
✗ Branch 19 → 136 not taken.
✓ Branch 21 → 22 taken 20 times.
✗ Branch 21 → 135 not taken.
✓ Branch 23 → 24 taken 20 times.
✗ Branch 23 → 131 not taken.
20 expectedResult.push_back({reply["success"].toBool(), qi3pc::ParseError::FromJSON(reply)});
356 20 }
357
358
5/14
✓ Branch 31 → 32 taken 15 times.
✗ Branch 31 → 156 not taken.
✓ Branch 33 → 34 taken 15 times.
✗ Branch 33 → 148 not taken.
✓ Branch 34 → 35 taken 15 times.
✗ Branch 34 → 146 not taken.
✗ Branch 37 → 38 not taken.
✓ Branch 37 → 39 taken 15 times.
✗ Branch 39 → 40 not taken.
✓ Branch 39 → 41 taken 15 times.
✗ Branch 150 → 151 not taken.
✗ Branch 150 → 152 not taken.
✗ Branch 153 → 154 not taken.
✗ Branch 153 → 155 not taken.
15 m_connections.push_back(connect(m_qi3pc, &qi3pc::commandRan, [=](qi3pc::CommandResults result){
359
13/50
✓ Branch 3 → 4 taken 15 times.
✗ Branch 3 → 33 not taken.
✓ Branch 4 → 5 taken 15 times.
✗ Branch 4 → 91 not taken.
✓ Branch 6 → 7 taken 15 times.
✗ Branch 6 → 87 not taken.
✓ Branch 7 → 8 taken 15 times.
✗ Branch 7 → 85 not taken.
✓ Branch 9 → 10 taken 15 times.
✗ Branch 9 → 80 not taken.
✓ Branch 10 → 11 taken 15 times.
✗ Branch 10 → 78 not taken.
✓ Branch 11 → 12 taken 15 times.
✗ Branch 11 → 76 not taken.
✓ Branch 13 → 14 taken 15 times.
✗ Branch 13 → 71 not taken.
✓ Branch 14 → 15 taken 15 times.
✗ Branch 14 → 69 not taken.
✓ Branch 15 → 16 taken 15 times.
✗ Branch 15 → 67 not taken.
✓ Branch 17 → 18 taken 15 times.
✗ Branch 17 → 65 not taken.
✓ Branch 19 → 20 taken 15 times.
✗ Branch 19 → 63 not taken.
✗ Branch 30 → 31 not taken.
✓ Branch 30 → 62 taken 15 times.
✗ Branch 33 → 34 not taken.
✗ Branch 33 → 124 not taken.
✗ Branch 35 → 36 not taken.
✗ Branch 35 → 120 not taken.
✗ Branch 36 → 37 not taken.
✗ Branch 36 → 118 not taken.
✗ Branch 38 → 39 not taken.
✗ Branch 38 → 113 not taken.
✗ Branch 39 → 40 not taken.
✗ Branch 39 → 111 not taken.
✗ Branch 40 → 41 not taken.
✗ Branch 40 → 109 not taken.
✗ Branch 42 → 43 not taken.
✗ Branch 42 → 104 not taken.
✗ Branch 43 → 44 not taken.
✗ Branch 43 → 102 not taken.
✗ Branch 44 → 45 not taken.
✗ Branch 44 → 100 not taken.
✗ Branch 46 → 47 not taken.
✗ Branch 46 → 98 not taken.
✗ Branch 48 → 49 not taken.
✗ Branch 48 → 96 not taken.
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 62 not taken.
60 QVERIFY2(result == expectedResult, qPrintable(QString("Running %1 returned unexpected reply\n"
360 "Expected\n====%2\n===="
361 "Found\n====%3\n====")
362 .arg(QString::fromUtf8(command))
363 .arg(CommandResultsToString(expectedResult))
364 .arg(CommandResultsToString(result))
365 ));
366 }));
367
368
1/2
✓ Branch 41 → 42 taken 15 times.
✗ Branch 41 → 208 not taken.
15 QSignalSpy spy(m_qi3pc, &qi3pc::commandRan);
369
370
1/2
✓ Branch 42 → 43 taken 15 times.
✗ Branch 42 → 206 not taken.
15 m_qi3pc->sendMessage<qi3pc::IpcType::Command>(command);
371
7/28
✓ Branch 43 → 44 taken 15 times.
✗ Branch 43 → 206 not taken.
✓ Branch 44 → 45 taken 15 times.
✗ Branch 44 → 58 not taken.
✓ Branch 45 → 46 taken 15 times.
✗ Branch 45 → 165 not taken.
✓ Branch 47 → 48 taken 15 times.
✗ Branch 47 → 162 not taken.
✓ Branch 49 → 50 taken 15 times.
✗ Branch 49 → 160 not taken.
✓ Branch 51 → 52 taken 15 times.
✗ Branch 51 → 158 not taken.
✗ Branch 55 → 56 not taken.
✓ Branch 55 → 71 taken 15 times.
✗ Branch 56 → 57 not taken.
✗ Branch 56 → 206 not taken.
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 175 not taken.
✗ Branch 60 → 61 not taken.
✗ Branch 60 → 172 not taken.
✗ Branch 62 → 63 not taken.
✗ Branch 62 → 170 not taken.
✗ Branch 64 → 65 not taken.
✗ Branch 64 → 168 not taken.
✗ Branch 68 → 69 not taken.
✗ Branch 68 → 71 not taken.
✗ Branch 69 → 70 not taken.
✗ Branch 69 → 206 not taken.
30 QVERIFY2(spy.wait(1000), qPrintable(QString("::commandRan was not emitted (1000ms timeout) for %1")
372 .arg(command)));
373
374 15 auto count = spy.count();
375
7/30
✓ Branch 72 → 73 taken 15 times.
✗ Branch 72 → 89 not taken.
✓ Branch 73 → 74 taken 15 times.
✗ Branch 73 → 188 not taken.
✓ Branch 75 → 76 taken 15 times.
✗ Branch 75 → 185 not taken.
✓ Branch 77 → 78 taken 15 times.
✗ Branch 77 → 182 not taken.
✓ Branch 79 → 80 taken 15 times.
✗ Branch 79 → 180 not taken.
✓ Branch 81 → 82 taken 15 times.
✗ Branch 81 → 178 not taken.
✗ Branch 86 → 87 not taken.
✓ Branch 86 → 105 taken 15 times.
✗ Branch 87 → 88 not taken.
✗ Branch 87 → 206 not taken.
✗ Branch 89 → 90 not taken.
✗ Branch 89 → 202 not taken.
✗ Branch 91 → 92 not taken.
✗ Branch 91 → 199 not taken.
✗ Branch 93 → 94 not taken.
✗ Branch 93 → 196 not taken.
✗ Branch 95 → 96 not taken.
✗ Branch 95 → 194 not taken.
✗ Branch 97 → 98 not taken.
✗ Branch 97 → 192 not taken.
✗ Branch 102 → 103 not taken.
✗ Branch 102 → 105 not taken.
✗ Branch 103 → 104 not taken.
✗ Branch 103 → 206 not taken.
45 QVERIFY2(count == 1, qPrintable(
376 QString("::commandRan was emitted %1 times - expected 1 emissions for %2")
377 .arg(count)
378 .arg(command)
379 ));
380
5/10
✓ Branch 107 → 108 taken 15 times.
✗ Branch 107 → 109 not taken.
✓ Branch 111 → 112 taken 15 times.
✗ Branch 111 → 113 not taken.
✓ Branch 115 → 116 taken 15 times.
✗ Branch 115 → 117 not taken.
✓ Branch 119 → 120 taken 15 times.
✗ Branch 119 → 121 not taken.
✓ Branch 123 → 124 taken 15 times.
✗ Branch 123 → 126 not taken.
15 }
381
382
5/10
✓ Branch 3 → 4 taken 5 times.
✗ Branch 3 → 17 not taken.
✓ Branch 4 → 5 taken 5 times.
✗ Branch 4 → 15 not taken.
✓ Branch 5 → 6 taken 5 times.
✗ Branch 5 → 15 not taken.
✓ Branch 6 → 7 taken 5 times.
✗ Branch 6 → 13 not taken.
✓ Branch 7 → 8 taken 5 times.
✗ Branch 7 → 13 not taken.
5 QTEST_MAIN(TestBlackBoxQi3pc)
383