diff options
| author | Danilo M. <danix@danix.xyz> | 2026-08-03 20:43:37 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-08-04 12:54:08 +0200 |
| commit | 3a3220471d2b10811e77fe942a6c58f53df316b0 (patch) | |
| tree | 517722ddb6051a393c532c5b5a5e30ec4f5adcc3 /tests/test_querycompleter.cpp | |
| parent | f6f11e5142911f0c4a57b08d6425d1cf99187627 (diff) | |
| download | qtmaildir-3a3220471d2b10811e77fe942a6c58f53df316b0.tar.gz qtmaildir-3a3220471d2b10811e77fe942a6c58f53df316b0.zip | |
feat(completion): complete both bounds of a date range
Each side of '..' is an independent value against the same model. Entries
that are themselves ranges are withheld once a range exists, since
date:1week....today is malformed.
The token is read to its full extent rather than truncated at the caret:
the separator deciding which bound is being edited can sit to the right
of the caret. Stems stay caret-bounded so matching never uses untyped
text.
Diffstat (limited to 'tests/test_querycompleter.cpp')
| -rw-r--r-- | tests/test_querycompleter.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/tests/test_querycompleter.cpp b/tests/test_querycompleter.cpp index c86edac..1d06f4b 100644 --- a/tests/test_querycompleter.cpp +++ b/tests/test_querycompleter.cpp @@ -35,6 +35,10 @@ private slots: void emptyValueAfterColonStillCompletes(); void insideQuotesCompletesNothing(); void afterClosedQuotesCompletesAgain(); + void rangeUpperBoundCompletes(); + void rangeLowerBoundCompletes(); + void bareValueAllowsRelativeEntries(); + void rangeSuppressesRelativeEntries(); }; void TestQueryCompleter::emptyTextCompletesPrefix() @@ -121,5 +125,43 @@ void TestQueryCompleter::afterClosedQuotesCompletesAgain() QCOMPARE(ctx.stem, QStringLiteral("ta")); } +void TestQueryCompleter::rangeUpperBoundCompletes() +{ + const QString text = QStringLiteral("date:today..yes"); + const CompletionContext ctx = completionContext(text, text.size()); + QCOMPARE(ctx.kind, CompletionContext::Value); + QCOMPARE(ctx.prefix, QStringLiteral("date")); + QCOMPARE(ctx.stem, QStringLiteral("yes")); + // Overwrites "yes" only: "date:today.." must survive. + QCOMPARE(ctx.replaceFrom, 12); + QCOMPARE(ctx.replaceLength, 3); +} + +void TestQueryCompleter::rangeLowerBoundCompletes() +{ + // Cursor sits at offset 8, before the "..". + const QString text = QStringLiteral("date:las..today"); + const CompletionContext ctx = completionContext(text, 8); + QCOMPARE(ctx.kind, CompletionContext::Value); + QCOMPARE(ctx.stem, QStringLiteral("las")); + QCOMPARE(ctx.replaceFrom, 5); + QCOMPARE(ctx.replaceLength, 3); +} + +void TestQueryCompleter::bareValueAllowsRelativeEntries() +{ + const QString text = QStringLiteral("date:1w"); + const CompletionContext ctx = completionContext(text, text.size()); + QVERIFY(ctx.allowRangeEntries); +} + +void TestQueryCompleter::rangeSuppressesRelativeEntries() +{ + // "1week.." offered here would produce date:1week....today. + const QString text = QStringLiteral("date:1w..today"); + const CompletionContext ctx = completionContext(text, 7); + QVERIFY(!ctx.allowRangeEntries); +} + QTEST_MAIN(TestQueryCompleter) #include "test_querycompleter.moc" |
