test-mail-search-args-imap.c revision 5b2062e40f54535b212e800ffc79de0e405d4560
76b43e4417bab52e913da39b5f5bc2a130d3f149Timo Sirainen/* Copyright (c) 2015-2017 Dovecot authors, see the included COPYING file */
ccd83028a34cc6e2b6370eb7ecf1cf25e717c2d3Timo Sirainenstatic const struct {
ccd83028a34cc6e2b6370eb7ecf1cf25e717c2d3Timo Sirainen { "ANSWERED FLAGGED DELETED SEEN DRAFT RECENT",
ccd83028a34cc6e2b6370eb7ecf1cf25e717c2d3Timo Sirainen "ANSWERED FLAGGED DELETED SEEN DRAFT RECENT" },
c4267cf4c40fb1f866b5958ff122ef836b8c5dfbTimo Sirainen { "BEFORE 20-May-2015", "BEFORE \"20-May-2015\"" },
c4267cf4c40fb1f866b5958ff122ef836b8c5dfbTimo Sirainen { "SINCE 20-May-2015", "SINCE \"20-May-2015\"" },
39e6fcc3e8b1ccb13087c232cb6bdea04d1a20a4Timo Sirainen { "SENTBEFORE 20-May-2015", "SENTBEFORE \"20-May-2015\"" },
c4267cf4c40fb1f866b5958ff122ef836b8c5dfbTimo Sirainen { "SENTON 20-May-2015", "SENTON \"20-May-2015\"" },
c4267cf4c40fb1f866b5958ff122ef836b8c5dfbTimo Sirainen { "SENTSINCE 20-May-2015", "SENTSINCE \"20-May-2015\"" },
c4267cf4c40fb1f866b5958ff122ef836b8c5dfbTimo Sirainen { "X-SAVEDBEFORE 20-May-2015", "X-SAVEDBEFORE \"20-May-2015\"" },
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainen { "X-SAVEDON 20-May-2015", "X-SAVEDON \"20-May-2015\"" },
c4267cf4c40fb1f866b5958ff122ef836b8c5dfbTimo Sirainen { "X-SAVEDSINCE 20-May-2015", "X-SAVEDSINCE \"20-May-2015\"" },
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen { "HEADER subjecT2 foo", "HEADER SUBJECT2 foo" },
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen { "INTHREAD REFERENCES seen", "INTHREAD REFERENCES (SEEN)" },
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen { "INTHREAD ORDEREDSUBJECT seen", "INTHREAD ORDEREDSUBJECT (SEEN)" },
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen { "INTHREAD REFS seen", "INTHREAD REFS (SEEN)" },
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen { "INTHREAD REFS ( OR text foo OR keyword bar seen )",
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen "INTHREAD REFS ((OR TEXT foo OR KEYWORD bar SEEN))" },
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen /* SEARCH=X-MIMEPART */
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen { "MIMEPART ( CHILD EXISTS )",
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen "MIMEPART CHILD EXISTS" },
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen { "MIMEPART ( CHILD EXISTS HEADER Comment Hopla )",
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen "MIMEPART (CHILD EXISTS HEADER COMMENT Hopla)" },
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen { "MIMEPART ( DESCRIPTION Frop ENCODING base64 )",
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen "MIMEPART (DESCRIPTION Frop ENCODING base64)" },
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen { "MIMEPART ( DISPOSITION TYPE attachment "
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen "DISPOSITION PARAM FILENAME frop.txt )",
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen "MIMEPART (DISPOSITION TYPE attachment "
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen "DISPOSITION PARAM FILENAME frop.txt)" },
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen { "MIMEPART ( ID <frop.example.com> LANGUAGE en )",
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen "MIMEPART (ID <frop.example.com> LANGUAGE en)" },
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen { "MIMEPART ( LOCATION http://www.dovecot.org )",
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen "MIMEPART LOCATION http://www.dovecot.org" },
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen { "MIMEPART NOT MD5 373def35afde6378efd6172dfeadfd", NULL },
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen { "MIMEPART OR PARAM charset utf-8 TYPE text",
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen "MIMEPART OR PARAM CHARSET utf-8 TYPE text" },
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen { "MIMEPART ( OR SIZE LARGER 25 SIZE SMALLER 1023 )",
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen "MIMEPART OR SIZE LARGER 25 SIZE SMALLER 1023" },
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen { "MIMEPART ( TYPE video SUBTYPE mpeg )",
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen "MIMEPART (TYPE video SUBTYPE mpeg)" },
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen { "( OR MIMEPART ( DEPTH 2 INDEX 1 ) MIMEPART ( DEPTH MAX 4 INDEX 3 ) )",
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen "(OR MIMEPART (DEPTH 2 INDEX 1) MIMEPART (DEPTH MAX 4 INDEX 3))" },
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen { "MIMEPART BODY frop MIMEPART TEXT frop", NULL },
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen { "MIMEPART ( CC appie BCC theo FROM leo REPLY-TO henk SENDER arie )",
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen "MIMEPART (CC appie BCC theo FROM leo REPLY-TO henk SENDER arie)" },
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen { "MIMEPART ( MESSAGE-ID <frop4222> IN-REPLY-TO <frop421> )",
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen "MIMEPART (MESSAGE-ID <frop4222> IN-REPLY-TO <frop421>)" },
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen { "MIMEPART ( SUBJECT Frop TO henkie SENTON 20-Feb-2017 )",
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen "MIMEPART (SUBJECT Frop TO henkie SENTON \"20-Feb-2017\")" },
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen { "MIMEPART ( OR SENTBEFORE 20-May-2015 SENTSINCE 20-Feb-2017 )",
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen "MIMEPART OR SENTBEFORE \"20-May-2015\" SENTSINCE \"20-Feb-2017\"" },
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen { "MIMEPART ( ID <frop> PARENT ID <friep> )",
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen "MIMEPART (ID <frop> PARENT (ID <friep>))" },
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen { "MIMEPART ( ID <frop> CHILD ( DESCRIPTION frop ID friep ) )",
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen "MIMEPART (ID <frop> CHILD (DESCRIPTION frop ID friep))" },
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen { "MIMEPART CHILD EXISTS MIMEPART PARENT EXISTS", NULL },
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainenstatic struct mail_search_arg test_failures[] = {
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen .date_type = MAIL_SEARCH_DATE_TYPE_SENT, .time = 86400-1 } },
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen .date_type = MAIL_SEARCH_DATE_TYPE_SENT, .time = 86400-1 } },
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen .date_type = MAIL_SEARCH_DATE_TYPE_SENT, .time = 86400-1 } },
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen .date_type = MAIL_SEARCH_DATE_TYPE_RECEIVED, .time = 86400-1 } },
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen .date_type = MAIL_SEARCH_DATE_TYPE_SAVED, .time = 86400-1 } },
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen .date_type = MAIL_SEARCH_DATE_TYPE_SAVED, .time = 86400-1 } },
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen .date_type = MAIL_SEARCH_DATE_TYPE_SAVED, .time = 86400-1 } }
c4267cf4c40fb1f866b5958ff122ef836b8c5dfbTimo Sirainen parser = mail_search_parser_init_cmdline(t_strsplit(args, " "));
c4267cf4c40fb1f866b5958ff122ef836b8c5dfbTimo Sirainen if (mail_search_build(mail_search_register_get_imap(),
bc3698b8892df8003b410daea6f5bbcd20433808Timo Sirainen unsigned int i;
923eb3dde28e4d8841c14fd6b4a69635b7070c3eTimo Sirainen ioloop_time = CURRENT_UNIX_TIME; /* YOUNGER/OLDER tests need this */
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen args = test_build_search_args(tests[i].input);
c4267cf4c40fb1f866b5958ff122ef836b8c5dfbTimo Sirainen test_assert_idx(mail_search_args_to_imap(str, args->args, &error), i);
c4267cf4c40fb1f866b5958ff122ef836b8c5dfbTimo Sirainen test_assert_idx(strcmp(str_c(str), output) == 0, i);
d756ebcfa96bd7cff02097c8f26df9df368b81b1Timo Sirainen for (i = 0; i < N_ELEMENTS(test_failures); i++)
ccb77e2f63626ec46e5745ef4f38baa8e8e504fcTimo Sirainen test_assert_idx(!mail_search_args_to_imap(str, &test_failures[i], &error), i);
bd74402ca1a39ec303075fefb1212d7e18a71531Timo Sirainen static void (*const test_functions[])(void) = {