qi3pc 0.3.1 (Debug GNU 15.1.1)


Directory: ./
File: tests/test_qi3pc.h
Date: 2025-06-23 04:52:02
Exec Total Coverage
Lines: 24 24 100.0%
Functions: 12 12 100.0%
Branches: 86 284 30.3%

Line Branch Exec Source
1 #pragma once
2
3 #include <QSignalSpy>
4
5 #include "mock_i3ipc.h"
6 #include "../qi3pc.h"
7
8 Q_DECLARE_LOGGING_CATEGORY(TestQi3pcLogger);
9
10 class TestQi3pc : public QObject {
11 Q_OBJECT
12
13 private slots:
14 void initTestCase();
15 void cleanupTestCase();
16 void init();
17 void cleanup();
18
19 void test_connection();
20 // void test_subscription();
21 void test_fetchWorkspaces();
22 void test_fetchTree();
23 void test_fetchOutputs();
24 void test_fetchMarks();
25 void test_fetchBarConfigs();
26 void test_fetchVersion();
27 void test_fetchBindingModes();
28 void test_fetchConfig();
29 void test_fetchBindingState();
30
31 private:
32 template<typename Data, typename Fetch, typename Get, typename Signal>
33 void fetchTest(
34 qi3pc& ipc, const Data& test_data,
35 Fetch fetch, Get get, Signal notification,
36 const char* signalName,
37 int timeout = 1000, qsizetype expectedEmissions = 1);
38
39 template<typename Data>
40 static
41 QString prettify(const Data& data);
42
43 template<typename Data>
44 static
45 void check_equal(const Data& expected, const Data& actual, const QString& logPrefix);
46
47 private:
48 qi3pc* m_qi3pc;
49 MockI3Server* m_mockServer;
50 QString m_socketPath;
51 std::vector<QMetaObject::Connection> m_connections;
52 };
53
54 template<typename Data, typename Fetch, typename Get, typename Signal>
55 void
56 8 TestQi3pc::fetchTest(
57 qi3pc& ipc,
58 const Data& test_data,
59 Fetch fetch, Get get, Signal notification,
60 const char* signalName,
61 int timeout,
62 qsizetype expectedEmissions)
63 {
64
1/2
✓ Branch 0 (2→3) taken 8 times.
✗ Branch 1 (2→235) not taken.
8 ipc.connect();
65
66
1/2
✓ Branch 0 (3→4) taken 8 times.
✗ Branch 1 (3→235) not taken.
8 QSignalSpy spy(&ipc, notification);
67 m_connections.push_back
68
2/4
✓ Branch 0 (4→5) taken 8 times.
✗ Branch 1 (4→138) not taken.
✓ Branch 2 (5→6) taken 8 times.
✗ Branch 3 (5→136) not taken.
16 (connect(&ipc, notification, [&](std::optional<std::pair<Data, qint64>> data) {
69
18/66
✓ Branch 0 (3→4) taken 1 times.
✗ Branch 1 (3→17) not taken.
✓ Branch 2 (4→5) taken 1 times.
✗ Branch 3 (4→46) not taken.
✓ Branch 4 (6→7) taken 1 times.
✗ Branch 5 (6→43) not taken.
✓ Branch 6 (8→9) taken 1 times.
✗ Branch 7 (8→41) not taken.
✓ Branch 8 (10→11) taken 1 times.
✗ Branch 9 (10→39) not taken.
✗ Branch 10 (14→15) not taken.
✓ Branch 11 (14→30) taken 1 times.
✗ Branch 12 (17→18) not taken.
✗ Branch 13 (17→56) not taken.
✗ Branch 14 (19→20) not taken.
✗ Branch 15 (19→53) not taken.
✗ Branch 16 (21→22) not taken.
✗ Branch 17 (21→51) not taken.
✗ Branch 18 (23→24) not taken.
✗ Branch 19 (23→49) not taken.
✗ Branch 20 (27→28) not taken.
✗ Branch 21 (27→30) not taken.
✓ Branch 22 (3→4) taken 3 times.
✗ Branch 23 (3→17) not taken.
✓ Branch 24 (4→5) taken 3 times.
✗ Branch 25 (4→46) not taken.
✓ Branch 26 (6→7) taken 3 times.
✗ Branch 27 (6→43) not taken.
✓ Branch 28 (8→9) taken 3 times.
✗ Branch 29 (8→41) not taken.
✓ Branch 30 (10→11) taken 3 times.
✗ Branch 31 (10→39) not taken.
✗ Branch 32 (14→15) not taken.
✓ Branch 33 (14→30) taken 3 times.
✗ Branch 34 (17→18) not taken.
✗ Branch 35 (17→56) not taken.
✗ Branch 36 (19→20) not taken.
✗ Branch 37 (19→53) not taken.
✗ Branch 38 (21→22) not taken.
✗ Branch 39 (21→51) not taken.
✗ Branch 40 (23→24) not taken.
✗ Branch 41 (23→49) not taken.
✗ Branch 42 (27→28) not taken.
✗ Branch 43 (27→30) not taken.
✓ Branch 44 (3→4) taken 4 times.
✗ Branch 45 (3→17) not taken.
✓ Branch 46 (4→5) taken 4 times.
✗ Branch 47 (4→46) not taken.
✓ Branch 48 (6→7) taken 4 times.
✗ Branch 49 (6→43) not taken.
✓ Branch 50 (8→9) taken 4 times.
✗ Branch 51 (8→41) not taken.
✓ Branch 52 (10→11) taken 4 times.
✗ Branch 53 (10→39) not taken.
✗ Branch 54 (14→15) not taken.
✓ Branch 55 (14→30) taken 4 times.
✗ Branch 56 (17→18) not taken.
✗ Branch 57 (17→56) not taken.
✗ Branch 58 (19→20) not taken.
✗ Branch 59 (19→53) not taken.
✗ Branch 60 (21→22) not taken.
✗ Branch 61 (21→51) not taken.
✗ Branch 62 (23→24) not taken.
✗ Branch 63 (23→49) not taken.
✗ Branch 64 (27→28) not taken.
✗ Branch 65 (27→30) not taken.
16 QVERIFY2(data.has_value(),
70 qPrintable(QString("::%1 emitted with empty data.")
71 .arg(signalName)));
72
73
3/6
✓ Branch 0 (34→35) taken 1 times.
✗ Branch 1 (34→59) not taken.
✓ Branch 2 (34→35) taken 3 times.
✗ Branch 3 (34→59) not taken.
✓ Branch 4 (34→35) taken 4 times.
✗ Branch 5 (34→59) not taken.
8 check_equal(test_data, data->first,
74
3/6
✓ Branch 0 (30→31) taken 1 times.
✗ Branch 1 (30→64) not taken.
✓ Branch 2 (30→31) taken 3 times.
✗ Branch 3 (30→64) not taken.
✓ Branch 4 (30→31) taken 4 times.
✗ Branch 5 (30→64) not taken.
8 QString("::%1 emitted with unexpected data.")
75
3/6
✓ Branch 0 (32→33) taken 1 times.
✗ Branch 1 (32→61) not taken.
✓ Branch 2 (32→33) taken 3 times.
✗ Branch 3 (32→61) not taken.
✓ Branch 4 (32→33) taken 4 times.
✗ Branch 5 (32→61) not taken.
16 .arg(signalName));
76 })
77 );
78
79
2/4
✗ Branch 0 (7→8) not taken.
✓ Branch 1 (7→9) taken 8 times.
✓ Branch 2 (10→11) taken 8 times.
✗ Branch 3 (10→233) not taken.
8 (ipc.*fetch)();
80
8/32
✓ Branch 0 (11→12) taken 8 times.
✗ Branch 1 (11→233) not taken.
✓ Branch 2 (12→13) taken 8 times.
✗ Branch 3 (12→29) not taken.
✓ Branch 4 (13→14) taken 8 times.
✗ Branch 5 (13→150) not taken.
✓ Branch 6 (15→16) taken 8 times.
✗ Branch 7 (15→147) not taken.
✓ Branch 8 (17→18) taken 8 times.
✗ Branch 9 (17→144) not taken.
✓ Branch 10 (19→20) taken 8 times.
✗ Branch 11 (19→142) not taken.
✓ Branch 12 (21→22) taken 8 times.
✗ Branch 13 (21→140) not taken.
✗ Branch 14 (26→27) not taken.
✓ Branch 15 (26→45) taken 8 times.
✗ Branch 16 (27→28) not taken.
✗ Branch 17 (27→233) not taken.
✗ Branch 18 (29→30) not taken.
✗ Branch 19 (29→164) not taken.
✗ Branch 20 (31→32) not taken.
✗ Branch 21 (31→161) not taken.
✗ Branch 22 (33→34) not taken.
✗ Branch 23 (33→158) not taken.
✗ Branch 24 (35→36) not taken.
✗ Branch 25 (35→156) not taken.
✗ Branch 26 (37→38) not taken.
✗ Branch 27 (37→154) not taken.
✗ Branch 28 (42→43) not taken.
✗ Branch 29 (42→45) not taken.
✗ Branch 30 (43→44) not taken.
✗ Branch 31 (43→233) not taken.
24 QVERIFY2(spy.wait(timeout),
81 qPrintable(QString("::%1 was not emitted (%2ms timeout).")
82 .arg(signalName)
83 .arg(timeout)));
84
85 8 auto count = spy.count();
86
8/34
✓ Branch 0 (46→47) taken 8 times.
✗ Branch 1 (46→66) not taken.
✓ Branch 2 (47→48) taken 8 times.
✗ Branch 3 (47→181) not taken.
✓ Branch 4 (49→50) taken 8 times.
✗ Branch 5 (49→178) not taken.
✓ Branch 6 (51→52) taken 8 times.
✗ Branch 7 (51→175) not taken.
✓ Branch 8 (53→54) taken 8 times.
✗ Branch 9 (53→172) not taken.
✓ Branch 10 (55→56) taken 8 times.
✗ Branch 11 (55→170) not taken.
✓ Branch 12 (57→58) taken 8 times.
✗ Branch 13 (57→168) not taken.
✗ Branch 14 (63→64) not taken.
✓ Branch 15 (63→85) taken 8 times.
✗ Branch 16 (64→65) not taken.
✗ Branch 17 (64→233) not taken.
✗ Branch 18 (66→67) not taken.
✗ Branch 19 (66→199) not taken.
✗ Branch 20 (68→69) not taken.
✗ Branch 21 (68→196) not taken.
✗ Branch 22 (70→71) not taken.
✗ Branch 23 (70→193) not taken.
✗ Branch 24 (72→73) not taken.
✗ Branch 25 (72→190) not taken.
✗ Branch 26 (74→75) not taken.
✗ Branch 27 (74→188) not taken.
✗ Branch 28 (76→77) not taken.
✗ Branch 29 (76→186) not taken.
✗ Branch 30 (82→83) not taken.
✗ Branch 31 (82→85) not taken.
✗ Branch 32 (83→84) not taken.
✗ Branch 33 (83→233) not taken.
32 QVERIFY2(count == expectedEmissions,
87 qPrintable(QString("::%1 emitted %2 times - expected %3 emissions.")
88 .arg(signalName)
89 .arg(count)
90 .arg(expectedEmissions)));
91
92
2/4
✗ Branch 0 (85→86) not taken.
✓ Branch 1 (85→87) taken 8 times.
✓ Branch 2 (88→89) taken 8 times.
✗ Branch 3 (88→233) not taken.
8 auto data = (ipc.*get)();
93
6/26
✓ Branch 0 (91→92) taken 8 times.
✗ Branch 1 (91→105) not taken.
✓ Branch 2 (92→93) taken 8 times.
✗ Branch 3 (92→211) not taken.
✓ Branch 4 (94→95) taken 8 times.
✗ Branch 5 (94→208) not taken.
✓ Branch 6 (96→97) taken 8 times.
✗ Branch 7 (96→206) not taken.
✓ Branch 8 (98→99) taken 8 times.
✗ Branch 9 (98→204) not taken.
✗ Branch 10 (102→103) not taken.
✓ Branch 11 (102→118) taken 8 times.
✗ Branch 12 (103→104) not taken.
✗ Branch 13 (103→231) not taken.
✗ Branch 14 (105→106) not taken.
✗ Branch 15 (105→221) not taken.
✗ Branch 16 (107→108) not taken.
✗ Branch 17 (107→218) not taken.
✗ Branch 18 (109→110) not taken.
✗ Branch 19 (109→216) not taken.
✗ Branch 20 (111→112) not taken.
✗ Branch 21 (111→214) not taken.
✗ Branch 22 (115→116) not taken.
✗ Branch 23 (115→118) not taken.
✗ Branch 24 (116→117) not taken.
✗ Branch 25 (116→231) not taken.
16 QVERIFY2(data.has_value(),
94 qPrintable(QString("::%1 emitted with empty data.")
95 .arg(signalName)));
96
1/2
✓ Branch 0 (122→123) taken 8 times.
✗ Branch 1 (122→224) not taken.
8 check_equal(test_data, data->first,
97
1/2
✓ Branch 0 (118→119) taken 8 times.
✗ Branch 1 (118→229) not taken.
8 QString("::%1 emitted with unexpected data.")
98
1/2
✓ Branch 0 (120→121) taken 8 times.
✗ Branch 1 (120→226) not taken.
16 .arg(signalName));
99
2/4
✓ Branch 0 (127→128) taken 8 times.
✗ Branch 1 (127→129) not taken.
✓ Branch 2 (131→132) taken 8 times.
✗ Branch 3 (131→134) not taken.
8 }
100
101 template<typename Data>
102 QString
103 37 TestQi3pc::prettify(const Data& data) {
104 if constexpr(std::is_same_v<Data, QString>) {
105 4 return data;
106 } else {
107
3/6
✓ Branch 0 (2→3) taken 33 times.
✗ Branch 1 (2→14) not taken.
✓ Branch 2 (3→4) taken 33 times.
✗ Branch 3 (3→12) not taken.
✓ Branch 4 (4→5) taken 33 times.
✗ Branch 5 (4→10) not taken.
33 return QString::fromUtf8(QJsonDocument(data).toJson());
108 }
109 }
110
111 template<typename Data>
112 void
113 16 TestQi3pc::check_equal(const Data& expected, const Data& actual, const QString& logPrefix) {
114 if constexpr(std::is_same_v<Data, QJsonArray>) {
115
10/38
✓ Branch 0 (4→5) taken 8 times.
✗ Branch 1 (4→26) not taken.
✓ Branch 2 (5→6) taken 8 times.
✗ Branch 3 (5→109) not taken.
✓ Branch 4 (7→8) taken 8 times.
✗ Branch 5 (7→106) not taken.
✓ Branch 6 (9→10) taken 8 times.
✗ Branch 7 (9→103) not taken.
✓ Branch 8 (10→11) taken 8 times.
✗ Branch 9 (10→103) not taken.
✓ Branch 10 (12→13) taken 8 times.
✗ Branch 11 (12→100) not taken.
✓ Branch 12 (13→14) taken 8 times.
✗ Branch 13 (13→100) not taken.
✓ Branch 14 (15→16) taken 8 times.
✗ Branch 15 (15→98) not taken.
✓ Branch 16 (17→18) taken 8 times.
✗ Branch 17 (17→96) not taken.
✗ Branch 18 (23→24) not taken.
✓ Branch 19 (23→47) taken 8 times.
✗ Branch 20 (26→27) not taken.
✗ Branch 21 (26→127) not taken.
✗ Branch 22 (28→29) not taken.
✗ Branch 23 (28→124) not taken.
✗ Branch 24 (30→31) not taken.
✗ Branch 25 (30→121) not taken.
✗ Branch 26 (31→32) not taken.
✗ Branch 27 (31→121) not taken.
✗ Branch 28 (33→34) not taken.
✗ Branch 29 (33→118) not taken.
✗ Branch 30 (34→35) not taken.
✗ Branch 31 (34→118) not taken.
✗ Branch 32 (36→37) not taken.
✗ Branch 33 (36→116) not taken.
✗ Branch 34 (38→39) not taken.
✗ Branch 35 (38→114) not taken.
✗ Branch 36 (44→45) not taken.
✗ Branch 37 (44→47) not taken.
32 QVERIFY2(expected.count() == actual.count(),
116 qPrintable(QString("%1 Expected .count#%2 - Found .count#%3")
117 .arg(logPrefix)
118 .arg(expected.count())
119 .arg(actual.count())
120 ));
121 }
122
123
11/38
✓ Branch 0 (3→4) taken 16 times.
✗ Branch 1 (3→27) not taken.
✓ Branch 2 (4→5) taken 16 times.
✗ Branch 3 (4→70) not taken.
✓ Branch 4 (6→7) taken 16 times.
✗ Branch 5 (6→67) not taken.
✓ Branch 6 (9→10) taken 16 times.
✗ Branch 7 (9→61) not taken.
✓ Branch 8 (12→13) taken 16 times.
✗ Branch 9 (12→55) not taken.
✓ Branch 10 (14→15) taken 16 times.
✗ Branch 11 (14→53) not taken.
✓ Branch 12 (16→17) taken 16 times.
✗ Branch 13 (16→51) not taken.
✓ Branch 14 (24→25) taken 14 times.
✓ Branch 15 (24→50) taken 2 times.
✓ Branch 16 (27→28) taken 14 times.
✗ Branch 17 (27→94) not taken.
✗ Branch 18 (29→30) not taken.
✓ Branch 19 (29→91) taken 14 times.
✗ Branch 20 (32→33) not taken.
✗ Branch 21 (32→85) not taken.
✗ Branch 22 (35→36) not taken.
✗ Branch 23 (35→79) not taken.
✗ Branch 24 (37→38) not taken.
✗ Branch 25 (37→77) not taken.
✗ Branch 26 (39→40) not taken.
✗ Branch 27 (39→75) not taken.
✗ Branch 28 (47→48) not taken.
✗ Branch 29 (47→50) not taken.
✗ Branch 30 (35→36) not taken.
✗ Branch 31 (35→79) not taken.
✗ Branch 32 (37→38) not taken.
✗ Branch 33 (37→77) not taken.
✗ Branch 34 (39→40) not taken.
✗ Branch 35 (39→75) not taken.
✗ Branch 36 (47→48) not taken.
✗ Branch 37 (47→50) not taken.
64 QVERIFY2(expected == actual,
124 qPrintable(QString("%1\n"
125 "Expected:\n====\n%2\n====\n"
126 "Found:\n====\n%3\n====\n")
127 .arg(logPrefix)
128 .arg(prettify(expected))
129 .arg(prettify(actual))
130 ));
131 }
132