MailJDTourDownloadDocsQualityTestsCoverage

Which source lines and branches the tests execute. Lines 91.5 %, branches 75.0 % (minimum 85 % and 72 %). main @ 399ffe3d · 21 October 2026 · pipeline 7238.

GCC Code Coverage Report


Directory: src/
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 100.0% 68 / 0 / 68
Functions: 100.0% 13 / 0 / 13
Branches: 92.9% 131 / 0 / 141

data/DavPushSettings.cpp
Line Branch Exec Source
1 #include "DavPushSettings.h"
2
3 #include "CalendarModels.h"
4
5 #include <QSettings>
6 #include <QUrl>
7
8 namespace DavPushSettings {
9 namespace {
10 const QString kGroup = QStringLiteral("davpush/");
11
12 722 QString policyKey(const QString &accountId, const QString &path) {
13 // QSettings keys must not contain '/' in a single segment: hex-encode
14 // the selection key so paths stay unambiguous.
15
1/1
✓ Branch 9 → 10 taken 722 times.
1444 return kGroup + QStringLiteral("policy/") +
16
5/5
✓ Branch 2 → 3 taken 722 times.
✓ Branch 3 → 4 taken 722 times.
✓ Branch 4 → 5 taken 722 times.
✓ Branch 5 → 6 taken 722 times.
✓ Branch 10 → 11 taken 722 times.
2166 QString::fromLatin1(calendarSelectionKey(accountId, path).toUtf8().toHex());
17 }
18 } // namespace
19
20 3235 bool enabled() {
21
4/4
✓ Branch 2 → 3 taken 3235 times.
✓ Branch 7 → 8 taken 3235 times.
✓ Branch 9 → 10 taken 3235 times.
✓ Branch 10 → 11 taken 3235 times.
6470 return QSettings().value(kGroup + QStringLiteral("enabled"), true).toBool();
22 }
23
24 11 void setEnabled(bool on) {
25
3/3
✓ Branch 2 → 3 taken 11 times.
✓ Branch 7 → 8 taken 11 times.
✓ Branch 9 → 10 taken 11 times.
22 QSettings().setValue(kGroup + QStringLiteral("enabled"), on);
26 11 }
27
28 2219 bool useSystemService() {
29
4/4
✓ Branch 2 → 3 taken 2219 times.
✓ Branch 7 → 8 taken 2219 times.
✓ Branch 9 → 10 taken 2219 times.
✓ Branch 10 → 11 taken 2219 times.
4438 return QSettings().value(kGroup + QStringLiteral("useSystemService"), true).toBool();
30 }
31
32 7 void setUseSystemService(bool use) {
33
3/3
✓ Branch 2 → 3 taken 7 times.
✓ Branch 7 → 8 taken 7 times.
✓ Branch 9 → 10 taken 7 times.
14 QSettings().setValue(kGroup + QStringLiteral("useSystemService"), use);
34 7 }
35
36 2388 Receiver receiver() {
37
1/1
✓ Branch 2 → 3 taken 2388 times.
2388 QSettings settings;
38 2388 Receiver r;
39
3/3
✓ Branch 6 → 7 taken 2388 times.
✓ Branch 8 → 9 taken 2388 times.
✓ Branch 9 → 10 taken 2388 times.
2388 r.provider = settings.value(kGroup + QStringLiteral("receiver/provider")).toString();
40
4/4
✓ Branch 19 → 20 taken 2388 times.
✓ Branch 21 → 22 taken 2388 times.
✓ Branch 22 → 23 taken 2388 times.
✓ Branch 23 → 24 taken 2388 times.
2388 r.server = normaliseServer(settings.value(kGroup + QStringLiteral("receiver/server")).toString());
41
3/3
✓ Branch 35 → 36 taken 2388 times.
✓ Branch 37 → 38 taken 2388 times.
✓ Branch 38 → 39 taken 2388 times.
4776 r.publicService = settings.value(kGroup + QStringLiteral("receiver/public"), false).toBool();
42
3/3
✓ Branch 48 → 49 taken 2388 times.
✓ Branch 50 → 51 taken 2388 times.
✓ Branch 51 → 52 taken 2388 times.
4776 r.hasToken = settings.value(kGroup + QStringLiteral("receiver/hasToken"), false).toBool();
43
5/6
✓ Branch 59 → 60 taken 363 times.
✓ Branch 59 → 62 taken 2025 times.
✗ Branch 61 → 62 not taken.
✓ Branch 61 → 63 taken 363 times.
✓ Branch 64 → 65 taken 2025 times.
✓ Branch 64 → 66 taken 363 times.
2388 if (r.provider != QLatin1String("ntfy") || r.server.isEmpty()) return {};
44 363 return r;
45 2388 }
46
47 2443 QString normaliseServer(const QString &text) {
48
2/2
✓ Branch 2 → 3 taken 2443 times.
✓ Branch 3 → 4 taken 2443 times.
2443 const QUrl url(text.trimmed(), QUrl::StrictMode);
49
6/9
✓ Branch 7 → 8 taken 417 times.
✓ Branch 10 → 11 taken 415 times.
✓ Branch 10 → 23 taken 2 times.
✓ Branch 14 → 15 taken 415 times.
✗ Branch 14 → 23 not taken.
✓ Branch 31 → 32 taken 2029 times.
✓ Branch 31 → 33 taken 414 times.
✗ Branch 70 → 71 not taken.
✗ Branch 70 → 72 not taken.
3275 if (!url.isValid() || url.scheme().compare(QLatin1String("https"), Qt::CaseInsensitive) != 0 ||
50
17/23
✓ Branch 5 → 6 taken 2443 times.
✓ Branch 6 → 7 taken 417 times.
✓ Branch 6 → 23 taken 2026 times.
✓ Branch 12 → 13 taken 415 times.
✓ Branch 16 → 17 taken 415 times.
✓ Branch 18 → 19 taken 414 times.
✓ Branch 18 → 23 taken 1 time.
✓ Branch 19 → 20 taken 414 times.
✓ Branch 20 → 21 taken 414 times.
✗ Branch 20 → 23 not taken.
✓ Branch 21 → 22 taken 414 times.
✗ Branch 22 → 23 not taken.
✓ Branch 22 → 24 taken 414 times.
✓ Branch 25 → 26 taken 415 times.
✓ Branch 25 → 27 taken 2028 times.
✓ Branch 27 → 28 taken 415 times.
✓ Branch 27 → 29 taken 2028 times.
✓ Branch 29 → 30 taken 417 times.
✓ Branch 29 → 31 taken 2026 times.
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 61 not taken.
✗ Branch 64 → 65 not taken.
✗ Branch 64 → 66 not taken.
3275 url.host().isEmpty() || !url.userInfo().isEmpty() || url.hasQuery() || url.hasFragment())
51 2029 return {};
52
1/1
✓ Branch 33 → 34 taken 414 times.
414 QUrl origin;
53
1/1
✓ Branch 37 → 38 taken 414 times.
414 origin.setScheme(QStringLiteral("https"));
54
3/3
✓ Branch 41 → 42 taken 414 times.
✓ Branch 42 → 43 taken 414 times.
✓ Branch 43 → 44 taken 414 times.
414 origin.setHost(url.host().toLower());
55
5/5
✓ Branch 46 → 47 taken 414 times.
✓ Branch 47 → 48 taken 4 times.
✓ Branch 47 → 50 taken 410 times.
✓ Branch 48 → 49 taken 4 times.
✓ Branch 49 → 50 taken 4 times.
414 if (url.port(443) != 443) origin.setPort(url.port());
56
1/1
✓ Branch 51 → 52 taken 414 times.
414 return origin.toString();
57 2443 }
58
59 53 bool setReceiver(const Receiver &r, QString *error) {
60
1/1
✓ Branch 2 → 3 taken 53 times.
53 const QString server = normaliseServer(r.server);
61
6/6
✓ Branch 5 → 6 taken 52 times.
✓ Branch 5 → 8 taken 1 time.
✓ Branch 7 → 8 taken 3 times.
✓ Branch 7 → 9 taken 49 times.
✓ Branch 10 → 11 taken 4 times.
✓ Branch 10 → 20 taken 49 times.
53 if (r.provider != QLatin1String("ntfy") || server.isEmpty()) {
62
2/2
✓ Branch 11 → 12 taken 2 times.
✓ Branch 11 → 19 taken 2 times.
6 if (error) *error = QStringLiteral("Enter the address of an HTTPS push service, e.g. https://ntfy.example.org.");
63 4 return false;
64 }
65
1/1
✓ Branch 20 → 21 taken 49 times.
49 QSettings settings;
66
2/2
✓ Branch 25 → 26 taken 49 times.
✓ Branch 27 → 28 taken 49 times.
98 settings.setValue(kGroup + QStringLiteral("receiver/provider"), r.provider);
67
2/2
✓ Branch 36 → 37 taken 49 times.
✓ Branch 38 → 39 taken 49 times.
98 settings.setValue(kGroup + QStringLiteral("receiver/server"), server);
68
2/2
✓ Branch 47 → 48 taken 49 times.
✓ Branch 49 → 50 taken 49 times.
98 settings.setValue(kGroup + QStringLiteral("receiver/public"), r.publicService);
69
2/2
✓ Branch 58 → 59 taken 49 times.
✓ Branch 60 → 61 taken 49 times.
98 settings.setValue(kGroup + QStringLiteral("receiver/hasToken"), r.hasToken);
70 49 return true;
71 53 }
72
73 7 void clearReceiver() {
74
3/3
✓ Branch 2 → 3 taken 7 times.
✓ Branch 6 → 7 taken 7 times.
✓ Branch 8 → 9 taken 7 times.
14 QSettings().remove(kGroup + QStringLiteral("receiver"));
75 7 }
76
77 711 DavPushPolicy policy(const QString &accountId, const QString &path) {
78
4/4
✓ Branch 3 → 4 taken 711 times.
✓ Branch 4 → 5 taken 711 times.
✓ Branch 6 → 7 taken 711 times.
✓ Branch 7 → 8 taken 711 times.
1422 return QSettings().value(policyKey(accountId, path)).toString() == QLatin1String("interval")
79
2/2
✓ Branch 9 → 10 taken 22 times.
✓ Branch 9 → 11 taken 689 times.
711 ? DavPushPolicy::IntervalOnly
80 1422 : DavPushPolicy::Automatic;
81 }
82
83 11 void setPolicy(const QString &accountId, const QString &path, DavPushPolicy value) {
84
1/1
✓ Branch 2 → 3 taken 11 times.
11 QSettings settings;
85
4/4
✓ Branch 3 → 4 taken 8 times.
✓ Branch 3 → 16 taken 3 times.
✓ Branch 8 → 9 taken 8 times.
✓ Branch 10 → 11 taken 8 times.
19 if (value == DavPushPolicy::IntervalOnly) settings.setValue(policyKey(accountId, path), QStringLiteral("interval"));
86
2/2
✓ Branch 16 → 17 taken 3 times.
✓ Branch 18 → 19 taken 3 times.
3 else settings.remove(policyKey(accountId, path));
87 11 }
88
89 2 void forgetAccount(const QString &accountId) {
90
1/1
✓ Branch 2 → 3 taken 2 times.
2 QSettings settings;
91
2/2
✓ Branch 6 → 7 taken 2 times.
✓ Branch 8 → 9 taken 2 times.
2 settings.beginGroup(kGroup + QStringLiteral("policy"));
92 const QString prefix = QString::fromLatin1(
93
6/6
✓ Branch 15 → 16 taken 2 times.
✓ Branch 16 → 17 taken 2 times.
✓ Branch 17 → 18 taken 2 times.
✓ Branch 18 → 19 taken 2 times.
✓ Branch 19 → 20 taken 2 times.
✓ Branch 20 → 21 taken 2 times.
2 (QString::number(accountId.size()) + QLatin1Char(':') + accountId).toUtf8().toHex());
94
5/5
✓ Branch 26 → 27 taken 2 times.
✓ Branch 27 → 28 taken 2 times.
✓ Branch 28 → 29 taken 2 times.
✓ Branch 38 → 30 taken 2 times.
✓ Branch 38 → 39 taken 2 times.
4 for (const QString &key : settings.childKeys())
95
4/4
✓ Branch 31 → 32 taken 2 times.
✓ Branch 32 → 33 taken 1 time.
✓ Branch 32 → 36 taken 1 time.
✓ Branch 34 → 35 taken 1 time.
4 if (key.startsWith(prefix)) settings.remove(key);
96
1/1
✓ Branch 40 → 41 taken 2 times.
2 settings.endGroup();
97 2 }
98
99 2027 bool backgroundSyncEnabled() {
100
3/3
✓ Branch 2 → 3 taken 2027 times.
✓ Branch 8 → 9 taken 2027 times.
✓ Branch 9 → 10 taken 2027 times.
4054 return QSettings().value(QStringLiteral("caldav/syncIntervalMin"), 15).toInt() > 0;
101 }
102
103 } // namespace DavPushSettings
104