Skip to content

Commit

Permalink
lib-mail: Improve test-message-address to test invalid addresses in l…
Browse files Browse the repository at this point in the history
…ists

Test in both a group and list of addresses.
  • Loading branch information
sirainen authored and GitLab committed Jun 7, 2017
1 parent 52818a0 commit f55b079
Showing 1 changed file with 47 additions and 21 deletions.
68 changes: 47 additions & 21 deletions src/lib-mail/test-message-address.c
Expand Up @@ -120,6 +120,10 @@ static void test_message_address(void)
/* other tests: */
{ "\"foo: <a@b>;,\" <user@domain>", NULL,
{ NULL, "foo: <a@b>;,", NULL, "user", "domain", FALSE } },
{ "<>", "",
{ NULL, NULL, NULL, "", "", TRUE } },
{ "<@>", "",
{ NULL, NULL, NULL, "", "", TRUE } },
};
static struct message_address group_prefix = {
NULL, NULL, NULL, "group", NULL, FALSE
Expand All @@ -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];
Expand All @@ -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");
Expand Down

0 comments on commit f55b079

Please sign in to comment.