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: 97.1% 34 / 0 / 35
Functions: 100.0% 3 / 0 / 3
Branches: 89.0% 65 / 0 / 73

data/ComposeDraftHeader.cpp
Line Branch Exec Source
1 #include "ComposeDraftHeader.h"
2
3 #include <QStringList>
4
5 namespace {
6
7 11 bool validId(const QString &value) {
8
5/6
✓ Branch 3 → 4 taken 11 times.
✗ Branch 3 → 6 not taken.
✓ Branch 5 → 6 taken 1 time.
✓ Branch 5 → 7 taken 10 times.
✓ Branch 8 → 9 taken 1 time.
✓ Branch 8 → 10 taken 10 times.
11 if (value.isEmpty() || value.size() > 64) return false;
9
2/2
✓ Branch 25 → 12 taken 72 times.
✓ Branch 25 → 26 taken 7 times.
79 for (const QChar character : value)
10
8/8
✓ Branch 13 → 14 taken 62 times.
✓ Branch 13 → 16 taken 10 times.
✓ Branch 15 → 16 taken 1 time.
✓ Branch 15 → 21 taken 61 times.
✓ Branch 19 → 20 taken 3 times.
✓ Branch 19 → 21 taken 8 times.
✓ Branch 22 → 23 taken 3 times.
✓ Branch 22 → 24 taken 69 times.
72 if (!(character.isLetterOrNumber() && character.unicode() < 0x80) && character != QLatin1Char('-')) return false;
11 7 return true;
12 }
13
14 } // namespace
15
16 13 std::optional<ComposeDraftHeader> ComposeDraftHeader::parse(const QString &value) {
17
2/2
✓ Branch 3 → 4 taken 1 time.
✓ Branch 3 → 5 taken 12 times.
13 if (value.size() > MaxLength) return std::nullopt;
18 12 ComposeDraftHeader header;
19 12 bool version = false;
20
5/5
✓ Branch 8 → 9 taken 12 times.
✓ Branch 9 → 10 taken 12 times.
✓ Branch 10 → 11 taken 12 times.
✓ Branch 96 → 12 taken 29 times.
✓ Branch 96 → 97 taken 5 times.
34 for (const QString &raw : value.split(QLatin1Char(';'))) {
21
1/1
✓ Branch 13 → 14 taken 29 times.
29 const QString part = raw.trimmed();
22
1/2
✗ Branch 15 → 16 not taken.
✓ Branch 15 → 17 taken 29 times.
29 if (part.isEmpty()) continue;
23 29 const qsizetype equals = part.indexOf(QLatin1Char('='));
24
2/2
✓ Branch 20 → 21 taken 1 time.
✓ Branch 20 → 23 taken 28 times.
29 if (equals <= 0) return std::nullopt;
25
3/3
✓ Branch 23 → 24 taken 28 times.
✓ Branch 24 → 25 taken 28 times.
✓ Branch 25 → 26 taken 28 times.
28 const QString key = part.left(equals).trimmed().toLower();
26
2/2
✓ Branch 28 → 29 taken 28 times.
✓ Branch 29 → 30 taken 28 times.
28 const QString text = part.mid(equals + 1).trimmed();
27
2/2
✓ Branch 33 → 34 taken 11 times.
✓ Branch 33 → 40 taken 17 times.
28 if (key == QLatin1String("v")) {
28
2/2
✓ Branch 36 → 37 taken 1 time.
✓ Branch 36 → 39 taken 10 times.
11 if (text != QLatin1String("1")) return std::nullopt;
29 10 version = true;
30
6/6
✓ Branch 42 → 43 taken 13 times.
✓ Branch 42 → 46 taken 4 times.
✓ Branch 45 → 46 taken 7 times.
✓ Branch 45 → 47 taken 6 times.
✓ Branch 48 → 49 taken 11 times.
✓ Branch 48 → 64 taken 6 times.
17 } else if (key == QLatin1String("session") || key == QLatin1String("identity")) {
31
5/6
✓ Branch 50 → 51 taken 11 times.
✗ Branch 50 → 54 not taken.
✓ Branch 52 → 53 taken 4 times.
✓ Branch 52 → 54 taken 7 times.
✓ Branch 55 → 56 taken 4 times.
✓ Branch 55 → 58 taken 7 times.
11 if (!text.isEmpty() && !validId(text)) return std::nullopt;
32
2/2
✓ Branch 60 → 61 taken 3 times.
✓ Branch 60 → 62 taken 4 times.
7 (key == QLatin1String("session") ? header.session : header.identity) = text;
33
2/2
✓ Branch 66 → 67 taken 5 times.
✓ Branch 66 → 79 taken 1 time.
6 } else if (key == QLatin1String("format")) {
34
2/2
✓ Branch 69 → 70 taken 1 time.
✓ Branch 69 → 72 taken 4 times.
5 if (text == QLatin1String("formatted")) header.formatted = true;
35
2/2
✓ Branch 74 → 75 taken 3 times.
✓ Branch 74 → 77 taken 1 time.
4 else if (text == QLatin1String("plain")) header.formatted = false;
36 1 else return std::nullopt;
37 }
38 53 }
39
2/2
✓ Branch 101 → 103 taken 1 time.
✓ Branch 101 → 104 taken 4 times.
5 if (!version) return std::nullopt;
40 4 return header;
41 12 }
42
43 78 QString ComposeDraftHeader::toString() const {
44
1/1
✓ Branch 5 → 6 taken 78 times.
78 QString out = QStringLiteral("v=1; session=%1; identity=%2").arg(session, identity);
45
8/13
✓ Branch 9 → 10 taken 78 times.
✗ Branch 9 → 25 not taken.
✓ Branch 11 → 12 taken 10 times.
✓ Branch 11 → 15 taken 68 times.
✓ Branch 18 → 19 taken 78 times.
✓ Branch 20 → 21 taken 68 times.
✓ Branch 20 → 22 taken 10 times.
✓ Branch 22 → 23 taken 10 times.
✓ Branch 22 → 24 taken 68 times.
✗ Branch 35 → 36 not taken.
✗ Branch 35 → 37 not taken.
✗ Branch 39 → 40 not taken.
✗ Branch 39 → 41 not taken.
156 if (formatted) out += *formatted ? QStringLiteral("; format=formatted") : QStringLiteral("; format=plain");
46 78 return out;
47 ✗ }
48