1write_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 57write_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 63write_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 69run_sub_test_lib_test () { 70 _run_sub_test_lib_test_common -eq 0 "$@" 71} 72 73run_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 83check_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 89check_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} 96