From: Zbigniew Jędrzejewski-Szmek Date: Fri, 29 Mar 2013 02:03:53 +0000 (-0400) Subject: tests: add some silly tests for path-util.c X-Git-Tag: v201~160 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=76877b46b652fbfcf8618458556178717b815cd8;hp=13cbf3a5f0cf4a1d89413d0ffc4a9067b1d6d1a8;ds=inline tests: add some silly tests for path-util.c --- diff --git a/Makefile.am b/Makefile.am index 2eae8773f..86ad16888 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 ff523943d..9347bc3a9 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 000000000..2bca5ef60 --- /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 . +***/ + +#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; +}