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% 22 / 0 / 22
Functions: 100.0% 1 / 0 / 1
Branches: 76.5% 52 / 0 / 68

util/GeoLink.h
Line Branch Exec Source
1 #pragma once
2 #include <QRegularExpression>
3 #include <QUrl>
4 #include <cmath>
5
6 namespace GeoLink {
7 14 inline QUrl validated(const QString &input) {
8
1/3
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 6 taken 14 times.
✗ Branch 4 → 5 not taken.
14 if (input.size() > 256) return {};
9 // S106-219: the scheme is case-insensitive (RFC 3986 §3.1): GEO: is geo:.
10
4/4
✓ Branch 7 → 8 taken 14 times.
✓ Branch 8 → 9 taken 3 times.
✓ Branch 8 → 10 taken 11 times.
✓ Branch 9 → 11 taken 3 times.
14 const QString value = input.startsWith(QLatin1String("geo:"), Qt::CaseInsensitive) ? input.mid(4) : input;
11 2 static const QRegularExpression pattern(QStringLiteral(
12
4/7
✓ Branch 11 → 12 taken 1 time.
✓ Branch 11 → 24 taken 13 times.
✓ Branch 13 → 14 taken 1 time.
✗ Branch 13 → 24 not taken.
✓ Branch 18 → 19 taken 1 time.
✗ Branch 107 → 108 not taken.
✗ Branch 107 → 109 not taken.
22 R"(^([+-]?[0-9]+(?:\.[0-9]+)?),([+-]?[0-9]+(?:\.[0-9]+)?)(?:,([+-]?[0-9]+(?:\.[0-9]+)?))?(?:;u=([0-9]+(?:\.[0-9]+)?))?(?:\?z=([0-9]+))?\z)"));
13
1/1
✓ Branch 25 → 26 taken 14 times.
14 const auto match = pattern.match(value);
14
4/4
✓ Branch 26 → 27 taken 14 times.
✓ Branch 27 → 28 taken 6 times.
✓ Branch 27 → 30 taken 8 times.
✓ Branch 28 → 29 taken 6 times.
14 if (!match.hasMatch()) return {};
15 8 bool latitudeOk = false, longitudeOk = false;
16
4/4
✓ Branch 30 → 31 taken 8 times.
✓ Branch 31 → 32 taken 8 times.
✓ Branch 33 → 34 taken 8 times.
✓ Branch 34 → 35 taken 8 times.
8 const double latitude = match.captured(1).toDouble(&latitudeOk), longitude = match.captured(2).toDouble(&longitudeOk);
17
12/18
✓ Branch 36 → 37 taken 8 times.
✗ Branch 36 → 46 not taken.
✓ Branch 37 → 38 taken 8 times.
✗ Branch 37 → 46 not taken.
✓ Branch 39 → 40 taken 8 times.
✗ Branch 39 → 46 not taken.
✓ Branch 41 → 42 taken 8 times.
✗ Branch 41 → 46 not taken.
✓ Branch 42 → 43 taken 8 times.
✗ Branch 42 → 46 not taken.
✓ Branch 43 → 44 taken 7 times.
✓ Branch 43 → 46 taken 1 time.
✓ Branch 44 → 45 taken 6 times.
✓ Branch 44 → 46 taken 1 time.
✗ Branch 45 → 46 not taken.
✓ Branch 45 → 47 taken 6 times.
✓ Branch 48 → 49 taken 2 times.
✓ Branch 48 → 51 taken 6 times.
8 if (!latitudeOk || !longitudeOk || !std::isfinite(latitude) || !std::isfinite(longitude) || latitude < -90 || latitude > 90 || longitude < -180 || longitude > 180)
18
1/1
✓ Branch 49 → 50 taken 2 times.
2 return {};
19
2/2
✓ Branch 72 → 53 taken 12 times.
✓ Branch 72 → 73 taken 6 times.
18 for (int field : {3, 4}) {
20
3/3
✓ Branch 53 → 54 taken 12 times.
✓ Branch 56 → 57 taken 10 times.
✓ Branch 56 → 58 taken 2 times.
12 if (match.captured(field).isEmpty()) continue;
21 2 bool ok = false;
22
2/2
✓ Branch 58 → 59 taken 2 times.
✓ Branch 59 → 60 taken 2 times.
2 const double number = match.captured(field).toDouble(&ok);
23
3/7
✓ Branch 61 → 62 taken 2 times.
✗ Branch 61 → 64 not taken.
✗ Branch 63 → 64 not taken.
✓ Branch 63 → 65 taken 2 times.
✗ Branch 66 → 67 not taken.
✓ Branch 66 → 69 taken 2 times.
✗ Branch 67 → 68 not taken.
2 if (!ok || !std::isfinite(number)) return {};
24 }
25
3/3
✓ Branch 73 → 74 taken 6 times.
✓ Branch 76 → 77 taken 2 times.
✓ Branch 76 → 85 taken 4 times.
6 if (!match.captured(5).isEmpty()) {
26 2 bool ok = false;
27
2/2
✓ Branch 77 → 78 taken 2 times.
✓ Branch 78 → 79 taken 2 times.
2 const int zoom = match.captured(5).toInt(&ok);
28
4/5
✓ Branch 80 → 81 taken 1 time.
✓ Branch 80 → 82 taken 1 time.
✗ Branch 81 → 82 not taken.
✓ Branch 81 → 84 taken 1 time.
✓ Branch 82 → 83 taken 1 time.
2 if (!ok || zoom > 22) return {};
29 }
30
2/2
✓ Branch 88 → 89 taken 5 times.
✓ Branch 89 → 90 taken 5 times.
5 return QUrl(QStringLiteral("geo:") + value);
31 14 }
32 } // namespace GeoLink
33