 41ac414ea2
			
		
	
	41ac414ea2
	
	
	
		
			
			Originally, test_expect_failure was designed to be the opposite
of test_expect_success, but this was a bad decision.  Most tests
run a series of commands that leads to the single command that
needs to be tested, like this:
    test_expect_{success,failure} 'test title' '
	setup1 &&
        setup2 &&
        setup3 &&
        what is to be tested
    '
And expecting a failure exit from the whole sequence misses the
point of writing tests.  Your setup$N that are supposed to
succeed may have failed without even reaching what you are
trying to test.  The only valid use of test_expect_failure is to
check a trivial single command that is expected to fail, which
is a minority in tests of Porcelain-ish commands.
This large-ish patch rewrites all uses of test_expect_failure to
use test_expect_success and rewrites the condition of what is
tested, like this:
    test_expect_success 'test title' '
	setup1 &&
        setup2 &&
        setup3 &&
        ! this command should fail
    '
test_expect_failure is redefined to serve as a reminder that
that test *should* succeed but due to a known breakage in git it
currently does not pass.  So if git-foo command should create a
file 'bar' but you discovered a bug that it doesn't, you can
write a test like this:
    test_expect_failure 'git-foo should create bar' '
        rm -f bar &&
        git foo &&
        test -f bar
    '
This construct acts similar to test_expect_success, but instead
of reporting "ok/FAIL" like test_expect_success does, the
outcome is reported as "FIXED/still broken".
Signed-off-by: Junio C Hamano <gitster@pobox.com>
		
	
		
			
				
	
	
		
			117 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			117 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/sh
 | |
| #
 | |
| # Copyright (c) 2006 Junio C Hamano
 | |
| #
 | |
| 
 | |
| test_description='git grep various.
 | |
| '
 | |
| 
 | |
| . ./test-lib.sh
 | |
| 
 | |
| test_expect_success setup '
 | |
| 	{
 | |
| 		echo foo mmap bar
 | |
| 		echo foo_mmap bar
 | |
| 		echo foo_mmap bar mmap
 | |
| 		echo foo mmap bar_mmap
 | |
| 		echo foo_mmap bar mmap baz
 | |
| 	} >file &&
 | |
| 	echo x x xx x >x &&
 | |
| 	echo y yy >y &&
 | |
| 	echo zzz > z &&
 | |
| 	mkdir t &&
 | |
| 	echo test >t/t &&
 | |
| 	git add file x y z t/t &&
 | |
| 	git commit -m initial
 | |
| '
 | |
| 
 | |
| for H in HEAD ''
 | |
| do
 | |
| 	case "$H" in
 | |
| 	HEAD)	HC='HEAD:' L='HEAD' ;;
 | |
| 	'')	HC= L='in working tree' ;;
 | |
| 	esac
 | |
| 
 | |
| 	test_expect_success "grep -w $L" '
 | |
| 		{
 | |
| 			echo ${HC}file:1:foo mmap bar
 | |
| 			echo ${HC}file:3:foo_mmap bar mmap
 | |
| 			echo ${HC}file:4:foo mmap bar_mmap
 | |
| 			echo ${HC}file:5:foo_mmap bar mmap baz
 | |
| 		} >expected &&
 | |
| 		git grep -n -w -e mmap $H >actual &&
 | |
| 		diff expected actual
 | |
| 	'
 | |
| 
 | |
| 	test_expect_success "grep -w $L (x)" '
 | |
| 		{
 | |
| 			echo ${HC}x:1:x x xx x
 | |
| 		} >expected &&
 | |
| 		git grep -n -w -e "x xx* x" $H >actual &&
 | |
| 		diff expected actual
 | |
| 	'
 | |
| 
 | |
| 	test_expect_success "grep -w $L (y-1)" '
 | |
| 		{
 | |
| 			echo ${HC}y:1:y yy
 | |
| 		} >expected &&
 | |
| 		git grep -n -w -e "^y" $H >actual &&
 | |
| 		diff expected actual
 | |
| 	'
 | |
| 
 | |
| 	test_expect_success "grep -w $L (y-2)" '
 | |
| 		: >expected &&
 | |
| 		if git grep -n -w -e "^y y" $H >actual
 | |
| 		then
 | |
| 			echo should not have matched
 | |
| 			cat actual
 | |
| 			false
 | |
| 		else
 | |
| 			diff expected actual
 | |
| 		fi
 | |
| 	'
 | |
| 
 | |
| 	test_expect_success "grep -w $L (z)" '
 | |
| 		: >expected &&
 | |
| 		if git grep -n -w -e "^z" $H >actual
 | |
| 		then
 | |
| 			echo should not have matched
 | |
| 			cat actual
 | |
| 			false
 | |
| 		else
 | |
| 			diff expected actual
 | |
| 		fi
 | |
| 	'
 | |
| 
 | |
| 	test_expect_success "grep $L (t-1)" '
 | |
| 		echo "${HC}t/t:1:test" >expected &&
 | |
| 		git grep -n -e test $H >actual &&
 | |
| 		diff expected actual
 | |
| 	'
 | |
| 
 | |
| 	test_expect_success "grep $L (t-2)" '
 | |
| 		echo "${HC}t:1:test" >expected &&
 | |
| 		(
 | |
| 			cd t &&
 | |
| 			git grep -n -e test $H
 | |
| 		) >actual &&
 | |
| 		diff expected actual
 | |
| 	'
 | |
| 
 | |
| 	test_expect_success "grep $L (t-3)" '
 | |
| 		echo "${HC}t/t:1:test" >expected &&
 | |
| 		(
 | |
| 			cd t &&
 | |
| 			git grep --full-name -n -e test $H
 | |
| 		) >actual &&
 | |
| 		diff expected actual
 | |
| 	'
 | |
| 
 | |
| 	test_expect_success "grep -c $L (no /dev/null)" '
 | |
| 		! git grep -c test $H | grep -q /dev/null
 | |
|         '
 | |
| 
 | |
| done
 | |
| 
 | |
| test_done
 |