tests: threads: Test if 1st child message promotes its thread

This commit is contained in:
Jakub Sitnicki 2014-07-15 07:22:11 +02:00
parent 80a484dc3f
commit 22927a7dcf
7 changed files with 113 additions and 3 deletions

View File

@ -0,0 +1,7 @@
From: testfrom@example.com
To: testto@example.com
Subject: A
Message-Id: <A@msg.id>
Date: Sat, 17 May 2014 10:00:00 +0000
A

View File

@ -0,0 +1,7 @@
From: testfrom@example.com
To: testto@example.com
Subject: B
Message-Id: <B@msg.id>
Date: Sat, 17 May 2014 10:00:00 +0000
B

View File

@ -0,0 +1,7 @@
From: testfrom@example.com
To: testto@example.com
Subject: C
Message-Id: <C@msg.id>
Date: Sat, 17 May 2014 10:00:00 +0000
C

View File

@ -0,0 +1,9 @@
From: testfrom@example.com
To: testto@example.com
Subject: D
Message-Id: <D@msg.id>
References: <B@msg.id>
In-reply-to: <B@msg.id>
Date: Sat, 17 May 2014 10:00:00 +0000
D

View File

@ -117,7 +117,8 @@ fill_database (const char *testdir)
/* note: this also *moves the iter* */
static MuMsgIter*
run_and_get_iter (const char *xpath, const char *query)
run_and_get_iter_full (const char *xpath, const char *query,
MuMsgFieldId sort_field, MuQueryFlags flags)
{
MuQuery *mquery;
MuStore *store;
@ -130,14 +131,21 @@ run_and_get_iter (const char *xpath, const char *query)
mu_store_unref (store);
g_assert (query);
iter = mu_query_run (mquery, query, MU_MSG_FIELD_ID_DATE,
-1, MU_QUERY_FLAG_THREADS, NULL);
flags |= MU_QUERY_FLAG_THREADS;
iter = mu_query_run (mquery, query, sort_field, -1, flags, NULL);
mu_query_destroy (mquery);
g_assert (iter);
return iter;
}
static MuMsgIter*
run_and_get_iter (const char *xpath, const char *query)
{
return run_and_get_iter_full (xpath, query, MU_MSG_FIELD_ID_DATE,
MU_QUERY_FLAG_NONE);
}
static void
test_mu_threads_01 (void)
{
@ -216,6 +224,76 @@ test_mu_threads_rogue (void)
mu_msg_iter_destroy (iter);
}
static MuMsgIter*
query_testdir (const char *query, MuMsgFieldId sort_field, gboolean descending)
{
MuMsgIter *iter;
gchar *xpath;
MuQueryFlags flags;
flags = MU_QUERY_FLAG_NONE;
if (descending)
flags |= MU_QUERY_FLAG_DESCENDING;
xpath = fill_database (MU_TESTMAILDIR3);
g_assert (xpath != NULL);
iter = run_and_get_iter_full (xpath, query, sort_field, flags);
g_assert (iter != NULL);
g_assert (!mu_msg_iter_is_done (iter));
g_free (xpath);
return iter;
}
static void
check_sort_by_subject (const char *query, const tinfo expected[],
guint n_expected, gboolean descending)
{
MuMsgIter *iter;
iter = query_testdir (query, MU_MSG_FIELD_ID_SUBJECT, descending);
foreach_assert_tinfo_equal (iter, expected, n_expected);
mu_msg_iter_destroy (iter);
}
static void
check_sort_by_subject_asc (const char *query, const tinfo expected[],
guint n_expected)
{
check_sort_by_subject (query, expected, n_expected, FALSE);
}
static void
check_sort_by_subject_desc (const char *query, const tinfo expected[],
guint n_expected)
{
check_sort_by_subject (query, expected, n_expected, TRUE);
}
static void
test_mu_threads_sort_1st_child_promotes_thread (void)
{
const char *query = "maildir:/sort/1st-child-promotes-thread";
const tinfo expected_asc [] = {
{ "0", "A@msg.id", "A"},
{ "1", "C@msg.id", "C"},
{ "2", "B@msg.id", "B"},
{ "2:0", "D@msg.id", "D"},
};
const tinfo expected_desc [] = {
{ "0", "B@msg.id", "B"},
{ "0:0", "D@msg.id", "D"},
{ "1", "C@msg.id", "C"},
{ "2", "A@msg.id", "A"},
};
check_sort_by_subject_asc (query, expected_asc,
G_N_ELEMENTS (expected_asc));
check_sort_by_subject_desc (query, expected_desc,
G_N_ELEMENTS (expected_desc));
}
int
@ -227,6 +305,8 @@ main (int argc, char *argv[])
g_test_add_func ("/mu-query/test-mu-threads-01", test_mu_threads_01);
g_test_add_func ("/mu-query/test-mu-threads-rogue", test_mu_threads_rogue);
g_test_add_func ("/mu-query/test-mu-threads-sort-1st-child-promotes-thread",
test_mu_threads_sort_1st_child_promotes_thread);
g_log_set_handler (NULL,
G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL| G_LOG_FLAG_RECURSION,