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: 96.6% 28 / 0 / 29
Functions: 100.0% 2 / 0 / 2
Branches: 85.5% 53 / 0 / 62

presentation/MentionRule.cpp
Line Branch Exec Source
1 #include "MentionRule.h"
2
3 namespace MentionRule {
4
5 namespace {
6
7 320 bool partOfName(QChar c) {
8
6/8
✓ Branch 3 → 4 taken 99 times.
✓ Branch 3 → 16 taken 221 times.
✓ Branch 7 → 8 taken 99 times.
✗ Branch 7 → 16 not taken.
✓ Branch 11 → 12 taken 97 times.
✓ Branch 11 → 16 taken 2 times.
✗ Branch 15 → 16 not taken.
✓ Branch 15 → 17 taken 97 times.
320 return c.isLetterOrNumber() || c == QLatin1Char('-') || c == QLatin1Char('.') || c == QLatin1Char('\'');
9 }
10
11 } // namespace
12
13 97 Mention at(const QString &text, int cursor) {
14
3/6
✓ Branch 2 → 3 taken 97 times.
✗ Branch 2 → 5 not taken.
✗ Branch 4 → 5 not taken.
✓ Branch 4 → 6 taken 97 times.
✗ Branch 7 → 8 not taken.
✓ Branch 7 → 9 taken 97 times.
97 if (cursor <= 0 || cursor > text.size())
15 ✗ return {};
16 // Walk back over the fragment to the "@".
17 97 int at = cursor - 1;
18
5/6
✓ Branch 11 → 12 taken 320 times.
✗ Branch 11 → 16 not taken.
✓ Branch 14 → 15 taken 223 times.
✓ Branch 14 → 16 taken 97 times.
✓ Branch 17 → 10 taken 223 times.
✓ Branch 17 → 18 taken 97 times.
320 while (at >= 0 && partOfName(text.at(at)))
19 223 --at;
20
5/6
✓ Branch 18 → 19 taken 97 times.
✗ Branch 18 → 24 not taken.
✓ Branch 23 → 24 taken 65 times.
✓ Branch 23 → 25 taken 32 times.
✓ Branch 26 → 27 taken 65 times.
✓ Branch 26 → 28 taken 32 times.
97 if (at < 0 || text.at(at) != QLatin1Char('@'))
21 65 return {};
22
1/1
✓ Branch 28 → 29 taken 32 times.
32 const QString fragment = text.mid(at + 1, cursor - at - 1);
23
6/6
✓ Branch 30 → 31 taken 27 times.
✓ Branch 30 → 34 taken 5 times.
✓ Branch 33 → 34 taken 1 time.
✓ Branch 33 → 35 taken 26 times.
✓ Branch 36 → 37 taken 6 times.
✓ Branch 36 → 38 taken 26 times.
32 if (fragment.isEmpty() || !fragment.at(0).isLetter())
24 6 return {};
25
2/2
✓ Branch 38 → 39 taken 25 times.
✓ Branch 38 → 40 taken 1 time.
26 const QChar before = at > 0 ? text.at(at - 1) : QChar(QLatin1Char('\n'));
26
6/6
✓ Branch 45 → 46 taken 23 times.
✓ Branch 45 → 67 taken 3 times.
✓ Branch 49 → 50 taken 9 times.
✓ Branch 49 → 67 taken 14 times.
✓ Branch 53 → 54 taken 8 times.
✓ Branch 53 → 67 taken 1 time.
34 if (!(before == QLatin1Char('\n') || before == QLatin1Char(' ') || before == QLatin1Char('\t') ||
27
8/8
✓ Branch 57 → 58 taken 7 times.
✓ Branch 57 → 67 taken 1 time.
✓ Branch 61 → 62 taken 6 times.
✓ Branch 61 → 67 taken 1 time.
✓ Branch 65 → 66 taken 5 times.
✓ Branch 65 → 67 taken 1 time.
✓ Branch 68 → 69 taken 5 times.
✓ Branch 68 → 70 taken 21 times.
34 before == QLatin1Char('(') || before == QLatin1Char('[') || before == QLatin1Char('"')))
28 5 return {};
29 21 const int lineStart = int(text.lastIndexOf(QLatin1Char('\n'), at)) + 1;
30
4/4
✓ Branch 73 → 74 taken 21 times.
✓ Branch 76 → 77 taken 21 times.
✓ Branch 78 → 79 taken 1 time.
✓ Branch 78 → 80 taken 20 times.
21 if (text.mid(lineStart).startsWith(QLatin1Char('>')))
31 1 return {}; // a quoted line
32 // Below the signature separator: a line that is exactly "-- " before the "@".
33 20 int lineBegin = 0;
34
2/2
✓ Branch 93 → 81 taken 4 times.
✓ Branch 93 → 94 taken 19 times.
23 while (lineBegin < lineStart) {
35 4 const int lineEnd = int(text.indexOf(QLatin1Char('\n'), lineBegin));
36
2/4
✓ Branch 84 → 85 taken 4 times.
✗ Branch 84 → 94 not taken.
✓ Branch 85 → 86 taken 4 times.
✗ Branch 85 → 94 not taken.
4 if (lineEnd < 0 || lineEnd >= lineStart)
37 break;
38
3/3
✓ Branch 87 → 88 taken 4 times.
✓ Branch 90 → 91 taken 1 time.
✓ Branch 90 → 92 taken 3 times.
4 if (text.mid(lineBegin, lineEnd - lineBegin) == QLatin1String("-- "))
39 1 return {};
40 3 lineBegin = lineEnd + 1;
41 }
42 19 return {at, fragment};
43 51 }
44
45 } // namespace MentionRule
46