Skip to content

Commit cf00603

Browse files
committed
Merge branch 'ab/lib-subtest'
Updates to the tests in t0000 to test the test framework. * ab/lib-subtest: test-lib tests: get rid of copy/pasted mock test code test-lib tests: assert 1 exit code, not non-zero test-lib tests: refactor common part of check_sub_test_lib_test*() test-lib tests: avoid subshell for "test_cmp" for readability test-lib tests: don't provide a description for the sub-tests test-lib tests: split up "write and run" into two functions test-lib tests: move "run_sub_test" to a new lib-subtest.sh
2 parents a7c2daa + 2e54907 commit cf00603

File tree

2 files changed

+213
-330
lines changed

2 files changed

+213
-330
lines changed

t/lib-subtest.sh

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
write_sub_test_lib_test () {
2+
name="$1" # stdin is the body of the test code
3+
mkdir "$name" &&
4+
write_script "$name/$name.sh" "$TEST_SHELL_PATH" <<-EOF &&
5+
test_description='A test of test-lib.sh itself'
6+
7+
# Point to the t/test-lib.sh, which isn't in ../ as usual
8+
. "\$TEST_DIRECTORY"/test-lib.sh
9+
EOF
10+
cat >>"$name/$name.sh"
11+
}
12+
13+
_run_sub_test_lib_test_common () {
14+
cmp_op="$1" want_code="$2" name="$3" # stdin is the body of the test code
15+
shift 3
16+
17+
# intercept pseudo-options at the front of the argument list that we
18+
# will not pass to child script
19+
skip=
20+
while test $# -gt 0
21+
do
22+
case "$1" in
23+
--skip=*)
24+
skip=${1#--*=}
25+
shift
26+
;;
27+
*)
28+
break
29+
;;
30+
esac
31+
done
32+
33+
(
34+
cd "$name" &&
35+
36+
# Pretend we're not running under a test harness, whether we
37+
# are or not. The test-lib output depends on the setting of
38+
# this variable, so we need a stable setting under which to run
39+
# the sub-test.
40+
sane_unset HARNESS_ACTIVE &&
41+
42+
export TEST_DIRECTORY &&
43+
# The child test re-sources GIT-BUILD-OPTIONS and may thus
44+
# override the test output directory. We thus pass it as an
45+
# explicit override to the child.
46+
TEST_OUTPUT_DIRECTORY_OVERRIDE=$(pwd) &&
47+
export TEST_OUTPUT_DIRECTORY_OVERRIDE &&
48+
GIT_SKIP_TESTS=$skip &&
49+
export GIT_SKIP_TESTS &&
50+
sane_unset GIT_TEST_FAIL_PREREQS &&
51+
./"$name.sh" "$@" >out 2>err;
52+
ret=$? &&
53+
test "$ret" "$cmp_op" "$want_code"
54+
)
55+
}
56+
57+
write_and_run_sub_test_lib_test () {
58+
name="$1" descr="$2" # stdin is the body of the test code
59+
write_sub_test_lib_test "$@" || return 1
60+
_run_sub_test_lib_test_common -eq 0 "$@"
61+
}
62+
63+
write_and_run_sub_test_lib_test_err () {
64+
name="$1" descr="$2" # stdin is the body of the test code
65+
write_sub_test_lib_test "$@" || return 1
66+
_run_sub_test_lib_test_common -eq 1 "$@"
67+
}
68+
69+
run_sub_test_lib_test () {
70+
_run_sub_test_lib_test_common -eq 0 "$@"
71+
}
72+
73+
run_sub_test_lib_test_err () {
74+
_run_sub_test_lib_test_common -eq 1 "$@"
75+
}
76+
77+
_check_sub_test_lib_test_common () {
78+
name="$1" &&
79+
sed -e 's/^> //' -e 's/Z$//' >"$name"/expect.out &&
80+
test_cmp "$name"/expect.out "$name"/out
81+
}
82+
83+
check_sub_test_lib_test () {
84+
name="$1" # stdin is the expected output from the test
85+
_check_sub_test_lib_test_common "$name" &&
86+
test_must_be_empty "$name"/err
87+
}
88+
89+
check_sub_test_lib_test_err () {
90+
name="$1" # stdin is the expected output from the test
91+
_check_sub_test_lib_test_common "$name" &&
92+
# expected error output is in descriptor 3
93+
sed -e 's/^> //' -e 's/Z$//' <&3 >"$name"/expect.err &&
94+
test_cmp "$name"/expect.err "$name"/err
95+
}

0 commit comments

Comments
 (0)