diff options
-rw-r--r-- | Makefile.am | 7 | ||||
-rw-r--r-- | src/shared/path-util.h | 5 | ||||
-rw-r--r-- | src/test/test-path-util.c | 85 |
3 files changed, 93 insertions, 4 deletions
diff --git a/Makefile.am b/Makefile.am index 2eae8773fc..86ad16888a 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1071,6 +1071,7 @@ noinst_tests += \ test-env-replace \ test-strbuf \ test-strv \ + test-path-util \ test-strxcpyx \ test-unit-name \ test-unit-file \ @@ -1259,6 +1260,12 @@ test_strv_LDADD = \ libsystemd-units.la \ libsystemd-id128-internal.la +test_path_util_SOURCES = \ + src/test/test-path-util.c + +test_path_util_LDADD = \ + libsystemd-shared.la + test_strxcpyx_SOURCES = \ src/test/test-strxcpyx.c diff --git a/src/shared/path-util.h b/src/shared/path-util.h index ff523943dc..9347bc3a9b 100644 --- a/src/shared/path-util.h +++ b/src/shared/path-util.h @@ -1,7 +1,6 @@ /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ -#ifndef foopathutilhfoo -#define foopathutilhfoo +#pragma once /*** This file is part of systemd. @@ -41,5 +40,3 @@ char **path_strv_canonicalize_uniq(char **l); int path_is_mount_point(const char *path, bool allow_symlink); int path_is_read_only_fs(const char *path); - -#endif diff --git a/src/test/test-path-util.c b/src/test/test-path-util.c new file mode 100644 index 0000000000..2bca5ef604 --- /dev/null +++ b/src/test/test-path-util.c @@ -0,0 +1,85 @@ +/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ + +/*** + This file is part of systemd. + + Copyright 2013 Zbigniew Jędrzejewski-Szmek + + 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 "path-util.h" +#include "util.h" +#include "macro.h" + + +static void test_path(void) { + assert_se(path_equal("/goo", "/goo")); + assert_se(path_equal("//goo", "/goo")); + assert_se(path_equal("//goo/////", "/goo")); + assert_se(path_equal("goo/////", "goo")); + + assert_se(path_equal("/goo/boo", "/goo//boo")); + assert_se(path_equal("//goo/boo", "/goo/boo//")); + + assert_se(path_equal("/", "///")); + + assert_se(!path_equal("/x", "x/")); + assert_se(!path_equal("x/", "/")); + + assert_se(!path_equal("/x/./y", "x/y")); + assert_se(!path_equal("x/.y", "x/y")); + + assert_se(path_is_absolute("/")); + assert_se(!path_is_absolute("./")); + + assert_se(is_path("/dir")); + assert_se(is_path("a/b")); + assert_se(!is_path(".")); + + assert_se(streq(path_get_file_name("./aa/bb/../file.da."), "file.da.")); + assert_se(streq(path_get_file_name("/aa///.file"), ".file")); + assert_se(streq(path_get_file_name("/aa///file..."), "file...")); + assert_se(streq(path_get_file_name("file.../"), ".")); + +#define test_parent(x, y) { \ + char *z; \ + int r = path_get_parent(x, &z); \ + assert_se(r==0); \ + assert_se(streq(z, y)); \ + } + + test_parent("./aa/bb/../file.da.", "./aa/bb/.."); + test_parent("/aa///.file", "/aa///"); + test_parent("/aa///file...", "/aa///"); + test_parent("file.../", "file..."); + + assert_se(path_is_mount_point("/", true)); + assert_se(path_is_mount_point("/", false)); + + { + char p1[] = "aaa/bbb////ccc"; + char p2[] = "//aaa/.////ccc"; + char p3[] = "/./"; + + assert(path_equal(path_kill_slashes(p1), "aaa/bbb/ccc")); + assert(path_equal(path_kill_slashes(p2), "/aaa/./ccc")); + assert(path_equal(path_kill_slashes(p3), "/./")); + } +} + +int main(void) { + test_path(); + return 0; +} |