diff options
| author | Danilo M. <danix@danix.xyz> | 2026-08-24 21:05:45 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-08-24 21:05:45 +0200 |
| commit | 9b8a6da4ff39428ce22dc23e16fc48cc062bc01f (patch) | |
| tree | 405b50f818b920c86d7ef0ca470b0e545be218b2 /tests/test_signatures.cpp | |
| parent | 882bb1b36fd777ec5fd5f331f2d589d48b5af5c1 (diff) | |
| download | qtmaildir-9b8a6da4ff39428ce22dc23e16fc48cc062bc01f.tar.gz qtmaildir-9b8a6da4ff39428ce22dc23e16fc48cc062bc01f.zip | |
fix(signatures): match the guard against on-disk text, newline and all
The guard compared the buffer block, with trailing blank lines trimmed,
against knownSignatures() values returned verbatim by text(), which carry
the trailing newline every editor writes. The two never compared equal, so
a signature read back from disk was always treated as unknown: switching
appended a second signature instead of replacing, and None removed nothing.
Normalise each known entry the same way the block scan does, once in
replace(), rather than per comparison.
Part of item 152.
Diffstat (limited to 'tests/test_signatures.cpp')
| -rw-r--r-- | tests/test_signatures.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/tests/test_signatures.cpp b/tests/test_signatures.cpp index 31f9eb4..47b404b 100644 --- a/tests/test_signatures.cpp +++ b/tests/test_signatures.cpp @@ -40,6 +40,7 @@ private slots: void selectingNoneRemovesAKnownSignature(); void aBlockMatchingNoKnownSignatureIsNotRemoved(); void aDelimiterInsideTheQuoteIsNotTheSignature(); + void aSignatureReadBackFromDiskIsReplaced(); private: /// Writes \p files as name -> content into a fresh temporary directory. @@ -273,5 +274,21 @@ void TestSignatures::aDelimiterInsideTheQuoteIsNotTheSignature() QVERIFY(result.endsWith(QStringLiteral("-- \nJane Doe"))); } +void TestSignatures::aSignatureReadBackFromDiskIsReplaced() +{ + // known here is what knownSignatures() produces: text() verbatim, carrying + // the trailing newline every editor writes into a file. The block scan + // treats a trailing blank line as separation rather than text, so a naive + // match compares "Jane Doe" against "Jane Doe\n" and silently fails, and + // switching then APPENDS a second signature instead of replacing the first. + const QStringList known = { QStringLiteral("Jane Doe\n") }; + const QString buffer = QStringLiteral("Hello.\n\n-- \nJane Doe\n"); + + const QString result = Signatures::replace( + buffer, QStringLiteral("Brief"), known, Signatures::Position::End); + + QCOMPARE(result, QStringLiteral("Hello.\n\n-- \nBrief")); +} + QTEST_MAIN(TestSignatures) #include "test_signatures.moc" |
