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.4% 53 / 0 / 55
Functions: 100.0% 5 / 0 / 5
Branches: 87.1% 54 / 0 / 62

presentation/QuickContactLookup.cpp
Line Branch Exec Source
1 #include "QuickContactLookup.h"
2
3 #include "QuickContactModel.h"
4 #include "app/core/ContactSyncCoordinator.h"
5 #include "data/ContactIndex.h"
6 #include "data/ContactQueries.h"
7 #include "data/ContactStore.h"
8 #include "data/MailAddressList.h"
9
10 #include <QRegularExpression>
11
12 namespace {
13
14 1201 QString initialsOf(const QString &label) {
15
1/1
✓ Branch 2 → 3 taken 1201 times.
1201 ContactCard card;
16 1201 card.formattedName = label;
17
1/1
✓ Branch 4 → 5 taken 1201 times.
2402 return ContactIndex::initials(card);
18 1201 }
19
20 } // namespace
21
22 795 QuickContactLookup::QuickContactLookup(CoordinatorProvider coordinator, QuickContactModel &model, QObject *parent)
23 795 : QObject(parent), m_coordinator(std::move(coordinator)), m_model(model) {}
24
25 45 void QuickContactLookup::invalidate() {
26 45 m_cache.clear();
27 45 ++m_revision;
28 45 emit changed();
29 45 }
30
31 1201 QVariantMap QuickContactLookup::person(const QString &name, const QString &address) {
32 2402 QVariantMap entry{{QStringLiteral("name"), name},
33 2402 {QStringLiteral("address"), address},
34 2402 {QStringLiteral("label"), name.isEmpty() ? address : name},
35 2402 {QStringLiteral("known"), false},
36 2402 {QStringLiteral("collected"), false},
37 2402 {QStringLiteral("displayName"), name.isEmpty() ? address : name},
38
3/3
✓ Branch 38 → 39 taken 940 times.
✓ Branch 38 → 40 taken 261 times.
✓ Branch 41 → 42 taken 1201 times.
2402 {QStringLiteral("initials"), initialsOf(name.isEmpty() ? address : name)},
39
2/2
✓ Branch 46 → 47 taken 1201 times.
✓ Branch 47 → 48 taken 1201 times.
2402 {QStringLiteral("avatarColor"), ContactIndex::avatarColorIndex(address.toLower())},
40
2/4
✓ Branch 55 → 56 taken 10809 times.
✓ Branch 55 → 57 taken 1201 times.
✗ Branch 255 → 256 not taken.
✗ Branch 255 → 257 not taken.
14412 {QStringLiteral("hasPhoto"), false}};
41
1/1
✓ Branch 77 → 78 taken 1201 times.
1201 ContactSyncCoordinator *sync = m_coordinator();
42
4/7
✓ Branch 78 → 79 taken 1201 times.
✗ Branch 78 → 82 not taken.
✓ Branch 80 → 81 taken 1201 times.
✗ Branch 81 → 82 not taken.
✓ Branch 81 → 83 taken 1201 times.
✗ Branch 84 → 85 not taken.
✓ Branch 84 → 86 taken 1201 times.
1201 if (!sync || !sync->store()->isOpen())
43 ✗ return entry;
44
2/2
✓ Branch 87 → 88 taken 1201 times.
✓ Branch 88 → 89 taken 1201 times.
1201 const ContactQueries::Lookup found = ContactQueries::lookup(sync->store()->database(), address);
45
1/1
✓ Branch 94 → 95 taken 1201 times.
2402 entry.insert(QStringLiteral("collected"), found.collected);
46
2/2
✓ Branch 98 → 99 taken 1168 times.
✓ Branch 98 → 100 taken 33 times.
1201 if (!found.known)
47 1168 return entry;
48
1/1
✓ Branch 100 → 101 taken 33 times.
33 const QVariantMap card = m_model.card(found.key);
49
1/1
✓ Branch 105 → 106 taken 33 times.
66 const QStringList subtitle{card.value(QStringLiteral("title")).toString(),
50
3/5
✓ Branch 111 → 112 taken 33 times.
✓ Branch 115 → 116 taken 66 times.
✓ Branch 115 → 117 taken 33 times.
✗ Branch 341 → 342 not taken.
✗ Branch 341 → 343 not taken.
132 card.value(QStringLiteral("organization")).toString()};
51
1/1
✓ Branch 129 → 130 taken 33 times.
66 entry.insert(QStringLiteral("known"), true);
52
1/1
✓ Branch 137 → 138 taken 33 times.
66 entry.insert(QStringLiteral("key"), found.key);
53
4/4
✓ Branch 142 → 143 taken 22 times.
✓ Branch 142 → 144 taken 11 times.
✓ Branch 143 → 145 taken 22 times.
✓ Branch 149 → 150 taken 33 times.
66 entry.insert(QStringLiteral("bookName"), found.bookName.isEmpty() ? tr("On this computer") : found.bookName);
54
1/1
✓ Branch 158 → 159 taken 33 times.
66 entry.insert(QStringLiteral("displayName"), found.displayName);
55
4/4
✓ Branch 167 → 168 taken 33 times.
✓ Branch 168 → 169 taken 33 times.
✓ Branch 172 → 173 taken 33 times.
✓ Branch 177 → 178 taken 33 times.
165 entry.insert(QStringLiteral("subtitle"), QStringList(subtitle).filter(QRegularExpression(QStringLiteral("\\S"))).join(
56 66 QStringLiteral(" · ")));
57
2/2
✓ Branch 193 → 194 taken 33 times.
✓ Branch 197 → 198 taken 33 times.
99 entry.insert(QStringLiteral("initials"), card.value(QStringLiteral("initials")));
58
2/2
✓ Branch 208 → 209 taken 33 times.
✓ Branch 212 → 213 taken 33 times.
99 entry.insert(QStringLiteral("avatarColor"), card.value(QStringLiteral("avatarColor")));
59
2/2
✓ Branch 223 → 224 taken 33 times.
✓ Branch 227 → 228 taken 33 times.
99 entry.insert(QStringLiteral("hasPhoto"), card.value(QStringLiteral("hasPhoto")));
60
2/2
✓ Branch 238 → 239 taken 33 times.
✓ Branch 242 → 243 taken 33 times.
99 entry.insert(QStringLiteral("photoTag"), card.value(QStringLiteral("photoTag")));
61 33 return entry;
62 16913 }
63
64 6213 QVariantList QuickContactLookup::people(const QString &header) {
65
2/2
✓ Branch 5 → 6 taken 4203 times.
✓ Branch 5 → 8 taken 2010 times.
6213 if (const auto cached = m_cache.constFind(header); cached != m_cache.cend())
66 4203 return *cached;
67 2010 QVariantList result;
68
5/5
✓ Branch 8 → 10 taken 2010 times.
✓ Branch 10 → 11 taken 2010 times.
✓ Branch 11 → 12 taken 2010 times.
✓ Branch 21 → 13 taken 1201 times.
✓ Branch 21 → 22 taken 2010 times.
3211 for (const MailAddressList::Mailbox &mailbox : MailAddressList::parse(header))
69
2/2
✓ Branch 14 → 15 taken 1201 times.
✓ Branch 16 → 17 taken 1201 times.
3211 result.append(person(mailbox.name, mailbox.address));
70
1/2
✗ Branch 24 → 25 not taken.
✓ Branch 24 → 26 taken 2010 times.
2010 if (m_cache.size() > 200)
71 ✗ m_cache.clear();
72
1/1
✓ Branch 26 → 27 taken 2010 times.
2010 m_cache.insert(header, result);
73 2010 return result;
74 2010 }
75