about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--src/command/command.c29
-rw-r--r--src/common.c22
-rw-r--r--src/common.h1
-rw-r--r--tests/test_common.c44
-rw-r--r--tests/test_common.h6
-rw-r--r--tests/testsuite.c4
6 files changed, 79 insertions, 27 deletions
diff --git a/src/command/command.c b/src/command/command.c
index 4a8c73e9..9f17596b 100644
--- a/src/command/command.c
+++ b/src/command/command.c
@@ -76,8 +76,6 @@ static gboolean _cmd_execute_alias(const char * const inp, gboolean *ran);
 
 static char * _cmd_complete_parameters(const char * const input);
 
-static char * _strip_quotes_from_names(const char * const input);
-
 static char * _sub_autocomplete(const char * const input);
 static char * _notify_autocomplete(const char * const input);
 static char * _theme_autocomplete(const char * const input);
@@ -1970,7 +1968,7 @@ _cmd_complete_parameters(const char * const input)
             gchar *nick_choices[] = { "/msg", "/info", "/caps", "/status", "/software" } ;
 
             // Remove quote character before and after names when doing autocomplete
-            char *unquoted = _strip_quotes_from_names(input);
+            char *unquoted = strip_arg_quotes(input);
             for (i = 0; i < ARRAY_SIZE(nick_choices); i++) {
                 result = autocomplete_param_with_ac(unquoted, nick_choices[i], nick_ac, TRUE);
                 if (result) {
@@ -1985,7 +1983,7 @@ _cmd_complete_parameters(const char * const input)
     } else {
         gchar *contact_choices[] = { "/msg", "/info", "/status" };
         // Remove quote character before and after names when doing autocomplete
-        char *unquoted = _strip_quotes_from_names(input);
+        char *unquoted = strip_arg_quotes(input);
         for (i = 0; i < ARRAY_SIZE(contact_choices); i++) {
             result = autocomplete_param_with_func(unquoted, contact_choices[i], roster_contact_autocomplete);
             if (result) {
@@ -3052,25 +3050,4 @@ command_docgen(void)
     fclose(toc_fragment);
     fclose(main_fragment);
     g_list_free(cmds);
-}
-
-static char *
-_strip_quotes_from_names(const char * const input) {
-    char *unquoted = strdup(input);
-
-    // Remove starting quote if it exists
-    if(strchr(unquoted, '"') != NULL) {
-        if(strchr(unquoted, ' ') + 1 == strchr(unquoted, '"')) {
-            memmove(strchr(unquoted, '"'), strchr(unquoted, '"')+1, strchr(unquoted, '\0') - strchr(unquoted, '"'));
-        }
-    }
-
-    // Remove ending quote if it exists
-    if(strchr(unquoted, '"') != NULL) {
-        if(strchr(unquoted, '\0') - 1 == strchr(unquoted, '"')) {
-            memmove(strchr(unquoted, '"'), strchr(unquoted, '"')+1, strchr(unquoted, '\0') - strchr(unquoted, '"'));
-        }
-    }
-
-    return unquoted;
-}
+}
\ No newline at end of file
diff --git a/src/common.c b/src/common.c
index 7638da31..95deecbb 100644
--- a/src/common.c
+++ b/src/common.c
@@ -566,3 +566,25 @@ get_file_or_linked(char *loc, char *basedir)
 
     return true_loc;
 }
+
+char *
+strip_arg_quotes(const char * const input)
+{
+    char *unquoted = strdup(input);
+
+    // Remove starting quote if it exists
+    if(strchr(unquoted, '"') != NULL) {
+        if(strchr(unquoted, ' ') + 1 == strchr(unquoted, '"')) {
+            memmove(strchr(unquoted, '"'), strchr(unquoted, '"')+1, strchr(unquoted, '\0') - strchr(unquoted, '"'));
+        }
+    }
+
+    // Remove ending quote if it exists
+    if(strchr(unquoted, '"') != NULL) {
+        if(strchr(unquoted, '\0') - 1 == strchr(unquoted, '"')) {
+            memmove(strchr(unquoted, '"'), strchr(unquoted, '"')+1, strchr(unquoted, '\0') - strchr(unquoted, '"'));
+        }
+    }
+
+    return unquoted;
+}
\ No newline at end of file
diff --git a/src/common.h b/src/common.h
index 26d4a99a..c22706ec 100644
--- a/src/common.h
+++ b/src/common.h
@@ -123,5 +123,6 @@ int cmp_win_num(gconstpointer a, gconstpointer b);
 int get_next_available_win_num(GList *used);
 
 char* get_file_or_linked(char *loc, char *basedir);
+char * strip_arg_quotes(const char * const input);
 
 #endif
diff --git a/tests/test_common.c b/tests/test_common.c
index 0c4530a0..980f2198 100644
--- a/tests/test_common.c
+++ b/tests/test_common.c
@@ -587,3 +587,47 @@ void utf8_display_len_all_wide(void **state)
     assert_int_equal(8, result);
 }
 
+void strip_quotes_does_nothing_when_no_quoted(void **state)
+{
+    char *input = "/cmd test string";
+
+    char *result = strip_arg_quotes(input);
+
+    assert_string_equal("/cmd test string", result);
+
+    free(result);
+}
+
+void strip_quotes_strips_first(void **state)
+{
+    char *input = "/cmd \"test string";
+
+    char *result = strip_arg_quotes(input);
+
+    assert_string_equal("/cmd test string", result);
+    
+    free(result);
+}
+
+void strip_quotes_strips_last(void **state)
+{
+    char *input = "/cmd test string\"";
+
+    char *result = strip_arg_quotes(input);
+
+    assert_string_equal("/cmd test string", result);
+
+    free(result);
+}
+
+void strip_quotes_strips_both(void **state)
+{
+    char *input = "/cmd \"test string\"";
+
+    char *result = strip_arg_quotes(input);
+
+    assert_string_equal("/cmd test string", result);
+
+    free(result);
+}
+
diff --git a/tests/test_common.h b/tests/test_common.h
index 1866e73d..b4b98e5a 100644
--- a/tests/test_common.h
+++ b/tests/test_common.h
@@ -51,4 +51,8 @@ void utf8_display_len_1_non_wide(void **state);
 void utf8_display_len_1_wide(void **state);
 void utf8_display_len_non_wide(void **state);
 void utf8_display_len_wide(void **state);
-void utf8_display_len_all_wide(void **state);
\ No newline at end of file
+void utf8_display_len_all_wide(void **state);
+void strip_quotes_does_nothing_when_no_quoted(void **state);
+void strip_quotes_strips_first(void **state);
+void strip_quotes_strips_last(void **state);
+void strip_quotes_strips_both(void **state);
diff --git a/tests/testsuite.c b/tests/testsuite.c
index cf511c59..ddfb45cd 100644
--- a/tests/testsuite.c
+++ b/tests/testsuite.c
@@ -91,6 +91,10 @@ int main(int argc, char* argv[]) {
         unit_test(utf8_display_len_non_wide),
         unit_test(utf8_display_len_wide),
         unit_test(utf8_display_len_all_wide),
+        unit_test(strip_quotes_does_nothing_when_no_quoted),
+        unit_test(strip_quotes_strips_first),
+        unit_test(strip_quotes_strips_last),
+        unit_test(strip_quotes_strips_both),
 
         unit_test(clear_empty),
         unit_test(reset_after_create),