aboutsummaryrefslogtreecommitdiffstats
path: root/tests/test_querycompleter.cpp
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-08-03 20:43:37 +0200
committerDanilo M. <danix@danix.xyz>2026-08-04 12:54:08 +0200
commit3a3220471d2b10811e77fe942a6c58f53df316b0 (patch)
tree517722ddb6051a393c532c5b5a5e30ec4f5adcc3 /tests/test_querycompleter.cpp
parentf6f11e5142911f0c4a57b08d6425d1cf99187627 (diff)
downloadqtmaildir-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.cpp42
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"