You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
2.4 KiB
95 lines
2.4 KiB
write_sub_test_lib_test () { |
|
name="$1" # stdin is the body of the test code |
|
mkdir "$name" && |
|
write_script "$name/$name.sh" "$TEST_SHELL_PATH" <<-EOF && |
|
test_description='A test of test-lib.sh itself' |
|
|
|
# Point to the t/test-lib.sh, which isn't in ../ as usual |
|
. "\$TEST_DIRECTORY"/test-lib.sh |
|
EOF |
|
cat >>"$name/$name.sh" |
|
} |
|
|
|
_run_sub_test_lib_test_common () { |
|
cmp_op="$1" want_code="$2" name="$3" # stdin is the body of the test code |
|
shift 3 |
|
|
|
# intercept pseudo-options at the front of the argument list that we |
|
# will not pass to child script |
|
skip= |
|
while test $# -gt 0 |
|
do |
|
case "$1" in |
|
--skip=*) |
|
skip=${1#--*=} |
|
shift |
|
;; |
|
*) |
|
break |
|
;; |
|
esac |
|
done |
|
|
|
( |
|
cd "$name" && |
|
|
|
# Pretend we're not running under a test harness, whether we |
|
# are or not. The test-lib output depends on the setting of |
|
# this variable, so we need a stable setting under which to run |
|
# the sub-test. |
|
sane_unset HARNESS_ACTIVE && |
|
|
|
export TEST_DIRECTORY && |
|
# The child test re-sources GIT-BUILD-OPTIONS and may thus |
|
# override the test output directory. We thus pass it as an |
|
# explicit override to the child. |
|
TEST_OUTPUT_DIRECTORY_OVERRIDE=$(pwd) && |
|
export TEST_OUTPUT_DIRECTORY_OVERRIDE && |
|
GIT_SKIP_TESTS=$skip && |
|
export GIT_SKIP_TESTS && |
|
sane_unset GIT_TEST_FAIL_PREREQS && |
|
./"$name.sh" "$@" >out 2>err; |
|
ret=$? && |
|
test "$ret" "$cmp_op" "$want_code" |
|
) |
|
} |
|
|
|
write_and_run_sub_test_lib_test () { |
|
name="$1" descr="$2" # stdin is the body of the test code |
|
write_sub_test_lib_test "$@" || return 1 |
|
_run_sub_test_lib_test_common -eq 0 "$@" |
|
} |
|
|
|
write_and_run_sub_test_lib_test_err () { |
|
name="$1" descr="$2" # stdin is the body of the test code |
|
write_sub_test_lib_test "$@" || return 1 |
|
_run_sub_test_lib_test_common -eq 1 "$@" |
|
} |
|
|
|
run_sub_test_lib_test () { |
|
_run_sub_test_lib_test_common -eq 0 "$@" |
|
} |
|
|
|
run_sub_test_lib_test_err () { |
|
_run_sub_test_lib_test_common -eq 1 "$@" |
|
} |
|
|
|
_check_sub_test_lib_test_common () { |
|
name="$1" && |
|
sed -e 's/^> //' -e 's/Z$//' >"$name"/expect.out && |
|
test_cmp "$name"/expect.out "$name"/out |
|
} |
|
|
|
check_sub_test_lib_test () { |
|
name="$1" # stdin is the expected output from the test |
|
_check_sub_test_lib_test_common "$name" && |
|
test_must_be_empty "$name"/err |
|
} |
|
|
|
check_sub_test_lib_test_err () { |
|
name="$1" # stdin is the expected output from the test |
|
_check_sub_test_lib_test_common "$name" && |
|
# expected error output is in descriptor 3 |
|
sed -e 's/^> //' -e 's/Z$//' <&3 >"$name"/expect.err && |
|
test_cmp "$name"/expect.err "$name"/err |
|
}
|
|
|