test-imap-match.c revision 767aabe13af8c9d098f0f9a44932e2e9aab8b908
2ronwalf/* Copyright (c) 2008-2010 Dovecot authors, see the included COPYING file */
2ronwalf
2ronwalf#include "lib.h"
2ronwalf#include "imap-match.h"
2ronwalf#include "test-common.h"
2ronwalf
2ronwalfstruct test_imap_match {
2ronwalf const char *pattern;
2ronwalf const char *input;
2ronwalf enum imap_match_result result;
2ronwalf};
2ronwalf
2ronwalfstatic void test_imap_match(void)
2ronwalf{
2ronwalf struct test_imap_match test[] = {
2ronwalf { "", "", IMAP_MATCH_YES },
2ronwalf { "a", "b", IMAP_MATCH_NO },
2ronwalf { "foo", "foo", IMAP_MATCH_YES },
2ronwalf { "foo", "foo/", IMAP_MATCH_PARENT },
2ronwalf { "%", "", IMAP_MATCH_YES },
2ronwalf { "%", "foo", IMAP_MATCH_YES },
2ronwalf { "%", "foo/", IMAP_MATCH_PARENT },
2ronwalf { "%/", "foo/", IMAP_MATCH_YES },
2ronwalf { "%", "foo/bar", IMAP_MATCH_PARENT },
2ronwalf { "%/%", "foo", IMAP_MATCH_CHILDREN },
2ronwalf { "%/%", "foo/", IMAP_MATCH_YES },
2ronwalf { "foo/bar/%", "foo", IMAP_MATCH_CHILDREN },
2ronwalf { "foo/bar/%", "foo/", IMAP_MATCH_CHILDREN },
2ronwalf { "foo*", "foo", IMAP_MATCH_YES },
2ronwalf { "foo*", "foo/", IMAP_MATCH_YES },
10daenzerorama { "foo*", "fobo", IMAP_MATCH_NO },
10daenzerorama { "*foo*", "bar/foo/", IMAP_MATCH_YES },
2ronwalf { "*foo*", "fobo", IMAP_MATCH_CHILDREN },
3daenzerorama { "foo*bar", "foobar/baz", IMAP_MATCH_CHILDREN | IMAP_MATCH_PARENT },
10daenzerorama { "*foo*", "fobo", IMAP_MATCH_CHILDREN },
10daenzerorama { "%/%/%", "foo/", IMAP_MATCH_CHILDREN },
2ronwalf { "%/%o/%", "foo/", IMAP_MATCH_CHILDREN },
10daenzerorama { "%/%o/%", "foo", IMAP_MATCH_CHILDREN },
3daenzerorama { "inbox", "inbox", IMAP_MATCH_YES },
2ronwalf { "inbox", "INBOX", IMAP_MATCH_NO }
10daenzerorama };
3daenzerorama struct test_imap_match inbox_test[] = {
2ronwalf { "inbox", "inbox", IMAP_MATCH_YES },
2ronwalf { "inbox", "iNbOx", IMAP_MATCH_YES },
2ronwalf { "i%X", "iNbOx", IMAP_MATCH_YES },
2ronwalf { "%I%N%B%O%X%", "inbox", IMAP_MATCH_YES },
2ronwalf { "i%X/foo", "iNbOx/foo", IMAP_MATCH_YES },
2ronwalf { "%I%N%B%O%X%/foo", "inbox/foo", IMAP_MATCH_YES },
16daenzerorama { "i%X/foo", "inbx/foo", IMAP_MATCH_NO }
2ronwalf };
2ronwalf struct imap_match_glob *glob, *glob2;
2ronwalf unsigned int i;
2ronwalf pool_t pool;
2ronwalf
2ronwalf pool = pool_alloconly_create("imap match", 1024);
2ronwalf
3daenzerorama /* first try tests without inboxcasing */
3daenzerorama test_begin("imap match");
3daenzerorama for (i = 0; i < N_ELEMENTS(test); i++) {
3daenzerorama glob = imap_match_init(pool, test[i].pattern,
3daenzerorama FALSE, '/');
3daenzerorama test_assert(imap_match(glob, test[i].input) == test[i].result);
3daenzerorama
3daenzerorama glob2 = imap_match_dup(default_pool, glob);
3daenzerorama test_assert(imap_match_globs_equal(glob, glob2));
3daenzerorama p_clear(pool);
10daenzerorama
10daenzerorama /* test the dup after clearing first one's memory */
10daenzerorama test_assert(imap_match(glob2, test[i].input) == test[i].result);
10daenzerorama imap_match_deinit(&glob2);
10daenzerorama }
10daenzerorama
10daenzerorama /* inboxcasing tests */
10daenzerorama for (i = 0; i < N_ELEMENTS(inbox_test); i++) {
10daenzerorama glob = imap_match_init(pool, inbox_test[i].pattern,
10daenzerorama TRUE, '/');
10daenzerorama test_assert(imap_match(glob, inbox_test[i].input) == inbox_test[i].result);
10daenzerorama
10daenzerorama glob2 = imap_match_dup(default_pool, glob);
10daenzerorama test_assert(imap_match_globs_equal(glob, glob2));
10daenzerorama p_clear(pool);
10daenzerorama
10daenzerorama /* test the dup after clearing first one's memory */
10daenzerorama test_assert(imap_match(glob2, inbox_test[i].input) == inbox_test[i].result);
10daenzerorama imap_match_deinit(&glob2);
10daenzerorama }
10daenzerorama pool_unref(&pool);
10daenzerorama test_end();
10daenzerorama}
10daenzerorama
10daenzeroramastatic void test_imap_match_globs_equal(void)
10daenzerorama{
10daenzerorama struct imap_match_glob *glob;
10daenzerorama pool_t pool;
10daenzerorama
16daenzerorama pool = pool_alloconly_create("imap match globs equal", 1024);
16daenzerorama test_begin("imap match globs equal");
16daenzerorama
2ronwalf glob = imap_match_init(pool, "1", FALSE, '/');
test_assert(imap_match_globs_equal(glob,
imap_match_init(pool, "1", FALSE, '/')));
test_assert(imap_match_globs_equal(glob,
imap_match_init(pool, "1", TRUE, '/')));
test_assert(!imap_match_globs_equal(glob,
imap_match_init(pool, "1", FALSE, '.')));
test_assert(!imap_match_globs_equal(glob,
imap_match_init(pool, "11", FALSE, '/')));
glob = imap_match_init(pool, "in%", TRUE, '/');
test_assert(!imap_match_globs_equal(glob,
imap_match_init(pool, "in%", FALSE, '/')));
test_assert(!imap_match_globs_equal(glob,
imap_match_init(pool, "In%", TRUE, '/')));
pool_unref(&pool);
test_end();
}
int main(void)
{
static void (*test_functions[])(void) = {
test_imap_match,
test_imap_match_globs_equal,
NULL
};
return test_run(test_functions);
}