test-mail-search-args-simplify.c revision 8d3af185ae454653fad60e41c5f36edb1d45c868
02c335c23bf5fa225a467c19f2c063fb0dc7b8c3Timo Sirainen/* Copyright (c) 2015 Dovecot authors, see the included COPYING file */
2793e3bd31d212d6506686aa70773e13d9d98195Timo Sirainen
2793e3bd31d212d6506686aa70773e13d9d98195Timo Sirainen#include "lib.h"
2793e3bd31d212d6506686aa70773e13d9d98195Timo Sirainen#include "str.h"
735259c24eda6f272c8e21eab0f4d0c6bb022fd6Timo Sirainen#include "test-common.h"
735259c24eda6f272c8e21eab0f4d0c6bb022fd6Timo Sirainen#include "mail-search-build.h"
735259c24eda6f272c8e21eab0f4d0c6bb022fd6Timo Sirainen#include "mail-search-parser.h"
735259c24eda6f272c8e21eab0f4d0c6bb022fd6Timo Sirainen#include "mail-search.h"
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen
2793e3bd31d212d6506686aa70773e13d9d98195Timo Sirainenstruct {
c0a87e5f3316a57e6f915882fa1951d0fbb74a61Timo Sirainen const char *input;
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen const char *output;
2793e3bd31d212d6506686aa70773e13d9d98195Timo Sirainen} tests[] = {
1537d20b852cbbf0d6971790b84e0cce5ca61307Timo Sirainen { "TEXT foo", "TEXT foo" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "( TEXT foo )", "TEXT foo" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "( ( TEXT foo ) )", "TEXT foo" },
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen { "( ( TEXT foo ) ( TEXT bar ) )", "TEXT foo TEXT bar" },
2793e3bd31d212d6506686aa70773e13d9d98195Timo Sirainen
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen { "OR ( TEXT foo ) ( TEXT bar )", "(OR TEXT foo TEXT bar)" },
2793e3bd31d212d6506686aa70773e13d9d98195Timo Sirainen { "OR ( TEXT foo ) OR ( TEXT bar ) ( TEXT baz )",
2793e3bd31d212d6506686aa70773e13d9d98195Timo Sirainen "(OR TEXT foo OR TEXT bar TEXT baz)" },
2793e3bd31d212d6506686aa70773e13d9d98195Timo Sirainen { "OR ( ( TEXT foo TEXT foo2 ) ) ( ( TEXT bar ( TEXT baz ) ) )",
8e371a3ce32bd64288786855b8ce0cb63f19f7d1Timo Sirainen "(OR (TEXT foo TEXT foo2) (TEXT bar TEXT baz))" },
8e371a3ce32bd64288786855b8ce0cb63f19f7d1Timo Sirainen
8e371a3ce32bd64288786855b8ce0cb63f19f7d1Timo Sirainen { "NOT ( TEXT foo )", "NOT TEXT foo" },
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen { "NOT ( NOT ( TEXT foo ) )", "TEXT foo" },
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen { "NOT OR ( TEXT foo ) ( TEXT bar )", "NOT TEXT foo NOT TEXT bar" },
2793e3bd31d212d6506686aa70773e13d9d98195Timo Sirainen { "NOT ( OR ( TEXT foo ) ( TEXT bar ) )", "NOT TEXT foo NOT TEXT bar" },
735259c24eda6f272c8e21eab0f4d0c6bb022fd6Timo Sirainen { "NOT ( TEXT foo TEXT bar )", "(OR NOT TEXT foo NOT TEXT bar)" },
735259c24eda6f272c8e21eab0f4d0c6bb022fd6Timo Sirainen
735259c24eda6f272c8e21eab0f4d0c6bb022fd6Timo Sirainen { "ANSWERED FLAGGED SEEN", "(ANSWERED FLAGGED SEEN)" },
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen { "OR ( ANSWERED FLAGGED SEEN ) DRAFT", "(OR (ANSWERED FLAGGED SEEN) (DRAFT))" },
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen { "ANSWERED TEXT foo FLAGGED SEEN", "(ANSWERED FLAGGED SEEN) TEXT foo" },
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen { "NOT ( ANSWERED FLAGGED SEEN )", "NOT (ANSWERED FLAGGED SEEN)" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "OR NOT ANSWERED OR NOT FLAGGED NOT SEEN", "NOT (ANSWERED FLAGGED SEEN)" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "ANSWERED NOT FLAGGED SEEN NOT DRAFT", "(ANSWERED SEEN) NOT (FLAGGED) NOT (DRAFT)" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "OR NOT ANSWERED NOT SEEN", "NOT (ANSWERED SEEN)" },
a0c453a8edaec90fb0d945c874de0b1845bc7d7eTimo Sirainen
a0c453a8edaec90fb0d945c874de0b1845bc7d7eTimo Sirainen { "1:5 10:20", "1:5,10:20" },
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen { "1:5 NOT 10:20", "1:5 NOT 10:20" },
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen { "1:5 NOT 10:20 NOT 30:40", "1:5 NOT 10:20 NOT 30:40" },
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen { "OR 1:5 NOT 10:20", "(OR 1:5 NOT 10:20)" },
88dc563319efecd6e68bad16b0d92672da05584aTimo Sirainen { "OR 1:5 OR NOT 10:20 NOT 30:40", "(OR 1:5 NOT 10:20,30:40)" },
88dc563319efecd6e68bad16b0d92672da05584aTimo Sirainen
85a4ae7e8df7ea45a7665828e5edf48a5fc85730Timo Sirainen { "UID 1:5 UID 10:20", "UID 1:5,10:20" },
8e371a3ce32bd64288786855b8ce0cb63f19f7d1Timo Sirainen { "UID 1:5 NOT UID 10:20", "UID 1:5 NOT UID 10:20" },
1b0cfbf3cc77a670b92fff5c30f7b1eb17a63ab1Timo Sirainen { "UID 1:5 NOT UID 10:20 NOT UID 30:40", "UID 1:5 NOT UID 10:20 NOT UID 30:40" },
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen { "OR UID 1:5 NOT UID 10:20", "(OR UID 1:5 NOT UID 10:20)" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "OR UID 1:5 OR NOT UID 10:20 NOT UID 30:40", "(OR UID 1:5 NOT UID 10:20,30:40)" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "1:5 UID 10:20", "1:5 UID 10:20" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "1:5 NOT UID 10:20", "1:5 NOT UID 10:20" },
735259c24eda6f272c8e21eab0f4d0c6bb022fd6Timo Sirainen
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "BEFORE 03-Aug-2014 BEFORE 01-Aug-2014 BEFORE 02-Aug-2014", "BEFORE \"01-Aug-2014\"" },
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen { "OR BEFORE 01-Aug-2014 BEFORE 02-Aug-2014", "BEFORE \"02-Aug-2014\"" },
1b0cfbf3cc77a670b92fff5c30f7b1eb17a63ab1Timo Sirainen { "OR BEFORE 01-Aug-2014 OR BEFORE 03-Aug-2014 BEFORE 02-Aug-2014", "BEFORE \"03-Aug-2014\"" },
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen { "BEFORE 03-Aug-2014 NOT BEFORE 01-Aug-2014 BEFORE 02-Aug-2014", "BEFORE \"02-Aug-2014\" NOT BEFORE \"01-Aug-2014\"" },
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen { "SENTBEFORE 03-Aug-2014 SENTBEFORE 01-Aug-2014 SENTBEFORE 02-Aug-2014", "SENTBEFORE \"01-Aug-2014\"" },
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen { "SENTBEFORE 03-Aug-2014 BEFORE 01-Aug-2014 SENTBEFORE 02-Aug-2014", "SENTBEFORE \"02-Aug-2014\" BEFORE \"01-Aug-2014\"" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "ON 03-Aug-2014 ON 03-Aug-2014", "ON \"03-Aug-2014\"" },
85a4ae7e8df7ea45a7665828e5edf48a5fc85730Timo 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 */
85a4ae7e8df7ea45a7665828e5edf48a5fc85730Timo Sirainen { "OR ON 03-Aug-2014 ON 04-Aug-2014", "(OR ON \"03-Aug-2014\" ON \"04-Aug-2014\")" },
8e371a3ce32bd64288786855b8ce0cb63f19f7d1Timo Sirainen
8e371a3ce32bd64288786855b8ce0cb63f19f7d1Timo Sirainen { "SINCE 03-Aug-2014 SINCE 01-Aug-2014 SINCE 02-Aug-2014", "SINCE \"03-Aug-2014\"" },
8e371a3ce32bd64288786855b8ce0cb63f19f7d1Timo Sirainen { "OR SINCE 01-Aug-2014 SINCE 02-Aug-2014", "SINCE \"01-Aug-2014\"" },
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen { "OR SINCE 01-Aug-2014 OR SINCE 03-Aug-2014 SINCE 02-Aug-2014", "SINCE \"01-Aug-2014\"" },
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen { "SINCE 03-Aug-2014 NOT SINCE 01-Aug-2014 SINCE 02-Aug-2014", "SINCE \"03-Aug-2014\" NOT SINCE \"01-Aug-2014\"" },
2793e3bd31d212d6506686aa70773e13d9d98195Timo Sirainen { "SENTSINCE 03-Aug-2014 SENTSINCE 01-Aug-2014 SENTSINCE 02-Aug-2014", "SENTSINCE \"03-Aug-2014\"" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "SENTSINCE 03-Aug-2014 SINCE 01-Aug-2014 SENTSINCE 02-Aug-2014", "SENTSINCE \"03-Aug-2014\" SINCE \"01-Aug-2014\"" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "SMALLER 1 SMALLER 2", "SMALLER 1" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "OR SMALLER 1 SMALLER 2", "SMALLER 2" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "OR SMALLER 1 OR SMALLER 3 SMALLER 2", "SMALLER 3" },
e7f8009c974ed6a6a5a0e88633d98fff2867fa92Timo Sirainen { "SMALLER 3 NOT SMALLER 1 SMALLER 2", "SMALLER 2 NOT SMALLER 1" },
e7f8009c974ed6a6a5a0e88633d98fff2867fa92Timo Sirainen { "SMALLER 3 LARGER 5", "SMALLER 3 LARGER 5" }, /* this could be replaced with e.g. NOT ALL */
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "OR SMALLER 3 LARGER 5", "(OR SMALLER 3 LARGER 5)" },
e7f8009c974ed6a6a5a0e88633d98fff2867fa92Timo Sirainen
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "LARGER 3 LARGER 1 LARGER 2", "LARGER 3" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "OR LARGER 1 LARGER 2", "LARGER 1" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "OR LARGER 1 OR LARGER 3 LARGER 2", "LARGER 1" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "LARGER 3 NOT LARGER 1 LARGER 2", "LARGER 3 NOT LARGER 1" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "SUBJECT foo SUBJECT foo", "SUBJECT foo" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "SUBJECT foo SUBJECT foob", "SUBJECT foo SUBJECT foob" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "OR SUBJECT foo SUBJECT foo", "SUBJECT foo" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "FROM foo FROM foo", "FROM foo" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "FROM foo FROM bar", "FROM foo FROM bar" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "FROM foo TO foo", "FROM foo TO foo" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "TEXT foo TEXT foo", "TEXT foo" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "TEXT foo TEXT foob", "TEXT foo TEXT foob" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "OR TEXT foo TEXT foo", "TEXT foo" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "TEXT foo NOT TEXT foo TEXT foo NOT TEXT foo", "TEXT foo NOT TEXT foo" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "BODY foo BODY foo", "BODY foo" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "OR BODY foo BODY foo", "BODY foo" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "TEXT foo BODY foo", "TEXT foo BODY foo" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "OR ( TEXT foo OR TEXT foo TEXT foo ) ( TEXT foo ( TEXT foo ) )", "TEXT foo" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen /* OR: drop redundant args */
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "OR ( TEXT common1 TEXT unique1 ) TEXT common1", "TEXT common1" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "OR ( TEXT unique1 TEXT common1 ) TEXT common1", "TEXT common1" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "OR TEXT common1 ( TEXT common1 TEXT unique1 )", "TEXT common1" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "OR TEXT common1 ( TEXT unique1 TEXT common1 )", "TEXT common1" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "OR ( TEXT common1 TEXT common2 ) ( TEXT common1 TEXT common2 TEXT unique1 )", "TEXT common2 TEXT common1" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "OR TEXT common1 OR ( TEXT unique1 TEXT common1 ) ( TEXT unique3 TEXT common1 )", "TEXT common1" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen /* OR: extract common AND */
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "OR ( TEXT common1 TEXT unique1 ) ( TEXT common1 TEXT unique2 )", "(OR TEXT unique1 TEXT unique2) TEXT common1" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "OR ( TEXT unique1 TEXT common1 ) ( TEXT unique2 TEXT common1 )", "(OR TEXT unique1 TEXT unique2) TEXT common1" },
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen { "OR ( TEXT common1 TEXT unique1 ) ( TEXT unique2 TEXT common1 )", "(OR TEXT unique1 TEXT unique2) TEXT common1" },
88dc563319efecd6e68bad16b0d92672da05584aTimo Sirainen { "OR ( TEXT unique1 TEXT common1 ) ( TEXT common1 TEXT unique2 )", "(OR TEXT unique1 TEXT unique2) TEXT common1" },
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen
0fd246126fece57712566c725d6353f255f5fcfaTimo Sirainen { "OR ( TEXT unique1 TEXT common1 ) ( TEXT common1 TEXT unique2 TEXT unique3 )", "(OR TEXT unique1 (TEXT unique2 TEXT unique3)) TEXT common1" },
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen { "OR ( TEXT common1 TEXT common2 TEXT unique1 ) ( TEXT common1 TEXT common2 TEXT unique2 )", "(OR TEXT unique1 TEXT unique2) TEXT common2 TEXT common1" },
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo 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" },
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen /* non-matching cases */
d0ef8bc2b961a68dd0f75662c2160bd296b9476bTimo Sirainen { "OR ( TEXT unique1 TEXT unique2 ) TEXT unique3", "(OR (TEXT unique1 TEXT unique2) TEXT unique3)" },
f4616f1875297fb2f583d913c0f01b075bdecd5bTimo Sirainen { "OR ( TEXT unique1 TEXT unique2 ) ( TEXT unique3 TEXT unique4 )", "(OR (TEXT unique1 TEXT unique2) (TEXT unique3 TEXT unique4))" },
f4616f1875297fb2f583d913c0f01b075bdecd5bTimo 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)" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo 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))" },
f4616f1875297fb2f583d913c0f01b075bdecd5bTimo Sirainen
bc93929cdd9000ca560a5f42a27f50ab307f1efbTimo Sirainen /* SUB: drop redundant args */
1537d20b852cbbf0d6971790b84e0cce5ca61307Timo Sirainen { "( OR TEXT common1 TEXT unique1 ) TEXT common1", "TEXT common1" },
1537d20b852cbbf0d6971790b84e0cce5ca61307Timo Sirainen { "( OR TEXT unique1 TEXT common1 ) TEXT common1", "TEXT common1" },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { "TEXT common1 ( OR TEXT common1 TEXT unique1 )", "TEXT common1" },
bc93929cdd9000ca560a5f42a27f50ab307f1efbTimo Sirainen { "TEXT common1 ( OR TEXT unique1 TEXT common1 )", "TEXT common1" },
1537d20b852cbbf0d6971790b84e0cce5ca61307Timo Sirainen { "( OR TEXT common1 TEXT common2 ) ( OR TEXT common1 OR TEXT common2 TEXT unique1 )", "(OR TEXT common1 TEXT common2)" },
1537d20b852cbbf0d6971790b84e0cce5ca61307Timo Sirainen { "TEXT common1 ( OR TEXT unique1 TEXT common1 ) ( OR TEXT unique3 TEXT common1 )", "TEXT common1" },
1537d20b852cbbf0d6971790b84e0cce5ca61307Timo Sirainen { "OR ( TEXT common1 ( OR TEXT unique1 TEXT common1 ) ) TEXT unique1", "(OR TEXT common1 TEXT unique1)" },
1537d20b852cbbf0d6971790b84e0cce5ca61307Timo Sirainen};
1537d20b852cbbf0d6971790b84e0cce5ca61307Timo Sirainen
1537d20b852cbbf0d6971790b84e0cce5ca61307Timo Sirainenstatic struct mail_search_args *
bc93929cdd9000ca560a5f42a27f50ab307f1efbTimo Sirainentest_build_search_args(const char *args)
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen{
1537d20b852cbbf0d6971790b84e0cce5ca61307Timo Sirainen struct mail_search_parser *parser;
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen struct mail_search_args *sargs;
d54ab8987e482a8df250615b44f41fa040c38741Timo Sirainen const char *error, *charset = "UTF-8";
bc93929cdd9000ca560a5f42a27f50ab307f1efbTimo Sirainen
bc93929cdd9000ca560a5f42a27f50ab307f1efbTimo Sirainen parser = mail_search_parser_init_cmdline(t_strsplit(args, " "));
bc93929cdd9000ca560a5f42a27f50ab307f1efbTimo Sirainen if (mail_search_build(mail_search_register_get_imap(),
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen parser, &charset, &sargs, &error) < 0)
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen i_panic("%s", error);
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen mail_search_parser_deinit(&parser);
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen return sargs;
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen}
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainenstatic void test_mail_search_args_simplify(void)
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen{
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen struct mail_search_args *args;
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen string_t *str = t_str_new(256);
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen const char *error;
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen unsigned int i;
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen test_begin("mail search args simplify");
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen for (i = 0; i < N_ELEMENTS(tests); i++) {
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen args = test_build_search_args(tests[i].input);
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen mail_search_args_simplify(args);
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen str_truncate(str, 0);
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen test_assert(mail_search_args_to_imap(str, args->args, &error));
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen test_assert_idx(strcmp(str_c(str), tests[i].output) == 0, i);
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen mail_search_args_unref(&args);
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen }
a693adf01b5f9256b273bee0b38efb69bc2b0182Timo Sirainen test_end();
a693adf01b5f9256b273bee0b38efb69bc2b0182Timo Sirainen}
a693adf01b5f9256b273bee0b38efb69bc2b0182Timo Sirainen
a693adf01b5f9256b273bee0b38efb69bc2b0182Timo Sirainenint main(void)
a693adf01b5f9256b273bee0b38efb69bc2b0182Timo Sirainen{
a693adf01b5f9256b273bee0b38efb69bc2b0182Timo Sirainen static void (*test_functions[])(void) = {
a693adf01b5f9256b273bee0b38efb69bc2b0182Timo Sirainen test_mail_search_args_simplify,
a693adf01b5f9256b273bee0b38efb69bc2b0182Timo Sirainen NULL
a693adf01b5f9256b273bee0b38efb69bc2b0182Timo Sirainen };
a693adf01b5f9256b273bee0b38efb69bc2b0182Timo Sirainen
a693adf01b5f9256b273bee0b38efb69bc2b0182Timo Sirainen return test_run(test_functions);
a693adf01b5f9256b273bee0b38efb69bc2b0182Timo Sirainen}
a693adf01b5f9256b273bee0b38efb69bc2b0182Timo Sirainen