Improve the testing for test-lib.sh itself to assert that we have a
exit code of 1, not any non-zero. Improves code added in
0445e6f0a1 (test-lib: '--run' to run only specific tests,
2014-04-30).
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
		
	
		
			
				
	
	
		
			96 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
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
 | 
						|
}
 |