diff options
author | James Booth <boothj5@gmail.com> | 2013-08-27 00:17:12 +0100 |
---|---|---|
committer | James Booth <boothj5@gmail.com> | 2013-08-27 00:17:12 +0100 |
commit | fccab1cd9417f830195189b21dfc73ac6ba13bb1 (patch) | |
tree | dcfdb396ffb892c9c5c117a2bf7c3cab4a118579 | |
parent | 080515fe85090d1fb1d7bbeec049755e228df790 (diff) | |
parent | bac97125a33aeacc9d1bc70c557ee53c2c3459d4 (diff) | |
download | profani-tty-fccab1cd9417f830195189b21dfc73ac6ba13bb1.tar.gz |
Merge branch 'master' into otr
-rw-r--r-- | src/tools/parser.c | 2 | ||||
-rw-r--r-- | tests/test_parser.c | 39 |
2 files changed, 40 insertions, 1 deletions
diff --git a/src/tools/parser.c b/src/tools/parser.c index dabf7128..f273923a 100644 --- a/src/tools/parser.c +++ b/src/tools/parser.c @@ -210,7 +210,7 @@ parse_args_with_freetext(const char * const inp, int min, int max) } else { in_token = TRUE; num_tokens++; - if (num_tokens == max + 1) { + if ((num_tokens == max + 1) && (curr_uni != '"')) { in_freetext = TRUE; } else if (curr_uni == '"') { in_quotes = TRUE; diff --git a/tests/test_parser.c b/tests/test_parser.c index 6df5eb1d..6295aafd 100644 --- a/tests/test_parser.c +++ b/tests/test_parser.c @@ -293,6 +293,42 @@ parse_cmd_with_quoted_freetext(void) } void +parse_cmd_with_third_arg_quoted_0_min_3_max(void) +{ + char *inp = "/group add friends \"The User\""; + gchar **result = parse_args_with_freetext(inp, 0, 3); + + assert_int_equals(3, g_strv_length(result)); + assert_string_equals("add", result[0]); + assert_string_equals("friends", result[1]); + assert_string_equals("The User", result[2]); +} + +void +parse_cmd_with_second_arg_quoted_0_min_3_max(void) +{ + char *inp = "/group add \"The Group\" friend"; + gchar **result = parse_args_with_freetext(inp, 0, 3); + + assert_int_equals(3, g_strv_length(result)); + assert_string_equals("add", result[0]); + assert_string_equals("The Group", result[1]); + assert_string_equals("friend", result[2]); +} + +void +parse_cmd_with_second_and_third_arg_quoted_0_min_3_max(void) +{ + char *inp = "/group add \"The Group\" \"The User\""; + gchar **result = parse_args_with_freetext(inp, 0, 3); + + assert_int_equals(3, g_strv_length(result)); + assert_string_equals("add", result[0]); + assert_string_equals("The Group", result[1]); + assert_string_equals("The User", result[2]); +} + +void count_one_token(void) { char *inp = "one"; @@ -451,4 +487,7 @@ register_parser_tests(void) TEST(get_first_two_of_three_first_quoted); TEST(get_first_two_of_three_second_quoted); TEST(get_first_two_of_three_first_and_second_quoted); + TEST(parse_cmd_with_third_arg_quoted_0_min_3_max); + TEST(parse_cmd_with_second_arg_quoted_0_min_3_max); + TEST(parse_cmd_with_second_and_third_arg_quoted_0_min_3_max); } |