changeset 22174:935729d0802e

lib-mail: Improve test-message-address to test invalid addresses in lists Test in both a group and list of addresses.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Wed, 07 Jun 2017 15:22:22 +0300
parents ce23a868bf13
children 755d206606df
files src/lib-mail/test-message-address.c
diffstat 1 files changed, 48 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-mail/test-message-address.c	Wed Jun 07 15:21:10 2017 +0300
+++ b/src/lib-mail/test-message-address.c	Wed Jun 07 15:22:22 2017 +0300
@@ -120,6 +120,10 @@
 		/* 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
@@ -135,7 +139,6 @@
 	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 @@
 		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);
+
+			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);
+		}
+
+		/* 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);
 		}
 	}
-	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];
-
-		if (test->addr.invalid_syntax)
-			continue;
-		test_assert(cmp_addr(addr, &test->addr));
-		addr = addr->next;
-	}
-	test_assert(addr != NULL && addr->next == NULL &&
-		    cmp_addr(addr, &group_suffix));
 	test_end();
 
 	test_begin("message address parsing with empty group");