From d2a3a1324216238cab2c076830255caf8a81dfa7 Mon Sep 17 00:00:00 2001 From: "Dirk-Jan C. Binnema" Date: Sun, 20 Nov 2022 09:28:05 +0200 Subject: [PATCH] query/test: add term splitting unit test For checking issue #2365. --- lib/tests/test-mu-store-query.cc | 43 ++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/lib/tests/test-mu-store-query.cc b/lib/tests/test-mu-store-query.cc index 74a49e4a..cd44bfed 100644 --- a/lib/tests/test-mu-store-query.cc +++ b/lib/tests/test-mu-store-query.cc @@ -625,6 +625,47 @@ test_duplicate_refresh_rename() test_duplicate_refresh_real(true/*rename*/); } +static void +test_term_split() +{ + g_test_bug("2365"); + + // Note the fancy quote in "foo’s bar" + const TestMap test_msgs = {{ + "inbox/new/msg", + { R"(Message-Id: +From: "Foo Example" +Date: Wed, 26 Oct 2022 11:01:54 -0700 +To: example@example.com +Subject: foo’s bar + +Boo! +)"}, + }}; + + TempDir tdir; + auto store{make_test_store(tdir.path(), test_msgs, {})}; + /* true: match; false: no match */ + const auto cases = std::array, 6>{{ + {"subject:foo's", true}, + {"subject:foo*", true}, + {"subject:/foo/", true}, + {"subject:/foo’s/", true}, /* <-- breaks before PR #2365 */ + {"subject:/foo.*bar/", true}, /* <-- breaks before PR #2365 */ + {"subject:/foo’s bar/", false}, /* <-- no matching yet */ + }}; + + for (auto&& test: cases) { + g_debug("query: %s", test.first); + auto qr = store.run_query(test.first); + assert_valid_result(qr); + if (test.second) + g_assert_cmpuint(qr->size(), ==, 1); + else + g_assert_true(qr->empty()); + } +} + int main(int argc, char* argv[]) @@ -646,6 +687,8 @@ main(int argc, char* argv[]) test_duplicate_refresh); g_test_add_func("/store/query/duplicate-refresh-rename", test_duplicate_refresh_rename); + g_test_add_func("/store/query/term-split", + test_term_split); return g_test_run(); }