From 2442ee791e0ab49e1897b45191e021b81dd8be3b Mon Sep 17 00:00:00 2001 From: "Rafael G. Martins" Date: Sun, 1 Jan 2017 03:41:41 +0100 Subject: config-parser: allow quoted values --- tests/common/check_config_parser.c | 115 +++++++++++++++++++++++++++++++++++-- 1 file changed, 111 insertions(+), 4 deletions(-) (limited to 'tests/common/check_config_parser.c') diff --git a/tests/common/check_config_parser.c b/tests/common/check_config_parser.c index a04dc6d..7c3cb4a 100644 --- a/tests/common/check_config_parser.c +++ b/tests/common/check_config_parser.c @@ -142,7 +142,7 @@ test_config_section_multiple_keys(void **state) const char *a = "[foo]\n" "asd = zxc\n" - "qwe = rty\n" + "qwe = rty \n" "zxc = vbn"; bc_error_t *err = NULL; bc_config_t *c = bc_config_parse(a, strlen(a), NULL, &err); @@ -172,7 +172,7 @@ test_config_section_multiple_keys(void **state) a = "[foo]\n" "asd = zxc\n" - "qwe = rty\n" + "qwe = rty \n" "zxc = vbn\n"; err = NULL; c = bc_config_parse(a, strlen(a), NULL, &err); @@ -202,7 +202,7 @@ test_config_section_multiple_keys(void **state) a = "[foo]\r\n" "asd = zxc\r\n" - "qwe = rty\r\n" + "qwe = rty \r\n" "zxc = vbn\r\n"; err = NULL; c = bc_config_parse(a, strlen(a), NULL, &err); @@ -370,7 +370,7 @@ test_config_section_list(void **state) "\n" "[bar]\n" "lol = hehe\n" - "asdasdadssad"; + " asdasdadssad "; bc_error_t *err = NULL; const char *sections[] = {"bar", NULL}; bc_config_t *c = bc_config_parse(a, strlen(a), sections, &err); @@ -494,6 +494,112 @@ test_config_section_list(void **state) } +static void +test_config_quoted_values(void **state) +{ + const char *a = + "[foo]\n" + "a = \"lol\"\n" + "b = \"lo\\\"l\"\n" + "c = \"lo'l\"\n" + "d = 'lol'\n" + "e = 'lo\\'l'\n" + "f = 'lo\"l'\n" + "g = \\\\asd\n" + "h = \"\\\\asd\"\n" + "i = '\\\\asd'\n"; + bc_error_t *err = NULL; + bc_config_t *c = bc_config_parse(a, strlen(a), NULL, &err); + assert_null(err); + assert_non_null(c); + assert_non_null(c->root); + assert_int_equal(bc_trie_size(c->root), 1); + char **s = bc_config_list_sections(c); + assert_non_null(s); + assert_int_equal(bc_strv_length(s), 1); + assert_string_equal(s[0], "foo"); + assert_null(s[1]); + bc_strv_free(s); + char **k = bc_config_list_keys(c, "foo"); + assert_non_null(k); + assert_int_equal(bc_strv_length(k), 9); + assert_string_equal(k[0], "a"); + assert_string_equal(k[1], "b"); + assert_string_equal(k[2], "c"); + assert_string_equal(k[3], "d"); + assert_string_equal(k[4], "e"); + assert_string_equal(k[5], "f"); + assert_string_equal(k[6], "g"); + assert_string_equal(k[7], "h"); + assert_string_equal(k[8], "i"); + assert_null(k[9]); + bc_strv_free(k); + assert_string_equal(bc_config_get(c, "foo", "a"), "lol"); + assert_string_equal(bc_config_get(c, "foo", "b"), "lo\"l"); + assert_string_equal(bc_config_get(c, "foo", "c"), "lo'l"); + assert_string_equal(bc_config_get(c, "foo", "d"), "lol"); + assert_string_equal(bc_config_get(c, "foo", "e"), "lo'l"); + assert_string_equal(bc_config_get(c, "foo", "f"), "lo\"l"); + assert_string_equal(bc_config_get(c, "foo", "g"), "\\asd"); + assert_string_equal(bc_config_get(c, "foo", "h"), "\\asd"); + assert_string_equal(bc_config_get(c, "foo", "i"), "\\asd"); + bc_config_free(c); + + a = + "[foo]\n" + "\"lol\"\n" + "\"lo\\\"l\"\n" + "\"lo'l\"\n" + "'lol'\n" + "'lo\\'l'\n" + "'lo\"l'\n" + "\\\\asd\n" + "\"\\\\asd\"\n" + "'\\\\asd'\n" + "\n" + "[bar]\n" + "'lol = hehe'\n" + "\" asdasdadssad \""; + err = NULL; + const char *sections[] = {"foo", "bar", NULL}; + c = bc_config_parse(a, strlen(a), sections, &err); + assert_null(err); + assert_non_null(c); + assert_non_null(c->root); + assert_int_equal(bc_trie_size(c->root), 2); + s = bc_config_list_sections(c); + assert_non_null(s); + assert_int_equal(bc_strv_length(s), 2); + assert_string_equal(s[0], "foo"); + assert_string_equal(s[1], "bar"); + assert_null(s[2]); + bc_strv_free(s); + char **bar = bc_config_get_list(c, "foo"); + assert_string_equal(bar[0], "lol"); + assert_string_equal(bar[1], "lo\"l"); + assert_string_equal(bar[2], "lo'l"); + assert_string_equal(bar[3], "lol"); + assert_string_equal(bar[4], "lo'l"); + assert_string_equal(bar[5], "lo\"l"); + assert_string_equal(bar[6], "\\asd"); + assert_string_equal(bar[7], "\\asd"); + assert_string_equal(bar[8], "\\asd"); + assert_null(bar[9]); + bc_strv_free(bar); + bar = bc_config_get_list(c, "bar"); + assert_non_null(bar); + assert_string_equal(bar[0], "lol = hehe"); + assert_string_equal(bar[1], " asdasdadssad "); + assert_null(bar[2]); + bc_strv_free(bar); + k = bc_config_list_keys(c, "foo"); + assert_null(k); + k = bc_config_list_keys(c, "bar"); + assert_null(k); + bc_config_free(c); +} + + static void test_config_error_start(void **state) { @@ -571,6 +677,7 @@ main(void) unit_test(test_config_section_multiple_keys), unit_test(test_config_section_multiple_sections), unit_test(test_config_section_list), + unit_test(test_config_quoted_values), unit_test(test_config_error_start), unit_test(test_config_error_section_with_newline), unit_test(test_config_error_key_without_value), -- cgit v1.2.3-18-g5258