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: 91.7% 33 / 0 / 36
Functions: 100.0% 3 / 0 / 3
Branches: 60.0% 57 / 0 / 95

presentation/QuickEventMenu.cpp
Line Branch Exec Source
1 #include "QuickEventMenu.h"
2
3 #include <QApplication>
4 #include <QIcon>
5 #include <QMenu>
6 #include <QPointer>
7 #include <QWindow>
8
9 3 bool QuickEventMenu::show(const QString &requester, const QVariantMap &occurrence, QObject *window,
10 qreal sceneX, qreal sceneY, bool writable, bool full) {
11 3 auto *quickWindow = qobject_cast<QWindow *>(window);
12
4/7
✓ Branch 3 → 4 taken 3 times.
✗ Branch 3 → 15 not taken.
✓ Branch 5 → 6 taken 3 times.
✓ Branch 6 → 7 taken 3 times.
✗ Branch 6 → 15 not taken.
✗ Branch 14 → 15 not taken.
✓ Branch 14 → 16 taken 3 times.
6 if (!quickWindow || !qobject_cast<QApplication *>(QCoreApplication::instance()) ||
13
8/24
✓ Branch 11 → 12 taken 3 times.
✓ Branch 12 → 13 taken 3 times.
✓ Branch 17 → 18 taken 3 times.
✗ Branch 17 → 19 not taken.
✓ Branch 19 → 20 taken 3 times.
✗ Branch 19 → 21 not taken.
✓ Branch 21 → 22 taken 3 times.
✗ Branch 21 → 23 not taken.
✓ Branch 23 → 24 taken 3 times.
✗ Branch 23 → 25 not taken.
✓ Branch 25 → 26 taken 3 times.
✗ Branch 25 → 27 not taken.
✗ Branch 27 → 28 not taken.
✓ Branch 27 → 29 taken 3 times.
✗ Branch 202 → 203 not taken.
✗ Branch 202 → 204 not taken.
✗ Branch 206 → 207 not taken.
✗ Branch 206 → 208 not taken.
✗ Branch 210 → 211 not taken.
✗ Branch 210 → 212 not taken.
✗ Branch 214 → 215 not taken.
✗ Branch 214 → 216 not taken.
✗ Branch 218 → 219 not taken.
✗ Branch 218 → 220 not taken.
9 occurrence.value(QStringLiteral("uid")).toString().isEmpty())
14 ✗ return false;
15
3/6
✓ Branch 29 → 30 taken 3 times.
✓ Branch 30 → 31 taken 3 times.
✗ Branch 31 → 32 not taken.
✓ Branch 31 → 33 taken 3 times.
✗ Branch 222 → 223 not taken.
✗ Branch 222 → 224 not taken.
3 auto *menu = new QMenu;
16
1/1
✓ Branch 33 → 34 taken 3 times.
3 menu->setAttribute(Qt::WA_DeleteOnClose);
17
1/1
✓ Branch 37 → 38 taken 3 times.
6 menu->setObjectName(QStringLiteral("nativeEventMenu"));
18
1/1
✓ Branch 40 → 41 taken 3 times.
3 const QPointer<QuickEventMenu> owner(this);
19 25 const auto add = [&](const QString &action, const QString &icon, const QString &label) {
20
2/2
✓ Branch 2 → 3 taken 25 times.
✓ Branch 3 → 4 taken 25 times.
25 auto *entry = menu->addAction(QIcon::fromTheme(icon), label);
21
2/2
✓ Branch 8 → 9 taken 25 times.
✓ Branch 9 → 10 taken 25 times.
50 entry->setObjectName(QStringLiteral("eventMenu-") + action);
22
1/7
✓ Branch 17 → 18 taken 25 times.
✗ Branch 35 → 36 not taken.
✗ Branch 35 → 37 not taken.
✗ Branch 38 → 39 not taken.
✗ Branch 38 → 40 not taken.
✗ Branch 41 → 42 not taken.
✗ Branch 41 → 43 not taken.
25 connect(entry, &QAction::triggered, this, [owner, requester, action, occurrence] {
23
1/2
✓ Branch 3 → 4 taken 2 times.
✗ Branch 3 → 6 not taken.
2 if (owner) emit owner->actionRequested(requester, action, occurrence);
24 2 });
25 25 };
26 // Sprint 107 S107.5.8: a conflicting appointment offers the resolver first.
27
3/4
✓ Branch 45 → 46 taken 3 times.
✓ Branch 46 → 47 taken 3 times.
✗ Branch 51 → 52 not taken.
✓ Branch 51 → 66 taken 3 times.
6 if (occurrence.value(QStringLiteral("conflict")).toBool()) {
28 ✗ add(QStringLiteral("resolve"), QStringLiteral("dialog-warning"), tr("Resolve conflict…"));
29 ✗ menu->addSeparator();
30 }
31
2/2
✓ Branch 66 → 67 taken 2 times.
✓ Branch 66 → 98 taken 1 time.
3 if (full) {
32
3/5
✓ Branch 67 → 68 taken 2 times.
✗ Branch 67 → 69 not taken.
✓ Branch 68 → 70 taken 2 times.
✗ Branch 69 → 70 not taken.
✓ Branch 76 → 77 taken 2 times.
6 add(QStringLiteral("edit"), QStringLiteral("document-edit"), writable ? tr("Edit") : tr("Open"));
33
3/4
✓ Branch 82 → 83 taken 2 times.
✗ Branch 82 → 97 not taken.
✓ Branch 83 → 84 taken 2 times.
✓ Branch 90 → 91 taken 2 times.
6 if (writable) add(QStringLiteral("delete"), QStringLiteral("edit-delete"), tr("Delete"));
34
1/1
✓ Branch 97 → 98 taken 2 times.
2 menu->addSeparator();
35 }
36
1/2
✓ Branch 98 → 99 taken 3 times.
✗ Branch 98 → 126 not taken.
3 if (writable) {
37
2/2
✓ Branch 99 → 100 taken 3 times.
✓ Branch 106 → 107 taken 3 times.
9 add(QStringLiteral("duplicate"), QStringLiteral("edit-copy"), tr("Duplicate"));
38
2/2
✓ Branch 112 → 113 taken 3 times.
✓ Branch 119 → 120 taken 3 times.
9 add(QStringLiteral("move"), QStringLiteral("go-jump"), tr("Move to calendar…"));
39 }
40
2/2
✓ Branch 126 → 127 taken 3 times.
✓ Branch 133 → 134 taken 3 times.
9 add(QStringLiteral("copy"), QStringLiteral("edit-copy"), tr("Copy as text"));
41 // Sprint 103 S103.3.5: a new contact met at this event (interaction.md §5.1).
42
2/2
✓ Branch 139 → 140 taken 3 times.
✓ Branch 146 → 147 taken 3 times.
9 add(QStringLiteral("met"), QStringLiteral("contact-new"), tr("Met someone here…"));
43 // S93.5.3: handled by IcsImportDialog for every requester.
44
2/2
✓ Branch 152 → 153 taken 3 times.
✓ Branch 159 → 160 taken 3 times.
9 add(QStringLiteral("export"), QStringLiteral("document-export"), tr("Export as file…"));
45
2/2
✓ Branch 165 → 166 taken 3 times.
✓ Branch 172 → 173 taken 3 times.
9 add(QStringLiteral("mail"), QStringLiteral("mail-send"), tr("Send by mail…"));
46 // S93.5.6: a new message to everyone invited.
47
2/2
✓ Branch 178 → 179 taken 3 times.
✓ Branch 185 → 186 taken 3 times.
9 add(QStringLiteral("attendees"), QStringLiteral("mail-message-new"), tr("Email attendees…"));
48 // Wayland popups need their transient parent (xdg_popup).
49
1/1
✓ Branch 191 → 192 taken 3 times.
3 menu->winId();
50
3/4
✓ Branch 192 → 193 taken 3 times.
✓ Branch 193 → 194 taken 3 times.
✗ Branch 193 → 195 not taken.
✓ Branch 194 → 195 taken 3 times.
3 if (auto *handle = menu->windowHandle()) handle->setTransientParent(quickWindow);
51
2/2
✓ Branch 196 → 197 taken 3 times.
✓ Branch 198 → 199 taken 3 times.
3 menu->popup(quickWindow->mapToGlobal(QPointF(sceneX, sceneY)).toPoint());
52 3 return true;
53 3 }
54