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: 94.9% 37 / 0 / 39
Functions: 100.0% 1 / 0 / 1
Branches: 85.9% 73 / 0 / 85

presentation/CalendarBirthdayLayer.cpp
Line Branch Exec Source
1 #include "CalendarBirthdayLayer.h"
2
3 #include "data/ContactModels.h"
4 #include "data/ContactQueries.h"
5 #include "data/ContactStore.h"
6 #include "ui/ThemeManager.h"
7
8 #include <QCoreApplication>
9 #include <QSqlQuery>
10 #include <QTimeZone>
11
12 namespace CalendarBirthdayLayer {
13
14 1315 QVector<CalendarOccurrence> occurrences(const QString &contactsDatabase, const QDate &start, const QDate &end) {
15 1315 QVector<CalendarOccurrence> result;
16
1/1
✓ Branch 2 → 3 taken 1315 times.
1315 ContactStore store;
17
6/7
✓ Branch 4 → 5 taken 2 times.
✓ Branch 4 → 7 taken 1313 times.
✓ Branch 5 → 6 taken 2 times.
✗ Branch 6 → 7 not taken.
✓ Branch 6 → 8 taken 2 times.
✓ Branch 9 → 10 taken 1313 times.
✓ Branch 9 → 11 taken 2 times.
1315 if (contactsDatabase.isEmpty() || !store.open(contactsDatabase))
18 1313 return result;
19
2/2
✓ Branch 11 → 12 taken 2 times.
✓ Branch 12 → 13 taken 2 times.
2 QSqlQuery q(store.database());
20
2/3
✓ Branch 17 → 18 taken 2 times.
✗ Branch 20 → 21 not taken.
✓ Branch 20 → 22 taken 2 times.
2 if (!q.exec(QStringLiteral("SELECT c.book_id, c.uid, c.display_name, c.birthday FROM cards c "
21 "JOIN address_books b ON b.id = c.book_id "
22 "WHERE c.birthday <> '' AND c.kind <> 'group' AND b.show_in_all = 1")))
23 ✗ return result;
24
1/1
✓ Branch 22 → 23 taken 2 times.
2 const QString calendarName = QCoreApplication::translate("CalendarBirthdayLayer", "Birthdays");
25
3/3
✓ Branch 128 → 129 taken 6 times.
✓ Branch 129 → 24 taken 4 times.
✓ Branch 129 → 130 taken 2 times.
6 while (q.next()) {
26
3/3
✓ Branch 24 → 25 taken 4 times.
✓ Branch 25 → 26 taken 4 times.
✓ Branch 26 → 27 taken 4 times.
4 const PartialDate birthday = PartialDate::fromIso(q.value(3).toString());
27
1/2
✗ Branch 30 → 31 not taken.
✓ Branch 30 → 32 taken 4 times.
4 if (!birthday.isValid())
28 ✗ continue;
29
2/2
✓ Branch 32 → 33 taken 4 times.
✓ Branch 33 → 34 taken 4 times.
4 const QString name = q.value(2).toString();
30
4/4
✓ Branch 35 → 36 taken 4 times.
✓ Branch 124 → 125 taken 8 times.
✓ Branch 125 → 37 taken 4 times.
✓ Branch 125 → 126 taken 4 times.
8 for (int year = start.year(); year <= end.year(); ++year) {
31 4 int day = birthday.day;
32
8/9
✓ Branch 37 → 38 taken 2 times.
✓ Branch 37 → 42 taken 2 times.
✓ Branch 38 → 39 taken 2 times.
✗ Branch 38 → 42 not taken.
✓ Branch 39 → 40 taken 2 times.
✓ Branch 40 → 41 taken 1 time.
✓ Branch 40 → 42 taken 1 time.
✓ Branch 43 → 44 taken 1 time.
✓ Branch 43 → 45 taken 3 times.
4 if (birthday.month == 2 && day == 29 && !QDate::isLeapYear(year))
33 1 day = 28;
34
1/1
✓ Branch 45 → 46 taken 4 times.
4 const QDate date(year, birthday.month, day);
35
11/13
✓ Branch 46 → 47 taken 4 times.
✓ Branch 47 → 48 taken 4 times.
✗ Branch 47 → 57 not taken.
✓ Branch 50 → 51 taken 3 times.
✓ Branch 50 → 57 taken 1 time.
✓ Branch 53 → 54 taken 3 times.
✗ Branch 53 → 57 not taken.
✓ Branch 55 → 56 taken 2 times.
✓ Branch 55 → 58 taken 1 time.
✓ Branch 56 → 57 taken 1 time.
✓ Branch 56 → 58 taken 1 time.
✓ Branch 59 → 60 taken 2 times.
✓ Branch 59 → 61 taken 2 times.
4 if (!date.isValid() || date < start || date > end || (birthday.hasYear() && year < birthday.year))
36 2 continue;
37
1/1
✓ Branch 61 → 62 taken 2 times.
2 CalendarOccurrence occurrence;
38
6/6
✓ Branch 62 → 63 taken 2 times.
✓ Branch 63 → 64 taken 2 times.
✓ Branch 64 → 65 taken 2 times.
✓ Branch 65 → 66 taken 2 times.
✓ Branch 66 → 67 taken 2 times.
✓ Branch 70 → 71 taken 2 times.
4 occurrence.uid = QStringLiteral("birthday:") + ContactQueries::cardKey(q.value(0).toLongLong(), q.value(1).toString());
39
1/1
✓ Branch 80 → 81 taken 2 times.
2 occurrence.calendarPath = QLatin1String(CalendarPath);
40 2 occurrence.calendarName = calendarName;
41
1/1
✓ Branch 82 → 83 taken 2 times.
2 occurrence.color = ThemeManager::birthdayLayerColor();
42
10/16
✓ Branch 86 → 87 taken 1 time.
✓ Branch 86 → 94 taken 1 time.
✓ Branch 91 → 92 taken 1 time.
✓ Branch 93 → 95 taken 1 time.
✓ Branch 97 → 98 taken 1 time.
✓ Branch 97 → 99 taken 1 time.
✓ Branch 99 → 100 taken 1 time.
✓ Branch 99 → 101 taken 1 time.
✓ Branch 101 → 102 taken 1 time.
✓ Branch 101 → 103 taken 1 time.
✗ Branch 175 → 176 not taken.
✗ Branch 175 → 177 not taken.
✗ Branch 180 → 181 not taken.
✗ Branch 180 → 182 not taken.
✗ Branch 184 → 185 not taken.
✗ Branch 184 → 186 not taken.
3 occurrence.summary = birthday.hasYear() ? QStringLiteral("%1 (%2)").arg(name).arg(year - birthday.year) : name;
43 2 occurrence.readOnly = true;
44 2 occurrence.allDay = true;
45 2 occurrence.recurring = true;
46
2/2
✓ Branch 103 → 104 taken 2 times.
✓ Branch 104 → 105 taken 2 times.
2 occurrence.start = QDateTime(date, QTime(0, 0));
47
3/3
✓ Branch 107 → 108 taken 2 times.
✓ Branch 108 → 109 taken 2 times.
✓ Branch 109 → 110 taken 2 times.
2 occurrence.end = QDateTime(date.addDays(1), QTime(0, 0));
48 2 occurrence.firstDay = occurrence.lastDay = date;
49
3/3
✓ Branch 113 → 114 taken 2 times.
✓ Branch 114 → 115 taken 2 times.
✓ Branch 115 → 116 taken 2 times.
2 occurrence.startIso = QDateTime(date, QTime(0, 0), QTimeZone::UTC).toString(Qt::ISODate);
50
1/1
✓ Branch 120 → 121 taken 2 times.
2 result.append(occurrence);
51 2 }
52 4 }
53 2 return result;
54 1315 }
55
56 } // namespace CalendarBirthdayLayer
57