test-mail-search-args-simplify.c revision c9099b08b3cae8a849098ca776b4363c6d5f5f36
2454dfa32c93c20a8522c6ed42fe057baaac9f9aStephan Bosch/* Copyright (c) 2015 Dovecot authors, see the included COPYING file */
8322e7400bbeee586529e797f6e332149178aa4fTimo Sirainen { "OR TEXT FOO ( ALL NOT ALL )", "TEXT FOO" },
8322e7400bbeee586529e797f6e332149178aa4fTimo Sirainen { "( ( TEXT foo ) ( TEXT bar ) )", "TEXT foo TEXT bar" },
8322e7400bbeee586529e797f6e332149178aa4fTimo Sirainen { "OR ( TEXT foo ) ( TEXT bar )", "(OR TEXT foo TEXT bar)" },
8322e7400bbeee586529e797f6e332149178aa4fTimo Sirainen { "OR ( TEXT foo ) OR ( TEXT bar ) ( TEXT baz )",
8322e7400bbeee586529e797f6e332149178aa4fTimo Sirainen "(OR TEXT foo OR TEXT bar TEXT baz)" },
8322e7400bbeee586529e797f6e332149178aa4fTimo Sirainen { "OR ( ( TEXT foo TEXT foo2 ) ) ( ( TEXT bar ( TEXT baz ) ) )",
8322e7400bbeee586529e797f6e332149178aa4fTimo Sirainen "(OR (TEXT foo TEXT foo2) (TEXT bar TEXT baz))" },
8322e7400bbeee586529e797f6e332149178aa4fTimo Sirainen { "NOT OR ( TEXT foo ) ( TEXT bar )", "NOT TEXT foo NOT TEXT bar" },
8322e7400bbeee586529e797f6e332149178aa4fTimo Sirainen { "NOT ( OR ( TEXT foo ) ( TEXT bar ) )", "NOT TEXT foo NOT TEXT bar" },
8322e7400bbeee586529e797f6e332149178aa4fTimo Sirainen { "NOT ( TEXT foo TEXT bar )", "(OR NOT TEXT foo NOT TEXT bar)" },
8322e7400bbeee586529e797f6e332149178aa4fTimo Sirainen { "ANSWERED FLAGGED SEEN", "(ANSWERED FLAGGED SEEN)" },
8322e7400bbeee586529e797f6e332149178aa4fTimo Sirainen { "OR ( ANSWERED FLAGGED SEEN ) DRAFT", "(OR (ANSWERED FLAGGED SEEN) (DRAFT))" },
8322e7400bbeee586529e797f6e332149178aa4fTimo Sirainen { "ANSWERED TEXT foo FLAGGED SEEN", "(ANSWERED FLAGGED SEEN) TEXT foo" },
8322e7400bbeee586529e797f6e332149178aa4fTimo Sirainen { "NOT ( ANSWERED FLAGGED SEEN )", "NOT (ANSWERED FLAGGED SEEN)" },
8322e7400bbeee586529e797f6e332149178aa4fTimo Sirainen { "OR NOT ANSWERED OR NOT FLAGGED NOT SEEN", "NOT (ANSWERED FLAGGED SEEN)" },
8322e7400bbeee586529e797f6e332149178aa4fTimo Sirainen { "ANSWERED NOT FLAGGED SEEN NOT DRAFT", "(ANSWERED SEEN) NOT (FLAGGED) NOT (DRAFT)" },
8322e7400bbeee586529e797f6e332149178aa4fTimo Sirainen { "OR NOT ANSWERED NOT SEEN", "NOT (ANSWERED SEEN)" },
8322e7400bbeee586529e797f6e332149178aa4fTimo Sirainen { "1:5 NOT 10:20 NOT 30:40", "1:5 NOT 10:20 NOT 30:40" },
8322e7400bbeee586529e797f6e332149178aa4fTimo Sirainen { "OR 1:5 OR NOT 10:20 NOT 30:40", "(OR 1:5 NOT 10:20,30:40)" },
8322e7400bbeee586529e797f6e332149178aa4fTimo Sirainen { "UID 1:5 NOT UID 10:20", "UID 1:5 NOT UID 10:20" },
8322e7400bbeee586529e797f6e332149178aa4fTimo Sirainen { "UID 1:5 NOT UID 10:20 NOT UID 30:40", "UID 1:5 NOT UID 10:20 NOT UID 30:40" },
8322e7400bbeee586529e797f6e332149178aa4fTimo Sirainen { "OR UID 1:5 NOT UID 10:20", "(OR UID 1:5 NOT UID 10:20)" },
12ff27eadb44c6877298d3e214c7039342669669Timo Sirainen { "OR UID 1:5 OR NOT UID 10:20 NOT UID 30:40", "(OR UID 1:5 NOT UID 10:20,30:40)" },
12ff27eadb44c6877298d3e214c7039342669669Timo Sirainen { "BEFORE 03-Aug-2014 BEFORE 01-Aug-2014 BEFORE 02-Aug-2014", "BEFORE \"01-Aug-2014\"" },
12ff27eadb44c6877298d3e214c7039342669669Timo Sirainen { "OR BEFORE 01-Aug-2014 BEFORE 02-Aug-2014", "BEFORE \"02-Aug-2014\"" },
12ff27eadb44c6877298d3e214c7039342669669Timo Sirainen { "OR BEFORE 01-Aug-2014 OR BEFORE 03-Aug-2014 BEFORE 02-Aug-2014", "BEFORE \"03-Aug-2014\"" },
12ff27eadb44c6877298d3e214c7039342669669Timo Sirainen { "BEFORE 03-Aug-2014 NOT BEFORE 01-Aug-2014 BEFORE 02-Aug-2014", "BEFORE \"02-Aug-2014\" NOT BEFORE \"01-Aug-2014\"" },
12ff27eadb44c6877298d3e214c7039342669669Timo Sirainen { "SENTBEFORE 03-Aug-2014 SENTBEFORE 01-Aug-2014 SENTBEFORE 02-Aug-2014", "SENTBEFORE \"01-Aug-2014\"" },
12ff27eadb44c6877298d3e214c7039342669669Timo Sirainen { "SENTBEFORE 03-Aug-2014 BEFORE 01-Aug-2014 SENTBEFORE 02-Aug-2014", "SENTBEFORE \"02-Aug-2014\" BEFORE \"01-Aug-2014\"" },
12ff27eadb44c6877298d3e214c7039342669669Timo Sirainen { "ON 03-Aug-2014 ON 03-Aug-2014", "ON \"03-Aug-2014\"" },
12ff27eadb44c6877298d3e214c7039342669669Timo Sirainen { "ON 03-Aug-2014 ON 04-Aug-2014", "ON \"03-Aug-2014\" ON \"04-Aug-2014\"" }, /* this could be replaced with e.g. NOT ALL */
12ff27eadb44c6877298d3e214c7039342669669Timo Sirainen { "OR ON 03-Aug-2014 ON 04-Aug-2014", "(OR ON \"03-Aug-2014\" ON \"04-Aug-2014\")" },
12ff27eadb44c6877298d3e214c7039342669669Timo Sirainen { "SINCE 03-Aug-2014 SINCE 01-Aug-2014 SINCE 02-Aug-2014", "SINCE \"03-Aug-2014\"" },
12ff27eadb44c6877298d3e214c7039342669669Timo Sirainen { "OR SINCE 01-Aug-2014 SINCE 02-Aug-2014", "SINCE \"01-Aug-2014\"" },
12ff27eadb44c6877298d3e214c7039342669669Timo Sirainen { "OR SINCE 01-Aug-2014 OR SINCE 03-Aug-2014 SINCE 02-Aug-2014", "SINCE \"01-Aug-2014\"" },
12ff27eadb44c6877298d3e214c7039342669669Timo Sirainen { "SINCE 03-Aug-2014 NOT SINCE 01-Aug-2014 SINCE 02-Aug-2014", "SINCE \"03-Aug-2014\" NOT SINCE \"01-Aug-2014\"" },
12ff27eadb44c6877298d3e214c7039342669669Timo Sirainen { "SENTSINCE 03-Aug-2014 SENTSINCE 01-Aug-2014 SENTSINCE 02-Aug-2014", "SENTSINCE \"03-Aug-2014\"" },
12ff27eadb44c6877298d3e214c7039342669669Timo Sirainen { "SENTSINCE 03-Aug-2014 SINCE 01-Aug-2014 SENTSINCE 02-Aug-2014", "SENTSINCE \"03-Aug-2014\" SINCE \"01-Aug-2014\"" },
a1fff894178eb4279a3acb44948c1ba98db104deTimo Sirainen { "OR SMALLER 1 OR SMALLER 3 SMALLER 2", "SMALLER 3" },
a1fff894178eb4279a3acb44948c1ba98db104deTimo Sirainen { "SMALLER 3 NOT SMALLER 1 SMALLER 2", "SMALLER 2 NOT SMALLER 1" },
8587f4288b357bd83f2ec72b4197b529cf02220aTimo Sirainen { "SMALLER 3 LARGER 5", "SMALLER 3 LARGER 5" }, /* this could be replaced with e.g. NOT ALL */
8587f4288b357bd83f2ec72b4197b529cf02220aTimo Sirainen { "OR SMALLER 3 LARGER 5", "(OR SMALLER 3 LARGER 5)" },
8587f4288b357bd83f2ec72b4197b529cf02220aTimo Sirainen { "OR LARGER 1 OR LARGER 3 LARGER 2", "LARGER 1" },
8587f4288b357bd83f2ec72b4197b529cf02220aTimo Sirainen { "LARGER 3 NOT LARGER 1 LARGER 2", "LARGER 3 NOT LARGER 1" },
8587f4288b357bd83f2ec72b4197b529cf02220aTimo Sirainen { "SUBJECT foo SUBJECT foob", "SUBJECT foo SUBJECT foob" },
8587f4288b357bd83f2ec72b4197b529cf02220aTimo Sirainen { "OR SUBJECT foo SUBJECT foo", "SUBJECT foo" },
8587f4288b357bd83f2ec72b4197b529cf02220aTimo Sirainen { "TEXT foo TEXT foob", "TEXT foo TEXT foob" },
a1fff894178eb4279a3acb44948c1ba98db104deTimo Sirainen { "TEXT foo NOT TEXT foo TEXT foo NOT TEXT foo", "TEXT foo NOT TEXT foo" },
8587f4288b357bd83f2ec72b4197b529cf02220aTimo Sirainen { "OR ( TEXT foo OR TEXT foo TEXT foo ) ( TEXT foo ( TEXT foo ) )", "TEXT foo" },
8587f4288b357bd83f2ec72b4197b529cf02220aTimo Sirainen /* value="" tests */
a1fff894178eb4279a3acb44948c1ba98db104deTimo Sirainen /* OR: drop redundant args */
833fd67ffe6a1832d72b3d310e07345a42a7b6abTimo Sirainen { "OR ( TEXT common1 TEXT unique1 ) TEXT common1", "TEXT common1" },
833fd67ffe6a1832d72b3d310e07345a42a7b6abTimo Sirainen { "OR ( TEXT unique1 TEXT common1 ) TEXT common1", "TEXT common1" },
8587f4288b357bd83f2ec72b4197b529cf02220aTimo Sirainen { "OR TEXT common1 ( TEXT common1 TEXT unique1 )", "TEXT common1" },
8587f4288b357bd83f2ec72b4197b529cf02220aTimo Sirainen { "OR TEXT common1 ( TEXT unique1 TEXT common1 )", "TEXT common1" },
8587f4288b357bd83f2ec72b4197b529cf02220aTimo Sirainen { "OR ( TEXT common1 TEXT common2 ) ( TEXT common1 TEXT common2 TEXT unique1 )", "TEXT common1 TEXT common2" },
8587f4288b357bd83f2ec72b4197b529cf02220aTimo Sirainen { "OR TEXT common1 OR ( TEXT unique1 TEXT common1 ) ( TEXT unique3 TEXT common1 )", "TEXT common1" },
8587f4288b357bd83f2ec72b4197b529cf02220aTimo Sirainen /* OR: extract common AND */
8587f4288b357bd83f2ec72b4197b529cf02220aTimo Sirainen { "OR ( TEXT common1 TEXT unique1 ) ( TEXT common1 TEXT unique2 )", "(OR TEXT unique1 TEXT unique2) TEXT common1" },
8587f4288b357bd83f2ec72b4197b529cf02220aTimo Sirainen { "OR ( TEXT unique1 TEXT common1 ) ( TEXT unique2 TEXT common1 )", "(OR TEXT unique1 TEXT unique2) TEXT common1" },
8587f4288b357bd83f2ec72b4197b529cf02220aTimo Sirainen { "OR ( TEXT common1 TEXT unique1 ) ( TEXT unique2 TEXT common1 )", "(OR TEXT unique1 TEXT unique2) TEXT common1" },
8587f4288b357bd83f2ec72b4197b529cf02220aTimo Sirainen { "OR ( TEXT unique1 TEXT common1 ) ( TEXT common1 TEXT unique2 )", "(OR TEXT unique1 TEXT unique2) TEXT common1" },
8587f4288b357bd83f2ec72b4197b529cf02220aTimo Sirainen { "OR ( TEXT unique1 TEXT common1 ) ( TEXT common1 TEXT unique2 TEXT unique3 )", "(OR TEXT unique1 (TEXT unique2 TEXT unique3)) TEXT common1" },
8587f4288b357bd83f2ec72b4197b529cf02220aTimo Sirainen { "OR ( TEXT common1 TEXT common2 TEXT unique1 ) ( TEXT common1 TEXT common2 TEXT unique2 )", "(OR TEXT unique1 TEXT unique2) TEXT common2 TEXT common1" },
8587f4288b357bd83f2ec72b4197b529cf02220aTimo Sirainen { "OR ( TEXT common1 TEXT common2 TEXT unique1 TEXT unique2 ) ( TEXT common1 TEXT common2 TEXT unique3 TEXT unique4 )", "(OR (TEXT unique1 TEXT unique2) (TEXT unique3 TEXT unique4)) TEXT common2 TEXT common1" },
8587f4288b357bd83f2ec72b4197b529cf02220aTimo Sirainen /* non-matching cases */
833fd67ffe6a1832d72b3d310e07345a42a7b6abTimo Sirainen { "OR ( TEXT unique1 TEXT unique2 ) TEXT unique3", "(OR (TEXT unique1 TEXT unique2) TEXT unique3)" },
833fd67ffe6a1832d72b3d310e07345a42a7b6abTimo Sirainen { "OR ( TEXT unique1 TEXT unique2 ) ( TEXT unique3 TEXT unique4 )", "(OR (TEXT unique1 TEXT unique2) (TEXT unique3 TEXT unique4))" },
8587f4288b357bd83f2ec72b4197b529cf02220aTimo Sirainen { "OR ( TEXT common1 TEXT unique1 ) OR ( TEXT common1 TEXT unique2 ) TEXT unique3", "(OR (TEXT common1 TEXT unique1) OR (TEXT common1 TEXT unique2) TEXT unique3)" },
8587f4288b357bd83f2ec72b4197b529cf02220aTimo Sirainen { "OR ( TEXT common1 TEXT unique1 ) OR ( TEXT common1 TEXT common2 ) ( TEXT common2 TEXT unique2 )", "(OR (TEXT common1 TEXT unique1) OR (TEXT common1 TEXT common2) (TEXT common2 TEXT unique2))" },
8587f4288b357bd83f2ec72b4197b529cf02220aTimo Sirainen /* SUB: drop redundant args */
8587f4288b357bd83f2ec72b4197b529cf02220aTimo Sirainen { "( OR TEXT common1 TEXT unique1 ) TEXT common1", "TEXT common1" },
8587f4288b357bd83f2ec72b4197b529cf02220aTimo Sirainen { "( OR TEXT unique1 TEXT common1 ) TEXT common1", "TEXT common1" },
8587f4288b357bd83f2ec72b4197b529cf02220aTimo Sirainen { "TEXT common1 ( OR TEXT common1 TEXT unique1 )", "TEXT common1" },
8587f4288b357bd83f2ec72b4197b529cf02220aTimo Sirainen { "TEXT common1 ( OR TEXT unique1 TEXT common1 )", "TEXT common1" },
8587f4288b357bd83f2ec72b4197b529cf02220aTimo Sirainen { "( OR TEXT common1 TEXT common2 ) ( OR TEXT common1 OR TEXT common2 TEXT unique1 )", "(OR TEXT common1 TEXT common2)" },
8587f4288b357bd83f2ec72b4197b529cf02220aTimo Sirainen { "TEXT common1 ( OR TEXT unique1 TEXT common1 ) ( OR TEXT unique3 TEXT common1 )", "TEXT common1" },
8587f4288b357bd83f2ec72b4197b529cf02220aTimo Sirainen { "OR ( TEXT common1 ( OR TEXT unique1 TEXT common1 ) ) TEXT unique1", "(OR TEXT common1 TEXT unique1)" },
8587f4288b357bd83f2ec72b4197b529cf02220aTimo Sirainen /* SUB: extract common OR */
833fd67ffe6a1832d72b3d310e07345a42a7b6abTimo Sirainen { "( OR TEXT common1 TEXT unique1 ) ( OR TEXT common1 TEXT unique2 )", "(OR (TEXT unique1 TEXT unique2) TEXT common1)" },
833fd67ffe6a1832d72b3d310e07345a42a7b6abTimo Sirainen { "( OR TEXT unique1 TEXT common1 ) ( OR TEXT unique2 TEXT common1 )", "(OR (TEXT unique1 TEXT unique2) TEXT common1)" },
833fd67ffe6a1832d72b3d310e07345a42a7b6abTimo Sirainen { "( OR TEXT common1 TEXT unique1 ) ( OR TEXT unique2 TEXT common1 )", "(OR (TEXT unique1 TEXT unique2) TEXT common1)" },
833fd67ffe6a1832d72b3d310e07345a42a7b6abTimo Sirainen { "( OR TEXT unique1 TEXT common1 ) ( OR TEXT common1 TEXT unique2 )", "(OR (TEXT unique1 TEXT unique2) TEXT common1)" },
833fd67ffe6a1832d72b3d310e07345a42a7b6abTimo Sirainen { "( OR TEXT unique1 TEXT common1 ) ( OR TEXT common1 OR TEXT unique2 TEXT unique3 )", "(OR (TEXT unique1 (OR TEXT unique2 TEXT unique3)) TEXT common1)" },
833fd67ffe6a1832d72b3d310e07345a42a7b6abTimo Sirainen { "( OR TEXT common1 OR TEXT common2 TEXT unique1 ) ( OR TEXT common1 OR TEXT common2 TEXT unique2 )", "(OR (TEXT unique1 TEXT unique2) OR TEXT common2 TEXT common1)" },
833fd67ffe6a1832d72b3d310e07345a42a7b6abTimo Sirainen { "( OR TEXT common1 OR TEXT common2 OR TEXT unique1 TEXT unique2 ) ( OR TEXT common1 OR TEXT common2 OR TEXT unique3 TEXT unique4 )", "(OR ((OR TEXT unique1 TEXT unique2) (OR TEXT unique3 TEXT unique4)) OR TEXT common2 TEXT common1)" },
be1749e2421dea6465f9096fd35b28b2500d06e4Timo Sirainen /* non-matching cases */
be1749e2421dea6465f9096fd35b28b2500d06e4Timo Sirainen { "( OR TEXT unique1 TEXT unique2 ) TEXT unique3", "(OR TEXT unique1 TEXT unique2) TEXT unique3" },
be1749e2421dea6465f9096fd35b28b2500d06e4Timo Sirainen { "( OR TEXT unique1 TEXT unique2 ) ( OR TEXT unique3 TEXT unique4 )", "(OR TEXT unique1 TEXT unique2) (OR TEXT unique3 TEXT unique4)" },
be1749e2421dea6465f9096fd35b28b2500d06e4Timo Sirainen { "( OR TEXT common1 TEXT unique1 ) ( OR TEXT common1 TEXT unique2 ) TEXT unique3", "(OR TEXT common1 TEXT unique1) (OR TEXT common1 TEXT unique2) TEXT unique3" },
be1749e2421dea6465f9096fd35b28b2500d06e4Timo Sirainen { "( OR TEXT common1 TEXT unique1 ) ( OR TEXT common1 TEXT common2 ) ( OR TEXT common2 TEXT unique2 )", "(OR TEXT common1 TEXT unique1) (OR TEXT common1 TEXT common2) (OR TEXT common2 TEXT unique2)" },
f43734e772a94c8d2b684b59c212fecf66122d15Stephan Bosch parser = mail_search_parser_init_cmdline(t_strsplit(args, " "));
f43734e772a94c8d2b684b59c212fecf66122d15Stephan Bosch if (mail_search_build(mail_search_register_get_imap(),
f43734e772a94c8d2b684b59c212fecf66122d15Stephan Boschstatic void test_mail_search_args_simplify(void)
f43734e772a94c8d2b684b59c212fecf66122d15Stephan Bosch unsigned int i;
f43734e772a94c8d2b684b59c212fecf66122d15Stephan Bosch args = test_build_search_args(tests[i].input);
f43734e772a94c8d2b684b59c212fecf66122d15Stephan Bosch test_assert(mail_search_args_to_imap(str, args->args, &error));
f43734e772a94c8d2b684b59c212fecf66122d15Stephan Bosch test_assert_idx(strcmp(str_c(str), tests[i].output) == 0, i);
f43734e772a94c8d2b684b59c212fecf66122d15Stephan Bosch static void (*test_functions[])(void) = {