]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: Clarify *_strsplit_spaces() and add unit test
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Tue, 14 Feb 2017 08:54:29 +0000 (10:54 +0200)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Fri, 17 Feb 2017 09:32:31 +0000 (11:32 +0200)
src/lib/strfuncs.h
src/lib/test-strfuncs.c

index 65203f25953a2ce9244b51f6b202720290f5ef94..d48d28950da0bbf30b184908f7199eb495788570 100644 (file)
@@ -74,7 +74,8 @@ char **p_strsplit(pool_t pool, const char *data, const char *separators)
 const char **t_strsplit(const char *data, const char *separators)
        ATTR_MALLOC ATTR_RETURNS_NONNULL;
 /* like p_strsplit(), but treats multiple adjacent separators as a single
-   separator. */
+   separator. separators at the beginning or at the end of the string are also
+   ignored, so it's not possible for the result to have any empty strings. */
 char **p_strsplit_spaces(pool_t pool, const char *data, const char *separators)
        ATTR_MALLOC ATTR_RETURNS_NONNULL;
 const char **t_strsplit_spaces(const char *data, const char *separators)
index 6622942831b45b7a0fa400a2a83424b1fd6e6046..bb58d0670cec445b82198fef86522080c221136f 100644 (file)
@@ -92,6 +92,26 @@ static void test_t_strsplit_tab(void)
                }
                strsplit_verify(buf);
        }
+}
+
+static void test_t_strsplit_spaces(void)
+{
+       const char *const *args;
+
+       test_begin("t_strsplit_spaces");
+       /* empty strings */
+       args = t_strsplit_spaces("", "\n");
+       test_assert(args[0] == NULL);
+       args = t_strsplit_spaces("\n", "\n");
+       test_assert(args[0] == NULL);
+       args = t_strsplit_spaces("\n\n", "\n");
+       test_assert(args[0] == NULL);
+
+       /* multiple separators */
+       args = t_strsplit_spaces(" , ,   ,str1  ,  ,,, , str2   , ", " ,");
+       test_assert(strcmp(args[0], "str1") == 0);
+       test_assert(strcmp(args[1], "str2") == 0);
+       test_assert(args[2] == NULL);
        test_end();
 }
 
@@ -220,6 +240,7 @@ void test_strfuncs(void)
        test_p_strarray_dup();
        test_t_strsplit();
        test_t_strsplit_tab();
+       test_t_strsplit_spaces();
        test_t_str_replace();
        /*test_t_str_trim();*/
        test_t_str_ltrim();