@@ -10,8 +10,11 @@ TEST_PASSES_SANITIZE_LEAK=true
norm_path() {
expected=$(test-tool path-utils print_path "$2")
- test_expect_success $3 "normalize path: $1 => $2" \
- "test \"\$(test-tool path-utils normalize_path_copy '$1')\" = '$expected'"
+ test_expect_success $3 "normalize path: $1 => $2" "
+ echo '$expected' >expect &&
+ test-tool path-utils normalize_path_copy '$1' >actual &&
+ test_cmp expect actual
+ "
}
relative_path() {
@@ -166,8 +169,10 @@ ancestor D:/Users/me C:/ -1 MINGW
ancestor //server/share/my-directory //server/share/ 14 MINGW
test_expect_success 'strip_path_suffix' '
- test c:/msysgit = $(test-tool path-utils strip_path_suffix \
- c:/msysgit/libexec//git-core libexec/git-core)
+ echo c:/msysgit >expect &&
+ test-tool path-utils strip_path_suffix \
+ c:/msysgit/libexec//git-core libexec/git-core >actual &&
+ test_cmp expect actual
'
test_expect_success 'absolute path rejects the empty string' '
@@ -189,34 +194,34 @@ test_expect_success 'real path rejects the empty string' '
test_expect_success POSIX 'real path works on absolute paths 1' '
nopath="hopefully-absent-path" &&
- test "/" = "$(test-tool path-utils real_path "/")" &&
- test "/$nopath" = "$(test-tool path-utils real_path "/$nopath")"
+ test_cmp_cmd / test-tool path-utils real_path "/" &&
+ test_cmp_cmd "/$nopath" test-tool 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-tool path-utils real_path "$d")" &&
- test "$d/$nopath" = "$(test-tool path-utils real_path "$d/$nopath")"
+ test_cmp_cmd "$d" test-tool path-utils real_path "$d" &&
+ test_cmp_cmd "$d/$nopath" test-tool path-utils real_path "$d/$nopath"
'
test_expect_success POSIX 'real path removes extra leading slashes' '
nopath="hopefully-absent-path" &&
- test "/" = "$(test-tool path-utils real_path "///")" &&
- test "/$nopath" = "$(test-tool path-utils real_path "///$nopath")" &&
+ test_cmp_cmd "/" test-tool path-utils real_path "///" &&
+ test_cmp_cmd "/$nopath" test-tool 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-tool path-utils real_path "//$d")" &&
- test "$d/$nopath" = "$(test-tool path-utils real_path "//$d/$nopath")"
+ test_cmp_cmd "$d" test-tool path-utils real_path "//$d" &&
+ test_cmp_cmd "$d/$nopath" test-tool 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-tool path-utils real_path "$d///")" &&
- test "$d/$nopath" = "$(test-tool path-utils real_path "$d///$nopath")"
+ test_cmp_cmd "$d" test-tool path-utils real_path "$d///" &&
+ test_cmp_cmd "$d/$nopath" test-tool path-utils real_path "$d///$nopath"
'
test_expect_success SYMLINKS 'real path works on symlinks' '
@@ -227,19 +232,19 @@ test_expect_success SYMLINKS 'real path works on symlinks' '
mkdir third &&
dir="$(cd .git && pwd -P)" &&
dir2=third/../second/other/.git &&
- test "$dir" = "$(test-tool path-utils real_path $dir2)" &&
+ test_cmp_cmd "$dir" test-tool path-utils real_path $dir2 &&
file="$dir"/index &&
- test "$file" = "$(test-tool path-utils real_path $dir2/index)" &&
+ test_cmp_cmd "$file" test-tool path-utils real_path $dir2/index &&
basename=blub &&
- test "$dir/$basename" = "$(cd .git && test-tool path-utils real_path "$basename")" &&
+ test_cmp_cmd "$dir/$basename" test-tool -C .git path-utils real_path "$basename" &&
ln -s ../first/file .git/syml &&
sym="$(cd first && pwd -P)"/file &&
- test "$sym" = "$(test-tool path-utils real_path "$dir2/syml")"
+ test_cmp_cmd "$sym" test-tool path-utils real_path "$dir2/syml"
'
test_expect_success SYMLINKS 'prefix_path works with absolute paths to work tree symlinks' '
ln -s target symlink &&
- test "$(test-tool path-utils prefix_path prefix "$(pwd)/symlink")" = "symlink"
+ test_cmp_cmd "symlink" test-tool path-utils prefix_path prefix "$(pwd)/symlink"
'
test_expect_success 'prefix_path works with only absolute path to work tree' '
@@ -255,7 +260,7 @@ test_expect_success 'prefix_path rejects absolute path to dir with same beginnin
test_expect_success SYMLINKS 'prefix_path works with absolute path to a symlink to work tree having same beginning as work tree' '
git init repo &&
ln -s repo repolink &&
- test "a" = "$(cd repo && test-tool path-utils prefix_path prefix "$(pwd)/../repolink/a")"
+ test_cmp_cmd "a" test-tool -C repo path-utils prefix_path prefix "$(cd repo && pwd)/../repolink/a"
'
relative_path /foo/a/b/c/ /foo/a/b/ c/
@@ -1366,6 +1366,24 @@ test_cmp_rev () {
fi
}
+# test_cmp_cmd is a convenience helper for doing the more verbose:
+#
+# echo something >expect &&
+# <some-command-and-args> >actual &&
+# test_cmp expect actual
+#
+# As:
+#
+# test_cmp_cmd something <some-command-and-args>
+test_cmp_cmd () {
+ local expect="$1" &&
+ shift &&
+ printf "%s\n" "$expect" >expect &&
+ "$@" >actual 2>err &&
+ test_must_be_empty err
+ test_cmp expect actual
+}
+
# Compare paths respecting core.ignoreCase
test_cmp_fspath () {
if test "x$1" = "x$2"
Add a "test_cmp_cmd" helper for the common pattern discussed in the documentation being added here to "t/test-lib-functions.sh". This implementation leaves the door open for extending this helper past its obvious limitations, such as: test_cmp_cmd "some" "lines" -- <some-cmd> test_cmp_cmd --stdin <some-cmd> <expect test_cmp_cmd --ignore-stderr "output" <some-cmd> By using this in t0060-path.sh we'll catch cases where "git" or "test-tool" errors (such as segfaults or abort()) were previously hidden, and we'd either pass the test, or fail in some subsequent assertion. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> --- t/t0060-path-utils.sh | 45 +++++++++++++++++++++++------------------ t/test-lib-functions.sh | 18 +++++++++++++++++ 2 files changed, 43 insertions(+), 20 deletions(-)