chiark / gitweb /
test: add a few tests and tidy up
authorThomas Hindoe Paaboel Andersen <phomes@gmail.com>
Wed, 6 Feb 2013 20:15:23 +0000 (21:15 +0100)
committerThomas Hindoe Paaboel Andersen <phomes@gmail.com>
Wed, 6 Feb 2013 20:15:23 +0000 (21:15 +0100)
adds test of:
strv_find
strv_find_prefix
strv_overlap
strv_sort
streq_ptr
first_word

Splits tests of util.c into own file to avoid clutter as we add more.

Removed a few prints and uses _cleanup_free_ to make the tests more focused.

.gitignore
Makefile.am
src/test/test-strv.c
src/test/test-util.c [new file with mode: 0644]

index 03ed554..6c2944b 100644 (file)
 /test-udev
 /test-unit-file
 /test-unit-name
+/test-util
 /test-watchdog
 /timedatectl
 /udevadm
index 88662c0..93fd377 100644 (file)
@@ -1231,6 +1231,7 @@ noinst_tests += \
        test-strv \
        test-unit-name \
        test-unit-file \
+       test-util \
        test-date \
        test-sleep \
        test-replace-var \
@@ -1314,6 +1315,15 @@ test_unit_file_CFLAGS = \
 test_unit_file_LDADD = \
        libsystemd-core.la
 
+test_util_SOURCES = \
+       src/test/test-util.c
+
+test_util_CFLAGS = \
+       $(AM_CFLAGS)
+
+test_util_LDADD = \
+       libsystemd-core.la
+
 test_log_SOURCES = \
        src/test/test-log.c
 
index 7898ea7..1df8157 100644 (file)
@@ -4,6 +4,7 @@
   This file is part of systemd.
 
   Copyright 2010 Lennart Poettering
+  Copyright 2013 Thomas H.P. Andersen
 
   systemd is free software; you can redistribute it and/or modify it
   under the terms of the GNU Lesser General Public License as published by
@@ -39,22 +40,35 @@ static void test_specifier_printf(void) {
         free(w);
 }
 
-static void test_foreach_word_quoted(void) {
-        char *w, *state;
-        size_t l;
-        const char test[] = "test a b c 'd' e '' '' hhh '' ''";
-        printf("<%s>\n", test);
-        FOREACH_WORD_QUOTED(w, l, test, state) {
-                char *t;
-
-                assert_se(t = strndup(w, l));
-                printf("<%s>\n", t);
-                free(t);
-        }
+static void test_strv_find(void) {
+        const char * const input_table[] = {
+                "one",
+                "two",
+                "three",
+                NULL
+        };
+
+        assert(strv_find((char **)input_table, "three"));
+        assert(!strv_find((char **)input_table, "four"));
+}
+
+static void test_strv_find_prefix(void) {
+        const char * const input_table[] = {
+                "one",
+                "two",
+                "three",
+                NULL
+        };
+
+        assert(strv_find_prefix((char **)input_table, "o"));
+        assert(strv_find_prefix((char **)input_table, "one"));
+        assert(strv_find_prefix((char **)input_table, ""));
+        assert(!strv_find_prefix((char **)input_table, "xxx"));
+        assert(!strv_find_prefix((char **)input_table, "onee"));
 }
 
 static void test_strv_join(void) {
-        char *r;
+        _cleanup_free_ char *p = NULL, *q = NULL, *r = NULL, *s = NULL, *t = NULL;
 
         const char * const input_table_multiple[] = {
                 "one",
@@ -70,52 +84,70 @@ static void test_strv_join(void) {
                 NULL
         };
 
-        r = strv_join((char **)input_table_multiple, ", ");
-        assert_se(streq(r, "one, two, three"));
-        puts(r);
-        free(r);
+        p = strv_join((char **)input_table_multiple, ", ");
+        assert(streq(p, "one, two, three"));
 
-        r = strv_join((char **)input_table_multiple, ";");
-        assert_se(streq(r, "one;two;three"));
-        puts(r);
-        free(r);
+        q = strv_join((char **)input_table_multiple, ";");
+        assert(streq(q, "one;two;three"));
 
         r = strv_join((char **)input_table_multiple, NULL);
-        assert_se(streq(r, "one two three"));
-        puts(r);
-        free(r);
-
-        r = strv_join((char **)input_table_one, ", ");
-        assert_se(streq(r, "one"));
-        puts(r);
-        free(r);
-
-        r = strv_join((char **)input_table_none, ", ");
-        assert_se(streq(r, ""));
-        puts(r);
-        free(r);
+        assert(streq(r, "one two three"));
+
+        s = strv_join((char **)input_table_one, ", ");
+        assert(streq(s, "one"));
+
+        t = strv_join((char **)input_table_none, ", ");
+        assert(streq(t, ""));
 }
 
-static void test_default_term_for_tty(void) {
-        printf("%s\n", default_term_for_tty("/dev/tty23"));
-        printf("%s\n", default_term_for_tty("/dev/ttyS23"));
-        printf("%s\n", default_term_for_tty("/dev/tty0"));
-        printf("%s\n", default_term_for_tty("/dev/pty0"));
-        printf("%s\n", default_term_for_tty("/dev/pts/0"));
-        printf("%s\n", default_term_for_tty("/dev/console"));
-        printf("%s\n", default_term_for_tty("tty23"));
-        printf("%s\n", default_term_for_tty("ttyS23"));
-        printf("%s\n", default_term_for_tty("tty0"));
-        printf("%s\n", default_term_for_tty("pty0"));
-        printf("%s\n", default_term_for_tty("pts/0"));
-        printf("%s\n", default_term_for_tty("console"));
+static void test_strv_overlap(void) {
+        const char * const input_table[] = {
+                "one",
+                "two",
+                "three",
+                NULL
+        };
+        const char * const input_table_overlap[] = {
+                "two",
+                NULL
+        };
+        const char * const input_table_unique[] = {
+                "four",
+                "five",
+                "six",
+                NULL
+        };
+
+        assert(strv_overlap((char **)input_table, (char**)input_table_overlap));
+        assert(!strv_overlap((char **)input_table, (char**)input_table_unique));
+}
+
+static void test_strv_sort(void) {
+        const char * const input_table[] = {
+                "durian",
+                "apple",
+                "citrus",
+                 "CAPITAL LETTERS FIRST",
+                "banana",
+                NULL
+        };
+
+        strv_sort((char **)input_table);
+
+        assert(streq(input_table[0], "CAPITAL LETTERS FIRST"));
+        assert(streq(input_table[1], "apple"));
+        assert(streq(input_table[2], "banana"));
+        assert(streq(input_table[3], "citrus"));
+        assert(streq(input_table[4], "durian"));
 }
 
 int main(int argc, char *argv[]) {
-        test_default_term_for_tty();
-        test_foreach_word_quoted();
         test_specifier_printf();
+        test_strv_find();
+        test_strv_find_prefix();
         test_strv_join();
+        test_strv_overlap();
+        test_strv_sort();
 
         return 0;
 }
diff --git a/src/test/test-util.c b/src/test/test-util.c
new file mode 100644 (file)
index 0000000..ebbdcfc
--- /dev/null
@@ -0,0 +1,82 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+  This file is part of systemd.
+
+  Copyright 2010 Lennart Poettering
+  Copyright 2013 Thomas H.P. Andersen
+
+  systemd is free software; you can redistribute it and/or modify it
+  under the terms of the GNU Lesser General Public License as published by
+  the Free Software Foundation; either version 2.1 of the License, or
+  (at your option) any later version.
+
+  systemd is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General Public License
+  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <string.h>
+
+#include "util.h"
+
+static void test_streq_ptr(void) {
+        assert(streq_ptr(NULL, NULL));
+        assert(!streq_ptr("abc", "cdef"));
+}
+
+static void test_first_word(void) {
+        assert(first_word("Hello", ""));
+        assert(first_word("Hello", "Hello"));
+        assert(first_word("Hello world", "Hello"));
+        assert(first_word("Hello\tworld", "Hello"));
+        assert(first_word("Hello\nworld", "Hello"));
+        assert(first_word("Hello\rworld", "Hello"));
+        assert(first_word("Hello ", "Hello"));
+
+        assert(!first_word("Hello", "Hellooo"));
+        assert(!first_word("Hello", "xxxxx"));
+        assert(!first_word("Hellooo", "Hello"));
+}
+
+static void test_foreach_word_quoted(void) {
+        char *w, *state;
+        size_t l;
+        const char test[] = "test a b c 'd' e '' '' hhh '' ''";
+        printf("<%s>\n", test);
+        FOREACH_WORD_QUOTED(w, l, test, state) {
+                char *t;
+
+                assert_se(t = strndup(w, l));
+                printf("<%s>\n", t);
+                free(t);
+        }
+}
+
+static void test_default_term_for_tty(void) {
+        puts(default_term_for_tty("/dev/tty23"));
+        puts(default_term_for_tty("/dev/ttyS23"));
+        puts(default_term_for_tty("/dev/tty0"));
+        puts(default_term_for_tty("/dev/pty0"));
+        puts(default_term_for_tty("/dev/pts/0"));
+        puts(default_term_for_tty("/dev/console"));
+        puts(default_term_for_tty("tty23"));
+        puts(default_term_for_tty("ttyS23"));
+        puts(default_term_for_tty("tty0"));
+        puts(default_term_for_tty("pty0"));
+        puts(default_term_for_tty("pts/0"));
+        puts(default_term_for_tty("console"));
+}
+
+int main(int argc, char *argv[]) {
+        test_streq_ptr();
+        test_first_word();
+        test_default_term_for_tty();
+        test_foreach_word_quoted();
+
+        return 0;
+}