From f55b07916c82db8b915b28252e44ce6fb2bd3080 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Wed, 7 Jun 2017 15:22:22 +0300 Subject: [PATCH] lib-mail: Improve test-message-address to test invalid addresses in lists Test in both a group and list of addresses. --- src/lib-mail/test-message-address.c | 68 ++++++++++++++++++++--------- 1 file changed, 47 insertions(+), 21 deletions(-) diff --git a/src/lib-mail/test-message-address.c b/src/lib-mail/test-message-address.c index 2b2e11121f..d0de25750a 100644 --- a/src/lib-mail/test-message-address.c +++ b/src/lib-mail/test-message-address.c @@ -120,6 +120,10 @@ static void test_message_address(void) /* other tests: */ { "\"foo: ;,\" ", NULL, { NULL, "foo: ;,", NULL, "user", "domain", FALSE } }, + { "<>", "", + { NULL, NULL, NULL, "", "", TRUE } }, + { "<@>", "", + { NULL, NULL, NULL, "", "", TRUE } }, }; static struct message_address group_prefix = { NULL, NULL, NULL, "group", NULL, FALSE @@ -135,7 +139,6 @@ static void test_message_address(void) test_begin("message address parsing"); str = t_str_new(128); group = t_str_new(256); - str_append(group, "group: "); for (i = 0; i < N_ELEMENTS(tests); i++) { const struct test *test = &tests[i]; @@ -144,38 +147,61 @@ static void test_message_address(void) test_assert_idx(addr != NULL && addr->next == NULL && cmp_addr(addr, &test->addr), i); + /* test the address alone */ str_truncate(str, 0); message_address_write(str, addr); wanted_string = test->wanted_output != NULL ? test->wanted_output : test->input; test_assert_idx(strcmp(str_c(str), wanted_string) == 0, i); - if (!test->addr.invalid_syntax) { - if (i != 0) { - if ((i % 2) == 0) + + /* test the address as a list of itself */ + for (unsigned int list_length = 2; list_length <= 5; list_length++) { + str_truncate(group, 0); + str_append(group, test->input); + for (unsigned int j = 1; j < list_length; j++) { + if ((j % 2) == 0) str_append(group, ","); else str_append(group, " , \n "); + str_append(group, test->input); } - str_append(group, test->input); - } - } - str_append_c(group, ';'); - test_end(); - test_begin("message address parsing with groups"); - addr = test_parse_address(str_c(group)); - test_assert(addr != NULL && cmp_addr(addr, &group_prefix)); - addr = addr->next; - for (i = 0; i < N_ELEMENTS(tests) && addr != NULL; i++) { - const struct test *test = &tests[i]; + addr = test_parse_address(str_c(group)); + for (unsigned int j = 0; j < list_length; j++) { + test_assert_idx(addr != NULL && + cmp_addr(addr, &test->addr), i); + if (addr != NULL) + addr = addr->next; + } + test_assert_idx(addr == NULL, i); + } - if (test->addr.invalid_syntax) - continue; - test_assert(cmp_addr(addr, &test->addr)); - addr = addr->next; + /* test the address as a group of itself */ + for (unsigned int list_length = 1; list_length <= 5; list_length++) { + str_truncate(group, 0); + str_printfa(group, "group: %s", test->input); + for (unsigned int j = 1; j < list_length; j++) { + if ((j % 2) == 0) + str_append(group, ","); + else + str_append(group, " , \n "); + str_append(group, test->input); + } + str_append_c(group, ';'); + + addr = test_parse_address(str_c(group)); + test_assert(addr != NULL && cmp_addr(addr, &group_prefix)); + addr = addr->next; + for (unsigned int j = 0; j < list_length; j++) { + test_assert_idx(addr != NULL && + cmp_addr(addr, &test->addr), i); + if (addr != NULL) + addr = addr->next; + } + test_assert_idx(addr != NULL && addr->next == NULL && + cmp_addr(addr, &group_suffix), i); + } } - test_assert(addr != NULL && addr->next == NULL && - cmp_addr(addr, &group_suffix)); test_end(); test_begin("message address parsing with empty group"); -- 2.47.3