From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: git@vger.kernel.org
Cc: "Junio C Hamano" <gitster@pobox.com>,
"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
Subject: [PATCH 4/6] test-lib-functions: add and use test_cmp_cmd
Date: Thu, 21 Jul 2022 08:51:41 +0200 [thread overview]
Message-ID: <patch-4.6-df1b674b8a7-20220721T064349Z-avarab@gmail.com> (raw)
In-Reply-To: <cover-0.6-00000000000-20220721T064349Z-avarab@gmail.com>
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(-)
diff --git a/t/t0060-path-utils.sh b/t/t0060-path-utils.sh
index 1f2007e62b7..6f278417e83 100755
--- a/t/t0060-path-utils.sh
+++ b/t/t0060-path-utils.sh
@@ -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/
diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh
index 6da7273f1d5..63e46442eb6 100644
--- a/t/test-lib-functions.sh
+++ b/t/test-lib-functions.sh
@@ -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"
--
2.37.1.1095.g64a1e8362fd
next prev parent reply other threads:[~2022-07-21 6:52 UTC|newest]
Thread overview: 83+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-07-21 6:51 [PATCH 0/6] tests: fix ignored & hidden exit codes Ævar Arnfjörð Bjarmason
2022-07-21 6:51 ` [PATCH 1/6] diff tests: fix ignored exit codes in t4023 Ævar Arnfjörð Bjarmason
2022-07-21 6:51 ` [PATCH 2/6] t/lib-patch-mode.sh: fix ignored "git" exit codes Ævar Arnfjörð Bjarmason
2022-07-21 6:51 ` [PATCH 3/6] auto-crlf tests: check "git checkout" exit code Ævar Arnfjörð Bjarmason
2022-07-21 6:51 ` Ævar Arnfjörð Bjarmason [this message]
2022-07-21 6:51 ` [PATCH 5/6] merge tests: don't ignore "rev-parse" exit code in helper Ævar Arnfjörð Bjarmason
2022-07-21 6:51 ` [PATCH 6/6] log tests: don't use "exit 1" outside a sub-shell Ævar Arnfjörð Bjarmason
2022-12-02 0:06 ` [PATCH v2 0/8] tests: fix ignored & hidden exit codes Ævar Arnfjörð Bjarmason
2022-12-02 0:06 ` [PATCH v2 1/8] log tests: don't use "exit 1" outside a sub-shell Ævar Arnfjörð Bjarmason
2022-12-02 1:02 ` Eric Sunshine
2022-12-02 1:48 ` Junio C Hamano
2022-12-02 2:45 ` Ævar Arnfjörð Bjarmason
2022-12-02 9:03 ` Eric Sunshine
2022-12-02 10:02 ` Ævar Arnfjörð Bjarmason
2022-12-07 6:09 ` Eric Sunshine
2022-12-02 3:24 ` Junio C Hamano
2022-12-02 0:06 ` [PATCH v2 2/8] auto-crlf tests: check "git checkout" exit code Ævar Arnfjörð Bjarmason
2022-12-02 1:02 ` René Scharfe
2022-12-02 1:10 ` Eric Sunshine
2022-12-02 5:59 ` Torsten Bögershausen
2022-12-02 6:03 ` Eric Sunshine
2022-12-02 0:06 ` [PATCH v2 3/8] diff tests: fix ignored exit codes in t4023 Ævar Arnfjörð Bjarmason
2022-12-02 2:02 ` Junio C Hamano
2022-12-02 0:06 ` [PATCH v2 4/8] test-lib-functions: add and use test_cmp_cmd Ævar Arnfjörð Bjarmason
2022-12-02 1:30 ` René Scharfe
2022-12-02 1:33 ` Eric Sunshine
2022-12-02 1:45 ` Eric Sunshine
2022-12-02 1:52 ` Eric Sunshine
2022-12-02 3:41 ` Junio C Hamano
2022-12-02 0:06 ` [PATCH v2 5/8] t/lib-patch-mode.sh: fix ignored "git" exit codes Ævar Arnfjörð Bjarmason
2022-12-02 1:31 ` René Scharfe
2022-12-02 0:06 ` [PATCH v2 6/8] merge tests: don't ignore "rev-parse" exit code in helper Ævar Arnfjörð Bjarmason
2022-12-02 1:41 ` René Scharfe
2022-12-02 0:06 ` [PATCH v2 7/8] tests: use "test_cmp_cmd" instead of "test" in sub-shells Ævar Arnfjörð Bjarmason
2022-12-02 0:06 ` [PATCH v2 8/8] tests: use "test_cmp_cmd" in misc tests Ævar Arnfjörð Bjarmason
2022-12-02 2:19 ` Junio C Hamano
2022-12-02 11:52 ` [PATCH v3 0/8] tests: fix ignored & hidden exit codes Ævar Arnfjörð Bjarmason
2022-12-02 11:52 ` [PATCH v3 1/8] merge tests: don't ignore "rev-parse" exit code in helper Ævar Arnfjörð Bjarmason
2022-12-05 0:24 ` Junio C Hamano
2022-12-02 11:52 ` [PATCH v3 2/8] auto-crlf tests: don't lose exit code in loops and outside tests Ævar Arnfjörð Bjarmason
2022-12-02 15:59 ` René Scharfe
2022-12-02 11:52 ` [PATCH v3 3/8] diff tests: fix ignored exit codes in t4023 Ævar Arnfjörð Bjarmason
2022-12-05 0:26 ` Junio C Hamano
2022-12-02 11:52 ` [PATCH v3 4/8] t/lib-patch-mode.sh: fix ignored exit codes Ævar Arnfjörð Bjarmason
2022-12-02 15:59 ` René Scharfe
2022-12-04 0:45 ` Eric Sunshine
2022-12-02 11:52 ` [PATCH v3 5/8] tests: use "test_cmp" instead of "test" in sub-shells Ævar Arnfjörð Bjarmason
2022-12-05 0:39 ` Junio C Hamano
2022-12-02 11:52 ` [PATCH v3 6/8] tests: don't lose 'test <str> = $(cmd ...)"' exit code Ævar Arnfjörð Bjarmason
2022-12-02 11:52 ` [PATCH v3 7/8] tests: don't lose "git" exit codes in "! ( git ... | grep )" Ævar Arnfjörð Bjarmason
2022-12-02 18:31 ` René Scharfe
2022-12-02 11:52 ` [PATCH v3 8/8] tests: don't lose mist "git" exit codes Ævar Arnfjörð Bjarmason
2022-12-04 0:40 ` Eric Sunshine
2022-12-05 0:45 ` Junio C Hamano
2022-12-19 10:19 ` [PATCH v4 0/6] tests: fix ignored & hidden " Ævar Arnfjörð Bjarmason
2022-12-19 10:19 ` [PATCH v4 1/6] auto-crlf tests: don't lose exit code in loops and outside tests Ævar Arnfjörð Bjarmason
2022-12-19 12:07 ` René Scharfe
2022-12-19 10:19 ` [PATCH v4 2/6] t/lib-patch-mode.sh: fix ignored exit codes Ævar Arnfjörð Bjarmason
2022-12-20 0:09 ` Junio C Hamano
2022-12-27 16:40 ` Phillip Wood
2022-12-27 18:14 ` Ævar Arnfjörð Bjarmason
2022-12-19 10:19 ` [PATCH v4 3/6] tests: don't lose exit status with "(cd ...; test <op> $(git ...))" Ævar Arnfjörð Bjarmason
2022-12-20 0:20 ` Junio C Hamano
2022-12-19 10:19 ` [PATCH v4 4/6] tests: don't lose exit status with "test <op> $(git ...)" Ævar Arnfjörð Bjarmason
2022-12-26 1:14 ` Junio C Hamano
2022-12-19 10:19 ` [PATCH v4 5/6] tests: don't lose "git" exit codes in "! ( git ... | grep )" Ævar Arnfjörð Bjarmason
2022-12-26 1:18 ` Junio C Hamano
2022-12-27 16:44 ` Phillip Wood
2022-12-27 17:13 ` Phillip Wood
2022-12-27 23:16 ` Junio C Hamano
2022-12-19 10:19 ` [PATCH v4 6/6] tests: don't lose misc "git" exit codes Ævar Arnfjörð Bjarmason
2022-12-27 16:46 ` Phillip Wood
2022-12-27 18:18 ` Ævar Arnfjörð Bjarmason
2022-12-27 23:17 ` Junio C Hamano
2022-12-20 0:06 ` [PATCH v4 0/6] tests: fix ignored & hidden " Junio C Hamano
2023-02-06 22:44 ` [PATCH v5 " Ævar Arnfjörð Bjarmason
2023-02-06 22:44 ` [PATCH v5 1/6] auto-crlf tests: don't lose exit code in loops and outside tests Ævar Arnfjörð Bjarmason
2023-02-06 22:44 ` [PATCH v5 2/6] t/lib-patch-mode.sh: fix ignored exit codes Ævar Arnfjörð Bjarmason
2023-02-06 22:44 ` [PATCH v5 3/6] tests: don't lose exit status with "(cd ...; test <op> $(git ...))" Ævar Arnfjörð Bjarmason
2023-02-06 22:44 ` [PATCH v5 4/6] tests: don't lose exit status with "test <op> $(git ...)" Ævar Arnfjörð Bjarmason
2023-02-06 22:44 ` [PATCH v5 5/6] tests: don't lose "git" exit codes in "! ( git ... | grep )" Ævar Arnfjörð Bjarmason
2023-02-06 22:44 ` [PATCH v5 6/6] tests: don't lose misc "git" exit codes Ævar Arnfjörð Bjarmason
2023-02-06 23:33 ` [PATCH v5 0/6] tests: fix ignored & hidden " Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=patch-4.6-df1b674b8a7-20220721T064349Z-avarab@gmail.com \
--to=avarab@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).