Merge branch 'ph/maint-submodule-status-fix'
[gitweb.git] / t / t0060-path-utils.sh
index 53cf1f8dc4acad959fdec359b738387aeb126b1e..4ef2345982fe0e0c175ed67edcb20b04c81b9680 100755 (executable)
@@ -139,4 +139,63 @@ test_expect_success 'strip_path_suffix' '
        test c:/msysgit = $(test-path-utils strip_path_suffix \
                c:/msysgit/libexec//git-core libexec/git-core)
 '
+
+test_expect_success 'absolute path rejects the empty string' '
+       test_must_fail test-path-utils absolute_path ""
+'
+
+test_expect_success 'real path rejects the empty string' '
+       test_must_fail test-path-utils real_path ""
+'
+
+test_expect_success POSIX 'real path works on absolute paths 1' '
+       nopath="hopefully-absent-path" &&
+       test "/" = "$(test-path-utils real_path "/")" &&
+       test "/$nopath" = "$(test-path-utils real_path "/$nopath")"
+'
+
+test_expect_success 'real path works on absolute paths 2' '
+       nopath="hopefully-absent-path" &&
+       # Find an existing top-level directory for the remaining tests:
+       d=$(pwd -P | sed -e "s|^\([^/]*/[^/]*\)/.*|\1|") &&
+       test "$d" = "$(test-path-utils real_path "$d")" &&
+       test "$d/$nopath" = "$(test-path-utils real_path "$d/$nopath")"
+'
+
+test_expect_success POSIX 'real path removes extra leading slashes' '
+       nopath="hopefully-absent-path" &&
+       test "/" = "$(test-path-utils real_path "///")" &&
+       test "/$nopath" = "$(test-path-utils real_path "///$nopath")" &&
+       # Find an existing top-level directory for the remaining tests:
+       d=$(pwd -P | sed -e "s|^\([^/]*/[^/]*\)/.*|\1|") &&
+       test "$d" = "$(test-path-utils real_path "//$d")" &&
+       test "$d/$nopath" = "$(test-path-utils real_path "//$d/$nopath")"
+'
+
+test_expect_success 'real path removes other extra slashes' '
+       nopath="hopefully-absent-path" &&
+       # Find an existing top-level directory for the remaining tests:
+       d=$(pwd -P | sed -e "s|^\([^/]*/[^/]*\)/.*|\1|") &&
+       test "$d" = "$(test-path-utils real_path "$d///")" &&
+       test "$d/$nopath" = "$(test-path-utils real_path "$d///$nopath")"
+'
+
+test_expect_success SYMLINKS 'real path works on symlinks' '
+       mkdir first &&
+       ln -s ../.git first/.git &&
+       mkdir second &&
+       ln -s ../first second/other &&
+       mkdir third &&
+       dir="$(cd .git; pwd -P)" &&
+       dir2=third/../second/other/.git &&
+       test "$dir" = "$(test-path-utils real_path $dir2)" &&
+       file="$dir"/index &&
+       test "$file" = "$(test-path-utils real_path $dir2/index)" &&
+       basename=blub &&
+       test "$dir/$basename" = "$(cd .git && test-path-utils real_path "$basename")" &&
+       ln -s ../first/file .git/syml &&
+       sym="$(cd first; pwd -P)"/file &&
+       test "$sym" = "$(test-path-utils real_path "$dir2/syml")"
+'
+
 test_done