static void test_message_address(void)
{
static const char *input[] = {
- "user@domain",
- "<user@domain>",
- "foo bar <user@domain>",
- "\"foo bar\" <user@domain>",
- "<@route:user@domain>",
- "<@route@route2:user@domain>",
- "hello <@route ,@route2:user@domain>",
- "user (hello)",
- "hello <user>",
- "@domain"
+ "user@domain", NULL,
+ "<user@domain>", "user@domain",
+ "foo bar <user@domain>", NULL,
+ "\"foo bar\" <user@domain>", "foo bar <user@domain>",
+ "<@route:user@domain>", NULL,
+ "<@route@route2:user@domain>", "<@route,@route2:user@domain>",
+ "hello <@route ,@route2:user@domain>", "hello <@route,@route2:user@domain>",
+ "user (hello)", NULL,
+ "hello <user>", NULL,
+ "@domain", NULL
};
static struct message_address group_prefix = {
NULL, NULL, NULL, "group", NULL, FALSE
{ NULL, NULL, NULL, "", "domain", TRUE }
};
struct message_address *addr;
- string_t *group;
+ string_t *str, *group;
+ const char *wanted_string;
unsigned int i;
- bool success;
+ i_assert(N_ELEMENTS(input) == N_ELEMENTS(output)*2);
+
+ 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(input); i++) {
+ for (i = 0; i < N_ELEMENTS(output); i++) {
addr = message_address_parse(pool_datastack_create(),
- (const unsigned char *)input[i],
- strlen(input[i]), -1U, FALSE);
- success = addr != NULL && addr->next == NULL &&
- cmp_addr(addr, &output[i]);
- test_out(t_strdup_printf("message_address_parse(%d)", i),
- success);
+ (const unsigned char *)input[i*2],
+ strlen(input[i*2]), -1U, FALSE);
+ test_assert(addr != NULL && addr->next == NULL &&
+ cmp_addr(addr, &output[i]));
if (!output[i].invalid_syntax) {
+ str_truncate(str, 0);
+ message_address_write(str, addr);
+ wanted_string = input[i*2+1] != NULL ?
+ input[i*2+1] : input[i*2];
+ test_assert(strcmp(str_c(str), wanted_string) == 0);
if (i != 0) {
if ((i % 2) == 0)
str_append(group, ",");
else
str_append(group, " , \n ");
}
- str_append(group, input[i]);
+ str_append(group, input[i*2]);
}
}
str_append_c(group, ';');
+ test_end();
+ test_begin("message address parsing with groups");
addr = message_address_parse(pool_datastack_create(), str_data(group),
str_len(group), -1U, FALSE);
- success = addr != NULL && cmp_addr(addr, &group_prefix);
+ test_assert(addr != NULL && cmp_addr(addr, &group_prefix));
addr = addr->next;
- for (i = 0; i < N_ELEMENTS(input) && addr != NULL; i++) {
+ for (i = 0; i < N_ELEMENTS(output) && addr != NULL; i++) {
if (output[i].invalid_syntax)
continue;
- if (!cmp_addr(addr, &output[i])) {
- success = FALSE;
- break;
- }
+ test_assert(cmp_addr(addr, &output[i]));
addr = addr->next;
}
- if (addr == NULL || addr->next != NULL ||
- !cmp_addr(addr, &group_suffix))
- success = FALSE;
- test_out("message_address_parse(group)", success);
+ test_assert(addr != NULL && addr->next == NULL &&
+ cmp_addr(addr, &group_suffix));
+ test_end();
+
+ test_begin("message address parsing with empty group");
+ str_truncate(group, 0);
+ str_append(group, "group:;");
+ addr = message_address_parse(pool_datastack_create(), str_data(group),
+ str_len(group), -1U, FALSE);
+ test_assert(addr != NULL && cmp_addr(addr, &group_prefix));
+ addr = addr->next;
+ test_assert(addr != NULL && addr->next == NULL &&
+ cmp_addr(addr, &group_suffix));
+ test_end();
}
int main(void)