aboutsummaryrefslogtreecommitdiffstats
path: root/camel/tests/folder
diff options
context:
space:
mode:
Diffstat (limited to 'camel/tests/folder')
-rw-r--r--camel/tests/folder/Makefile.am23
-rw-r--r--camel/tests/folder/README4
-rw-r--r--camel/tests/folder/test1.c149
-rw-r--r--camel/tests/folder/test2.c241
-rw-r--r--camel/tests/folder/test3.c290
5 files changed, 707 insertions, 0 deletions
diff --git a/camel/tests/folder/Makefile.am b/camel/tests/folder/Makefile.am
new file mode 100644
index 0000000000..a036db99e5
--- /dev/null
+++ b/camel/tests/folder/Makefile.am
@@ -0,0 +1,23 @@
+
+INCLUDES = -I$(top_srcdir)/intl -I$(top_srcdir) -I$(top_srcdir)/camel \
+ -I$(includedir) \
+ -I$(top_srcdir)/camel/tests/lib \
+ -DG_LOG_DOMAIN=\"evolution-tests\"
+
+LDADD = \
+ $(top_builddir)/camel/libcamel.la \
+ $(top_builddir)/e-util/libeutil.la \
+ $(top_builddir)/libibex/libibex.la \
+ $(GNOME_LIBDIR) \
+ $(top_builddir)/camel/tests/lib/libcameltest.a \
+ $(GNOMEUI_LIBS) $(INTLLIBS) $(EXTRA_GNOME_LIBS)
+
+check_PROGRAMS = \
+ test1 \
+ test2
+# test3
+
+#TESTS = test1
+
+
+
diff --git a/camel/tests/folder/README b/camel/tests/folder/README
new file mode 100644
index 0000000000..994c4cdec4
--- /dev/null
+++ b/camel/tests/folder/README
@@ -0,0 +1,4 @@
+
+test1 camel store folder operations (local only)
+test2 basic folder operations
+test3 folder searching and indexing
diff --git a/camel/tests/folder/test1.c b/camel/tests/folder/test1.c
new file mode 100644
index 0000000000..020c511a82
--- /dev/null
+++ b/camel/tests/folder/test1.c
@@ -0,0 +1,149 @@
+/* store testing */
+
+#include "camel-test.h"
+
+#include <camel/camel-exception.h>
+#include <camel/camel-service.h>
+#include <camel/camel-session.h>
+#include <camel/camel-store.h>
+
+/* god, who designed this horrid interface */
+static char *auth_callback(CamelAuthCallbackMode mode,
+ char *data, gboolean secret,
+ CamelService *service, char *item,
+ CamelException *ex)
+{
+ return NULL;
+}
+
+#define ARRAY_LEN(x) (sizeof(x)/sizeof(x[0]))
+
+static char *local_providers[] = {
+ "mbox",
+ "mh",
+ "maildir"
+};
+
+int main(int argc, char **argv)
+{
+ CamelSession *session;
+ CamelStore *store;
+ CamelException *ex;
+ CamelFolder *folder, *root;
+ int i;
+ char *path;
+
+ ex = camel_exception_new();
+
+ camel_test_init(argc, argv);
+
+ session = camel_session_new("/tmp/camel-test", auth_callback, NULL, NULL);
+
+ /* todo: cross-check everything with folder_info checks as well */
+ /* todo: subscriptions? */
+ /* todo: work out how to do imap/pop/nntp tests */
+ for (i=0;i<ARRAY_LEN(local_providers);i++) {
+ char *what = g_strdup_printf("testing local store: %s", local_providers[i]);
+
+ camel_test_start(what);
+ g_free(what);
+
+ push("getting store");
+ path = g_strdup_printf("%s:///tmp/camel-test/%s", local_providers[i], local_providers[i]);
+ store = camel_session_get_store(session, path, ex);
+ check_msg(!camel_exception_is_set(ex), "getting store: %s", camel_exception_get_description(ex));
+ check(store != NULL);
+ pull();
+
+ /* local providers == no root folder */
+ push("getting root folder");
+ root = camel_store_get_root_folder(store, ex);
+ check(camel_exception_is_set(ex));
+ check(root == NULL);
+ camel_exception_clear(ex);
+ pull();
+
+ /* same for default folder */
+ push("getting default folder");
+ root = camel_store_get_root_folder(store, ex);
+ check(camel_exception_is_set(ex));
+ check(root == NULL);
+ camel_exception_clear(ex);
+ pull();
+
+ push("getting a non-existant folder, no create");
+ folder = camel_store_get_folder(store, "unknown", 0, ex);
+ check(camel_exception_is_set(ex));
+ check(folder == NULL);
+ camel_exception_clear(ex);
+ pull();
+
+ push("getting a non-existant folder, with create");
+ folder = camel_store_get_folder(store, "testbox", CAMEL_STORE_FOLDER_CREATE, ex);
+ check_msg(!camel_exception_is_set(ex), "%s", camel_exception_get_description(ex));
+ check(folder != NULL);
+ camel_object_unref((CamelObject *)folder);
+ pull();
+
+ push("getting an existing folder");
+ folder = camel_store_get_folder(store, "testbox", 0, ex);
+ check_msg(!camel_exception_is_set(ex), "%s", camel_exception_get_description(ex));
+ check(folder != NULL);
+ camel_object_unref((CamelObject *)folder);
+ pull();
+
+ push("renaming a non-existant folder");
+ camel_store_rename_folder(store, "unknown1", "unknown2", ex);
+ check(camel_exception_is_set(ex));
+ camel_exception_clear(ex);
+ pull();
+
+ push("renaming an existing folder");
+ camel_store_rename_folder(store, "testbox", "testbox2", ex);
+ check_msg(!camel_exception_is_set(ex), "%s", camel_exception_get_description(ex));
+ pull();
+
+ push("opening the old name of a renamed folder");
+ folder = camel_store_get_folder(store, "testbox", 0, ex);
+ check(camel_exception_is_set(ex));
+ check(folder == NULL);
+ camel_exception_clear(ex);
+ pull();
+
+ push("opening the new name of a renamed folder");
+ folder = camel_store_get_folder(store, "testbox2", 0, ex);
+ check_msg(!camel_exception_is_set(ex), "%s", camel_exception_get_description(ex));
+ check(folder != NULL);
+ camel_object_unref((CamelObject *)folder);
+ pull();
+
+ push("deleting a non-existant folder");
+ camel_store_delete_folder(store, "unknown", ex);
+ check(camel_exception_is_set(ex));
+ camel_exception_clear(ex);
+ pull();
+
+ push("deleting an existing folder");
+ camel_store_delete_folder(store, "testbox2", ex);
+ check_msg(!camel_exception_is_set(ex), "%s", camel_exception_get_description(ex));
+ pull();
+
+ push("opening a folder that has been deleted");
+ folder = camel_store_get_folder(store, "testbox2", 0, ex);
+ check(camel_exception_is_set(ex));
+ check(folder == NULL);
+ camel_exception_clear(ex);
+ pull();
+
+ camel_object_unref((CamelObject *)store);
+
+ g_free(path);
+
+ camel_test_end();
+ }
+
+ camel_object_unref((CamelObject *)session);
+ camel_exception_free(ex);
+
+ return 0;
+}
diff --git a/camel/tests/folder/test2.c b/camel/tests/folder/test2.c
new file mode 100644
index 0000000000..c7a1af2c33
--- /dev/null
+++ b/camel/tests/folder/test2.c
@@ -0,0 +1,241 @@
+/* folder testing */
+
+#include "camel-test.h"
+#include "messages.h"
+#include "folders.h"
+
+#include <camel/camel-exception.h>
+#include <camel/camel-service.h>
+#include <camel/camel-session.h>
+#include <camel/camel-store.h>
+
+#include <camel/camel-folder.h>
+#include <camel/camel-folder-summary.h>
+#include <camel/camel-mime-message.h>
+
+/* god, who designed this horrid interface */
+static char *auth_callback(CamelAuthCallbackMode mode,
+ char *data, gboolean secret,
+ CamelService *service, char *item,
+ CamelException *ex)
+{
+ return NULL;
+}
+
+
+#define ARRAY_LEN(x) (sizeof(x)/sizeof(x[0]))
+
+static char *stores[] = {
+ "mbox:///tmp/camel-test/mbox",
+ "mh:///tmp/camel-test/mh",
+ "maildir:///tmp/camel-test/maildir"
+};
+
+int main(int argc, char **argv)
+{
+ CamelSession *session;
+ CamelStore *store;
+ CamelException *ex;
+ CamelFolder *folder;
+ CamelMimeMessage *msg;
+ int i, j;
+ int indexed;
+ GPtrArray *uids;
+ const CamelMessageInfo *info;
+
+ ex = camel_exception_new();
+
+ camel_test_init(argc, argv);
+
+ session = camel_session_new("/tmp/camel-test", auth_callback, NULL, NULL);
+
+ /* todo: cross-check everything with folder_info checks as well */
+ /* todo: work out how to do imap/pop/nntp tests */
+
+ /* we iterate over all stores we want to test, with indexing or indexing turned on or off */
+ for (i=0;i<ARRAY_LEN(stores);i++) {
+ char *name = stores[i];
+ for (indexed = 0;indexed<2;indexed++) {
+ char *what = g_strdup_printf("folder ops: %s (%sindexed)", name, indexed?"":"non-");
+ int flags;
+
+ camel_test_start(what);
+ test_free(what);
+
+ push("getting store");
+ store = camel_session_get_store(session, stores[i], ex);
+ check_msg(!camel_exception_is_set(ex), "getting store: %s", camel_exception_get_description(ex));
+ check(store != NULL);
+ pull();
+
+ push("creating %sindexed folder", indexed?"":"non-");
+ if (indexed)
+ flags = CAMEL_STORE_FOLDER_CREATE|CAMEL_STORE_FOLDER_BODY_INDEX;
+ else
+ flags = CAMEL_STORE_FOLDER_CREATE;
+ folder = camel_store_get_folder(store, "testbox", flags, ex);
+ check_msg(!camel_exception_is_set(ex), "%s", camel_exception_get_description(ex));
+ check(folder != NULL);
+
+ /* verify empty/can't get nonexistant stuff */
+ test_folder_counts(folder, 0, 0);
+ test_folder_not_message(folder, "0");
+ test_folder_not_message(folder, "");
+
+ for (j=0;j<10;j++) {
+ char *content, *subject;
+
+ push("creating test message");
+ msg = test_message_create_simple();
+ content = g_strdup_printf("Test message %d contents\n\n", j);
+ test_message_set_content_simple((CamelMimePart *)msg, 0, "text/plain",
+ content, strlen(content));
+ test_free(content);
+ subject = g_strdup_printf("Test message %d", j);
+ camel_mime_message_set_subject(msg, subject);
+ pull();
+
+ push("appending simple message %d", j);
+ camel_folder_append_message(folder, msg, NULL, ex);
+ check_msg(!camel_exception_is_set(ex), "%s", camel_exception_get_description(ex));
+ test_folder_counts(folder, j+1, j+1);
+
+ push("checking it is in the right uid slot & exists");
+ uids = camel_folder_get_uids(folder);
+ check(uids != NULL);
+ check(uids->len == j+1);
+ test_folder_message(folder, uids->pdata[j]);
+ pull();
+
+ push("checking it is the right message (subject): %s", subject);
+ info = camel_folder_get_message_info(folder, uids->pdata[j]);
+ check_msg(strcmp(info->subject, subject)==0, "info->subject %s", info->subject);
+ camel_folder_free_uids(folder, uids);
+ pull();
+
+ test_free(subject);
+
+ check_unref(msg, 1);
+ pull();
+ }
+
+ check_unref(folder, 1);
+ pull();
+
+ push("deleting test folder, with messages in it");
+ camel_store_delete_folder(store, "testbox", ex);
+ check(camel_exception_is_set(ex));
+ camel_exception_clear(ex);
+ pull();
+
+ push("re-opening folder");
+ folder = camel_store_get_folder(store, "testbox", flags, ex);
+ check_msg(!camel_exception_is_set(ex), "%s", camel_exception_get_description(ex));
+ check(folder != NULL);
+
+ /* verify counts */
+ test_folder_counts(folder, 10, 10);
+
+ /* re-check uid's, after a reload */
+ uids = camel_folder_get_uids(folder);
+ check(uids != NULL);
+ check(uids->len == 10);
+ for (j=0;j<10;j++) {
+ char *subject = g_strdup_printf("Test message %d", j);
+
+ push("verify reload of %s", subject);
+ test_folder_message(folder, uids->pdata[j]);
+
+ info = camel_folder_get_message_info(folder, uids->pdata[j]);
+ check_msg(strcmp(info->subject, subject)==0, "info->subject %s", info->subject);
+ test_free(subject);
+ pull();
+ }
+
+ push("deleting first message & expunging");
+ camel_folder_delete_message(folder, uids->pdata[0]);
+ test_folder_counts(folder, 10, 10);
+ camel_folder_expunge(folder, ex);
+ check_msg(!camel_exception_is_set(ex), "%s", camel_exception_get_description(ex));
+ test_folder_not_message(folder, uids->pdata[0]);
+ test_folder_counts(folder, 9, 9);
+
+ camel_folder_free_uids(folder, uids);
+
+ uids = camel_folder_get_uids(folder);
+ check(uids != NULL);
+ check(uids->len == 9);
+ for (j=0;j<9;j++) {
+ char *subject = g_strdup_printf("Test message %d", j+1);
+
+ push("verify after expunge of %s", subject);
+ test_folder_message(folder, uids->pdata[j]);
+
+ info = camel_folder_get_message_info(folder, uids->pdata[j]);
+ check_msg(strcmp(info->subject, subject)==0, "info->subject %s", info->subject);
+ test_free(subject);
+ pull();
+ }
+ pull();
+
+ push("deleting last message & expunging");
+ camel_folder_delete_message(folder, uids->pdata[8]);
+ /* sync? */
+ test_folder_counts(folder, 9, 9);
+ camel_folder_expunge(folder, ex);
+ check_msg(!camel_exception_is_set(ex), "%s", camel_exception_get_description(ex));
+ test_folder_not_message(folder, uids->pdata[8]);
+ test_folder_counts(folder, 8, 8);
+
+ camel_folder_free_uids(folder, uids);
+
+ uids = camel_folder_get_uids(folder);
+ check(uids != NULL);
+ check(uids->len == 8);
+ for (j=0;j<8;j++) {
+ char *subject = g_strdup_printf("Test message %d", j+1);
+
+ push("verify after expunge of %s", subject);
+ test_folder_message(folder, uids->pdata[j]);
+
+ info = camel_folder_get_message_info(folder, uids->pdata[j]);
+ check_msg(strcmp(info->subject, subject)==0, "info->subject %s", info->subject);
+ test_free(subject);
+ pull();
+ }
+ pull();
+
+ push("deleting all messages & expunging");
+ for (j=0;j<8;j++) {
+ camel_folder_delete_message(folder, uids->pdata[j]);
+ }
+ /* sync? */
+ test_folder_counts(folder, 8, 8);
+ camel_folder_expunge(folder, ex);
+ check_msg(!camel_exception_is_set(ex), "%s", camel_exception_get_description(ex));
+ for (j=0;j<8;j++) {
+ test_folder_not_message(folder, uids->pdata[j]);
+ }
+ test_folder_counts(folder, 0, 0);
+
+ camel_folder_free_uids(folder, uids);
+ pull();
+
+ camel_object_unref((CamelObject *)folder);
+ pull(); /* re-opening folder */
+
+ push("deleting test folder, with no messages in it");
+ camel_store_delete_folder(store, "testbox", ex);
+ check_msg(!camel_exception_is_set(ex), "%s", camel_exception_get_description(ex));
+ pull();
+
+ camel_object_unref((CamelObject *)store);
+ camel_test_end();
+ }
+ }
+
+ camel_object_unref((CamelObject *)session);
+ camel_exception_free(ex);
+
+ return 0;
+}
diff --git a/camel/tests/folder/test3.c b/camel/tests/folder/test3.c
new file mode 100644
index 0000000000..ecd0a46fe7
--- /dev/null
+++ b/camel/tests/folder/test3.c
@@ -0,0 +1,290 @@
+/* folder/index testing */
+
+#include "camel-test.h"
+#include "messages.h"
+#include "folders.h"
+
+#include <camel/camel-exception.h>
+#include <camel/camel-service.h>
+#include <camel/camel-session.h>
+#include <camel/camel-store.h>
+
+#include <camel/camel-folder.h>
+#include <camel/camel-folder-summary.h>
+#include <camel/camel-mime-message.h>
+
+/* god, who designed this horrid interface */
+static char *auth_callback(CamelAuthCallbackMode mode,
+ char *data, gboolean secret,
+ CamelService *service, char *item,
+ CamelException *ex)
+{
+ return NULL;
+}
+
+
+static void
+test_folder_search_sub(CamelFolder *folder, const char *expr, int expected)
+{
+ CamelException *ex = camel_exception_new();
+ GPtrArray *uids;
+ GHashTable *hash;
+ int i;
+
+ uids = camel_folder_search_by_expression(folder, expr, ex);
+ check(uids != NULL);
+ check(uids->len == expected);
+ check_msg(!camel_exception_is_set(ex), "%s", camel_exception_get_description(ex));
+
+ /* check the uid's are actually unique, too */
+ hash = g_hash_table_new(g_str_hash, g_str_equal);
+ for (i=0;uids->len;i++) {
+ check(g_hash_table_lookup(hash, uids->pdata[i]) == NULL);
+ g_hash_table_insert(hash, uids->pdata[i], uids->pdata[i]);
+ }
+ g_hash_table_destroy(hash);
+
+ camel_folder_search_free(folder, uids);
+
+ camel_exception_free(ex);
+}
+
+static void
+test_folder_search(CamelFolder *folder, const char *expr, int expected)
+{
+ char *matchall;
+
+ push("Testing search: %s", expr);
+ test_folder_search_sub(folder, expr, expected);
+ pull();
+
+ matchall = g_strdup_printf("(match-all %s)", expr);
+ push("Testing search: %s", matchall);
+ test_folder_search_sub(folder, matchall, expected);
+ test_free(matchall);
+ pull();
+}
+
+#define ARRAY_LEN(x) (sizeof(x)/sizeof(x[0]))
+
+static char *stores[] = {
+ "mbox:///tmp/camel-test/mbox",
+ "mh:///tmp/camel-test/mh",
+ "maildir:///tmp/camel-test/maildir"
+};
+
+int main(int argc, char **argv)
+{
+ CamelSession *session;
+ CamelStore *store;
+ CamelException *ex;
+ CamelFolder *folder;
+ CamelMimeMessage *msg;
+ int i, j;
+ int indexed;
+ GPtrArray *uids;
+
+ ex = camel_exception_new();
+
+ camel_test_init(argc, argv);
+
+ session = camel_session_new("/tmp/camel-test", auth_callback, NULL, NULL);
+
+ /* todo: cross-check everything with folder_info checks as well */
+ /* todo: work out how to do imap/pop/nntp tests */
+
+ /* we iterate over all stores we want to test, with indexing or indexing turned on or off */
+ for (i=0;i<ARRAY_LEN(stores);i++) {
+ char *name = stores[i];
+ for (indexed = 0;indexed<2;indexed++) {
+ char *what = g_strdup_printf("folder search: %s (%sindexed)", name, indexed?"":"non-");
+ int flags;
+
+ camel_test_start(what);
+ test_free(what);
+
+ push("getting store");
+ store = camel_session_get_store(session, stores[i], ex);
+ check_msg(!camel_exception_is_set(ex), "getting store: %s", camel_exception_get_description(ex));
+ check(store != NULL);
+ pull();
+
+ push("creating %sindexed folder", indexed?"":"non-");
+ if (indexed)
+ flags = CAMEL_STORE_FOLDER_CREATE|CAMEL_STORE_FOLDER_BODY_INDEX;
+ else
+ flags = CAMEL_STORE_FOLDER_CREATE;
+ folder = camel_store_get_folder(store, "testbox", flags, ex);
+ check_msg(!camel_exception_is_set(ex), "%s", camel_exception_get_description(ex));
+ check(folder != NULL);
+
+ /* we need an empty folder for this to work */
+ test_folder_counts(folder, 0, 0);
+ pull();
+
+ /* append a bunch of messages with specific content */
+ push("appending 100 test messages");
+ for (j=0;j<100;j++) {
+ char *content, *subject;
+
+ push("creating test message");
+ msg = test_message_create_simple();
+ content = g_strdup_printf("data%d content\n", j);
+ test_message_set_content_simple((CamelMimePart *)msg, 0, "text/plain",
+ content, strlen(content));
+ test_free(content);
+ subject = g_strdup_printf("Test%d message%d subject", j, 100-j);
+ camel_mime_message_set_subject(msg, subject);
+
+ camel_mime_message_set_date(msg, j*60*24, 0);
+
+ pull();
+
+ push("appending simple message %d", j);
+ camel_folder_append_message(folder, msg, NULL, ex);
+ check_msg(!camel_exception_is_set(ex), "%s", camel_exception_get_description(ex));
+ pull();
+
+ test_free(subject);
+
+ check_unref(msg, 1);
+ }
+ pull();
+
+ push("Setting up some flags &c");
+ uids = camel_folder_get_uids(folder);
+ check(uids->len == 100);
+ for (j=0;j<100;j++) {
+ char *uid = uids->pdata[j];
+
+ if ((j/13)*13 == j) {
+ camel_folder_set_message_user_flag(folder, uid, "every13", TRUE);
+ }
+ if ((j/17)*17 == j) {
+ camel_folder_set_message_user_flag(folder, uid, "every17", TRUE);
+ }
+ if ((j/7)*7 == j) {
+ char *tag = g_strdup_printf("7tag%d", j/7);
+ camel_folder_set_message_user_tag(folder, uid, "every7", tag);
+ test_free(tag);
+ }
+ if ((j/11)*11 == j) {
+ camel_folder_set_message_user_tag(folder, uid, "every11", "11tag");
+ }
+ }
+ camel_folder_free_uids(folder, uids);
+ pull();
+
+ /* should try invalid search strings too */
+
+ /* try some searches */
+ push("performing searches");
+ test_folder_search(folder, "(header-contains \"subject\" \"subject\")", 100);
+ test_folder_search(folder, "(header-contains \"subject\" \"Subject\")", 100);
+
+ test_folder_search(folder, "(body-contains \"content\")", 100);
+ test_folder_search(folder, "(body-contains \"Content\")", 100);
+
+ test_folder_search(folder, "(user-flag \"every7\")", 0);
+ test_folder_search(folder, "(user-flag \"every13\")", 100/13);
+ test_folder_search(folder, "(= \"7tag1\" (user-tag \"every7\"))", 1);
+ test_folder_search(folder, "(= \"11tag\" (user-tag \"every11\"))", 100/11);
+
+ test_folder_search(folder, "(user-flag \"every13\" \"every17\")", 100/13 + 100/17);
+ test_folder_search(folder, "(or (user-flag \"every13\") (user-flag \"every17\"))", 100/13 + 100/17);
+ test_folder_search(folder, "(and (user-flag \"every13\") (user-flag \"every17\"))", 0);
+
+ test_folder_search(folder, "(and (header-contains \"subject\" \"Test1\")"
+ "(header-contains \"subject\" \"Test2\"))", 0);
+ test_folder_search(folder, "(and (header-contains \"subject\" \"Test1\")"
+ "(header-contains \"subject\" \"subject\"))", 1);
+ test_folder_search(folder, "(and (header-contains \"subject\" \"Test1\")"
+ "(header-contains \"subject\" \"message99\"))", 1);
+
+ test_folder_search(folder, "(or (header-contains \"subject\" \"Test1\")"
+ "(header-contains \"subject\" \"Test2\"))", 2);
+ test_folder_search(folder, "(or (header-contains \"subject\" \"Test1\")"
+ "(header-contains \"subject\" \"subject\"))", 100);
+ test_folder_search(folder, "(or (header-contains \"subject\" \"Test1\")"
+ "(header-contains \"subject\" \"message99\"))", 1);
+
+ /* 7200 is 24*60*50 == half the 'sent date' of the messages */
+ test_folder_search(folder, "(> 7200 (get-sent-date))", 49);
+ test_folder_search(folder, "(< 7200 (get-sent-date))", 49);
+ test_folder_search(folder, "(= 7200 (get-sent-date))", 1);
+ test_folder_search(folder, "(= 7201 (get-sent-date))", 0);
+
+ test_folder_search(folder, "(and (user-flag \"every17\") (< 7200 (get-sent-date)))", 49/17);
+ test_folder_search(folder, "(and (user-flag \"every17\") (> 7200 (get-sent-date)))", 49/17-1);
+ test_folder_search(folder, "(and (user-flag \"every13\") (< 7200 (get-sent-date)))", 49/13);
+ test_folder_search(folder, "(and (user-flag \"every13\") (> 7200 (get-sent-date)))", 49/13-1);
+
+ test_folder_search(folder, "(or (user-flag \"every17\") (< 7200 (get-sent-date)))", 49);
+ test_folder_search(folder, "(or (user-flag \"every17\") (> 7200 (get-sent-date)))", 49);
+ test_folder_search(folder, "(or (user-flag \"every13\") (< 7200 (get-sent-date)))", 49);
+ test_folder_search(folder, "(or (user-flag \"every13\") (> 7200 (get-sent-date)))", 49);
+
+ push("deleting every 2nd message & expunging");
+ uids = camel_folder_get_uids(folder);
+ check(uids->len == 100);
+ for (j=0;j<uids->len;j++) {
+ camel_folder_delete_message(folder, uids->pdata[j]);
+ }
+
+ push("searches after deletions, before sync");
+ test_folder_search(folder, "(header-contains \"subject\" \"subject\")", 100);
+ test_folder_search(folder, "(body-contains \"content\")", 100);
+ pull();
+
+ camel_folder_sync(folder, FALSE, ex);
+
+ push("searches after sync, before expunge");
+ test_folder_search(folder, "(header-contains \"subject\" \"subject\")", 100);
+ test_folder_search(folder, "(body-contains \"content\")", 100);
+ pull();
+
+ camel_folder_expunge(folder, ex);
+ check_msg(!camel_exception_is_set(ex), "%s", camel_exception_get_description(ex));
+ camel_folder_free_uids(folder, uids);
+ pull();
+
+ /* more searches */
+ push("searches after deletions");
+ test_folder_search(folder, "(header-contains \"subject\" \"subject\")", 50);
+ test_folder_search(folder, "(body-contains \"content\")", 50);
+ pull();
+
+ push("deleting remaining messages & expunging");
+ uids = camel_folder_get_uids(folder);
+ check(uids->len == 100);
+ for (j=0;j<uids->len;j++) {
+ camel_folder_delete_message(folder, uids->pdata[j]);
+ }
+ camel_folder_expunge(folder, ex);
+ check_msg(!camel_exception_is_set(ex), "%s", camel_exception_get_description(ex));
+ camel_folder_free_uids(folder, uids);
+ pull();
+
+ push("searches wtih no messages");
+ test_folder_search(folder, "(header-contains \"subject\" \"subject\")", 0);
+ test_folder_search(folder, "(body-contains \"content\")", 0);
+ pull();
+
+ check_unref(folder, 1);
+ pull();
+
+ push("deleting test folder, with no messages in it");
+ camel_store_delete_folder(store, "testbox", ex);
+ check_msg(!camel_exception_is_set(ex), "%s", camel_exception_get_description(ex));
+ pull();
+
+ camel_object_unref((CamelObject *)store);
+ camel_test_end();
+ }
+ }
+
+ camel_object_unref((CamelObject *)session);
+ camel_exception_free(ex);
+
+ return 0;
+}