test: add test cases for relative_path
[gitweb.git] / t / t0060-path-utils.sh
index 09a42a428e1d286c5ab9e1003d49481ef6df3e44..72e89ce7193a91a807d21f3cd29104f49083892c 100755 (executable)
@@ -12,6 +12,11 @@ norm_path() {
        "test \"\$(test-path-utils normalize_path_copy '$1')\" = '$2'"
 }
 
+relative_path() {
+       test_expect_success $4 "relative path: $1 $2 => $3" \
+       "test \"\$(test-path-utils relative_path '$1' '$2')\" = '$3'"
+}
+
 # On Windows, we are using MSYS's bash, which mangles the paths.
 # Absolute paths are anchored at the MSYS installation directory,
 # which means that the path / accounts for this many characters:
@@ -183,4 +188,36 @@ test_expect_success SYMLINKS 'real path works on symlinks' '
        test "$sym" = "$(test-path-utils real_path "$dir2/syml")"
 '
 
+relative_path /a/b/c/  /a/b/           c/
+relative_path /a/b/c/  /a/b            c/
+relative_path /a//b//c/        //a/b//         c/      POSIX
+relative_path /a/b     /a/b            .
+relative_path /a/b/    /a/b            .
+relative_path /a       /a/b            /a      POSIX
+relative_path /                /a/b/           /       POSIX
+relative_path /a/c     /a/b/           /a/c    POSIX
+relative_path /a/c     /a/b            /a/c    POSIX
+relative_path /x/y     /a/b/           /x/y    POSIX
+relative_path /a/b     "<empty>"       /a/b    POSIX
+relative_path /a/b     "<null>"        /a/b    POSIX
+relative_path a/b/c/   a/b/            c/
+relative_path a/b/c/   a/b             c/
+relative_path a/b//c   a//b            c
+relative_path a/b/     a/b/            .
+relative_path a/b/     a/b             .
+relative_path a                a/b             a       # TODO: should be: ..
+relative_path x/y      a/b             x/y     # TODO: should be: ../../x/y
+relative_path a/c      a/b             a/c     # TODO: should be: ../c
+relative_path a/b      "<empty>"       a/b
+relative_path a/b      "<null>"        a/b
+relative_path "<empty>"        /a/b            "(empty)"
+relative_path "<empty>"        "<empty>"       "(empty)"
+relative_path "<empty>"        "<null>"        "(empty)"
+relative_path "<null>" "<empty>"       "(null)"
+relative_path "<null>" "<null>"        "(null)"
+
+test_expect_failure 'relative path: <null> /a/b => segfault' '
+       test-path-utils relative_path "<null>" "/a/b"
+'
+
 test_done