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.2% 35 / 0 / 36
Functions: 100.0% 4 / 0 / 4
Branches: 83.6% 56 / 0 / 67

presentation/MapMarkerModel.cpp
Line Branch Exec Source
1 #include "MapMarkerModel.h"
2
3 #include <QHash>
4 #include <QSet>
5
6
1/2
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 4925 times.
4925 int MapMarkerModel::rowCount(const QModelIndex &parent) const { return parent.isValid() ? 0 : int(m_rows.size()); }
7
8 1282 QVariant MapMarkerModel::data(const QModelIndex &index, int role) const {
9
4/8
✓ Branch 3 → 4 taken 1282 times.
✗ Branch 3 → 8 not taken.
✓ Branch 6 → 7 taken 1282 times.
✗ Branch 6 → 8 not taken.
✗ Branch 7 → 8 not taken.
✓ Branch 7 → 9 taken 1282 times.
✗ Branch 10 → 11 not taken.
✓ Branch 10 → 12 taken 1282 times.
1282 if (!index.isValid() || index.row() >= m_rows.size() || role != MarkerRole)
10 ✗ return {};
11 1282 return m_rows.at(index.row());
12 }
13
14
3/9
✓ Branch 3 → 4 taken 27 times.
✓ Branch 5 → 6 taken 27 times.
✓ Branch 5 → 7 taken 27 times.
✗ Branch 10 → 11 not taken.
✗ Branch 10 → 12 not taken.
✗ Branch 14 → 15 not taken.
✗ Branch 14 → 18 not taken.
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 18 not taken.
54 QHash<int, QByteArray> MapMarkerModel::roleNames() const { return {{MarkerRole, m_roleName}}; }
15
16 504 void MapMarkerModel::setMarkers(const QVariantList &markers) {
17 504 QHash<QString, int> wanted; // id → position in `markers`
18
2/2
✓ Branch 20 → 3 taken 4139 times.
✓ Branch 20 → 21 taken 504 times.
4643 for (int i = 0; i < markers.size(); ++i)
19
4/4
✓ Branch 4 → 5 taken 4139 times.
✓ Branch 9 → 10 taken 4139 times.
✓ Branch 10 → 11 taken 4139 times.
✓ Branch 11 → 12 taken 4139 times.
8278 wanted.insert(markers.at(i).toMap().value(QStringLiteral("id")).toString(), i);
20 504 const int before = int(m_rows.size());
21 // Rows whose cluster left, from the end so the indices stay valid.
22
2/2
✓ Branch 45 → 24 taken 3273 times.
✓ Branch 45 → 46 taken 504 times.
3777 for (int row = int(m_rows.size()) - 1; row >= 0; --row)
23
5/5
✓ Branch 25 → 26 taken 3273 times.
✓ Branch 30 → 31 taken 3273 times.
✓ Branch 31 → 32 taken 3273 times.
✓ Branch 39 → 40 taken 962 times.
✓ Branch 39 → 44 taken 2311 times.
6546 if (!wanted.contains(m_rows.at(row).toMap().value(QStringLiteral("id")).toString())) {
24
1/1
✓ Branch 41 → 42 taken 962 times.
962 beginRemoveRows({}, row, row);
25
1/1
✓ Branch 42 → 43 taken 962 times.
962 m_rows.removeAt(row);
26
1/1
✓ Branch 43 → 44 taken 962 times.
962 endRemoveRows();
27 }
28 // Kept rows get their new data in place.
29 504 QSet<QString> kept;
30
2/2
✓ Branch 82 → 48 taken 2311 times.
✓ Branch 82 → 83 taken 504 times.
2815 for (int row = 0; row < m_rows.size(); ++row) {
31
3/3
✓ Branch 49 → 50 taken 2311 times.
✓ Branch 54 → 55 taken 2311 times.
✓ Branch 55 → 56 taken 2311 times.
4622 const QString id = m_rows.at(row).toMap().value(QStringLiteral("id")).toString();
32
1/1
✓ Branch 61 → 62 taken 2311 times.
2311 kept.insert(id);
33
1/1
✓ Branch 64 → 65 taken 2311 times.
2311 const QVariant next = markers.at(wanted.value(id));
34
3/3
✓ Branch 66 → 67 taken 2311 times.
✓ Branch 67 → 68 taken 969 times.
✓ Branch 67 → 78 taken 1342 times.
2311 if (next != m_rows.at(row)) {
35
2/2
✓ Branch 68 → 69 taken 969 times.
✓ Branch 69 → 70 taken 969 times.
969 m_rows[row] = next;
36
4/4
✓ Branch 70 → 71 taken 969 times.
✓ Branch 72 → 73 taken 969 times.
✓ Branch 74 → 75 taken 969 times.
✓ Branch 75 → 76 taken 969 times.
969 emit dataChanged(index(row), index(row), {MarkerRole});
37 }
38 2311 }
39 // New clusters at the end.
40 504 QVariantList added;
41
2/2
✓ Branch 104 → 85 taken 4139 times.
✓ Branch 104 → 105 taken 504 times.
4643 for (const QVariant &marker : markers)
42
5/5
✓ Branch 86 → 87 taken 4139 times.
✓ Branch 91 → 92 taken 4139 times.
✓ Branch 92 → 93 taken 4139 times.
✓ Branch 100 → 101 taken 1828 times.
✓ Branch 100 → 102 taken 2311 times.
8278 if (!kept.contains(marker.toMap().value(QStringLiteral("id")).toString()))
43
1/1
✓ Branch 101 → 102 taken 1828 times.
1828 added.append(marker);
44
2/2
✓ Branch 106 → 107 taken 133 times.
✓ Branch 106 → 114 taken 371 times.
504 if (!added.isEmpty()) {
45
1/1
✓ Branch 111 → 112 taken 133 times.
133 beginInsertRows({}, int(m_rows.size()), int(m_rows.size() + added.size()) - 1);
46
1/1
✓ Branch 112 → 113 taken 133 times.
133 m_rows.append(added);
47
1/1
✓ Branch 113 → 114 taken 133 times.
133 endInsertRows();
48 }
49
2/2
✓ Branch 115 → 116 taken 140 times.
✓ Branch 115 → 117 taken 364 times.
504 if (m_rows.size() != before)
50
1/1
✓ Branch 116 → 117 taken 140 times.
140 emit countChanged();
51 504 }
52