data/ComposeDraftHeader.cpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #include "ComposeDraftHeader.h" | ||
| 2 | |||
| 3 | #include <QStringList> | ||
| 4 | |||
| 5 | namespace { | ||
| 6 | |||
| 7 | 11 | bool validId(const QString &value) { | |
| 8 |
5/6✓ Branch 3 → 4 taken 11 times.
✗ Branch 3 → 6 not taken.
✓ Branch 5 → 6 taken 1 time.
✓ Branch 5 → 7 taken 10 times.
✓ Branch 8 → 9 taken 1 time.
✓ Branch 8 → 10 taken 10 times.
|
11 | if (value.isEmpty() || value.size() > 64) return false; |
| 9 |
2/2✓ Branch 25 → 12 taken 72 times.
✓ Branch 25 → 26 taken 7 times.
|
79 | for (const QChar character : value) |
| 10 |
8/8✓ Branch 13 → 14 taken 62 times.
✓ Branch 13 → 16 taken 10 times.
✓ Branch 15 → 16 taken 1 time.
✓ Branch 15 → 21 taken 61 times.
✓ Branch 19 → 20 taken 3 times.
✓ Branch 19 → 21 taken 8 times.
✓ Branch 22 → 23 taken 3 times.
✓ Branch 22 → 24 taken 69 times.
|
72 | if (!(character.isLetterOrNumber() && character.unicode() < 0x80) && character != QLatin1Char('-')) return false; |
| 11 | 7 | return true; | |
| 12 | } | ||
| 13 | |||
| 14 | } // namespace | ||
| 15 | |||
| 16 | 13 | std::optional<ComposeDraftHeader> ComposeDraftHeader::parse(const QString &value) { | |
| 17 |
2/2✓ Branch 3 → 4 taken 1 time.
✓ Branch 3 → 5 taken 12 times.
|
13 | if (value.size() > MaxLength) return std::nullopt; |
| 18 | 12 | ComposeDraftHeader header; | |
| 19 | 12 | bool version = false; | |
| 20 |
5/5✓ Branch 8 → 9 taken 12 times.
✓ Branch 9 → 10 taken 12 times.
✓ Branch 10 → 11 taken 12 times.
✓ Branch 96 → 12 taken 29 times.
✓ Branch 96 → 97 taken 5 times.
|
34 | for (const QString &raw : value.split(QLatin1Char(';'))) { |
| 21 |
1/1✓ Branch 13 → 14 taken 29 times.
|
29 | const QString part = raw.trimmed(); |
| 22 |
1/2✗ Branch 15 → 16 not taken.
✓ Branch 15 → 17 taken 29 times.
|
29 | if (part.isEmpty()) continue; |
| 23 | 29 | const qsizetype equals = part.indexOf(QLatin1Char('=')); | |
| 24 |
2/2✓ Branch 20 → 21 taken 1 time.
✓ Branch 20 → 23 taken 28 times.
|
29 | if (equals <= 0) return std::nullopt; |
| 25 |
3/3✓ Branch 23 → 24 taken 28 times.
✓ Branch 24 → 25 taken 28 times.
✓ Branch 25 → 26 taken 28 times.
|
28 | const QString key = part.left(equals).trimmed().toLower(); |
| 26 |
2/2✓ Branch 28 → 29 taken 28 times.
✓ Branch 29 → 30 taken 28 times.
|
28 | const QString text = part.mid(equals + 1).trimmed(); |
| 27 |
2/2✓ Branch 33 → 34 taken 11 times.
✓ Branch 33 → 40 taken 17 times.
|
28 | if (key == QLatin1String("v")) { |
| 28 |
2/2✓ Branch 36 → 37 taken 1 time.
✓ Branch 36 → 39 taken 10 times.
|
11 | if (text != QLatin1String("1")) return std::nullopt; |
| 29 | 10 | version = true; | |
| 30 |
6/6✓ Branch 42 → 43 taken 13 times.
✓ Branch 42 → 46 taken 4 times.
✓ Branch 45 → 46 taken 7 times.
✓ Branch 45 → 47 taken 6 times.
✓ Branch 48 → 49 taken 11 times.
✓ Branch 48 → 64 taken 6 times.
|
17 | } else if (key == QLatin1String("session") || key == QLatin1String("identity")) { |
| 31 |
5/6✓ Branch 50 → 51 taken 11 times.
✗ Branch 50 → 54 not taken.
✓ Branch 52 → 53 taken 4 times.
✓ Branch 52 → 54 taken 7 times.
✓ Branch 55 → 56 taken 4 times.
✓ Branch 55 → 58 taken 7 times.
|
11 | if (!text.isEmpty() && !validId(text)) return std::nullopt; |
| 32 |
2/2✓ Branch 60 → 61 taken 3 times.
✓ Branch 60 → 62 taken 4 times.
|
7 | (key == QLatin1String("session") ? header.session : header.identity) = text; |
| 33 |
2/2✓ Branch 66 → 67 taken 5 times.
✓ Branch 66 → 79 taken 1 time.
|
6 | } else if (key == QLatin1String("format")) { |
| 34 |
2/2✓ Branch 69 → 70 taken 1 time.
✓ Branch 69 → 72 taken 4 times.
|
5 | if (text == QLatin1String("formatted")) header.formatted = true; |
| 35 |
2/2✓ Branch 74 → 75 taken 3 times.
✓ Branch 74 → 77 taken 1 time.
|
4 | else if (text == QLatin1String("plain")) header.formatted = false; |
| 36 | 1 | else return std::nullopt; | |
| 37 | } | ||
| 38 | 53 | } | |
| 39 |
2/2✓ Branch 101 → 103 taken 1 time.
✓ Branch 101 → 104 taken 4 times.
|
5 | if (!version) return std::nullopt; |
| 40 | 4 | return header; | |
| 41 | 12 | } | |
| 42 | |||
| 43 | 78 | QString ComposeDraftHeader::toString() const { | |
| 44 |
1/1✓ Branch 5 → 6 taken 78 times.
|
78 | QString out = QStringLiteral("v=1; session=%1; identity=%2").arg(session, identity); |
| 45 |
8/13✓ Branch 9 → 10 taken 78 times.
✗ Branch 9 → 25 not taken.
✓ Branch 11 → 12 taken 10 times.
✓ Branch 11 → 15 taken 68 times.
✓ Branch 18 → 19 taken 78 times.
✓ Branch 20 → 21 taken 68 times.
✓ Branch 20 → 22 taken 10 times.
✓ Branch 22 → 23 taken 10 times.
✓ Branch 22 → 24 taken 68 times.
✗ Branch 35 → 36 not taken.
✗ Branch 35 → 37 not taken.
✗ Branch 39 → 40 not taken.
✗ Branch 39 → 41 not taken.
|
156 | if (formatted) out += *formatted ? QStringLiteral("; format=formatted") : QStringLiteral("; format=plain"); |
| 46 | 78 | return out; | |
| 47 | ✗ | } | |
| 48 |