diff options
Diffstat (limited to 't/t4018-diff-funcname.sh')
| -rwxr-xr-x | t/t4018-diff-funcname.sh | 230 | 
1 files changed, 77 insertions, 153 deletions
diff --git a/t/t4018-diff-funcname.sh b/t/t4018-diff-funcname.sh index 38a092a0da..1dbaa3864a 100755 --- a/t/t4018-diff-funcname.sh +++ b/t/t4018-diff-funcname.sh @@ -7,179 +7,103 @@ test_description='Test custom diff function name patterns'  . ./test-lib.sh -LF=' -' -cat >Beer.java <<\EOF -public class Beer -{ -	int special; -	public static void main(String args[]) -	{ -		String s=" "; -		for(int x = 99; x > 0; x--) -		{ -			System.out.print(x + " bottles of beer on the wall " -				+ x + " bottles of beer\n" -				+ "Take one down, pass it around, " + (x - 1) -				+ " bottles of beer on the wall.\n"); -		} -		System.out.print("Go to the store, buy some more,\n" -			+ "99 bottles of beer on the wall.\n"); -	} -} -EOF -sed 's/beer\\/beer,\\/' <Beer.java >Beer-correct.java -cat >Beer.perl <<\EOT -package Beer; - -use strict; -use warnings; -use parent qw(Exporter); -our @EXPORT_OK = qw(round finalround); - -sub other; # forward declaration - -# hello - -sub round { -	my ($n) = @_; -	print "$n bottles of beer on the wall "; -	print "$n bottles of beer\n"; -	print "Take one down, pass it around, "; -	$n = $n - 1; -	print "$n bottles of beer on the wall.\n"; -} - -sub finalround -{ -	print "Go to the store, buy some more\n"; -	print "99 bottles of beer on the wall.\n"); -} - -sub withheredocument { -	print <<"EOF" -decoy here-doc -EOF -	# some lines of context -	# to pad it out -	print "hello\n"; -} - -__END__ - -=head1 NAME - -Beer - subroutine to output fragment of a drinking song - -=head1 SYNOPSIS - -	use Beer qw(round finalround); - -	sub song { -		for (my $i = 99; $i > 0; $i--) { -			round $i; -		} -		finalround; -	} +test_expect_success 'setup' ' +	# a non-trivial custom pattern +	git config diff.custom1.funcname "!static +!String +[^ 	].*s.*" && -	song; +	# a custom pattern which matches to end of line +	git config diff.custom2.funcname "......Beer\$" && -=cut -EOT -sed -e ' -	s/hello/goodbye/ -	s/beer\\/beer,\\/ -	s/more\\/more,\\/ -	s/song;/song();/ -' <Beer.perl >Beer-correct.perl +	# alternation in pattern +	git config diff.custom3.funcname "Beer$" && +	git config diff.custom3.xfuncname "^[ 	]*((public|static).*)$" && -test_expect_funcname () { -	lang=${2-java} -	test_expect_code 1 git diff --no-index -U1 \ -		"Beer.$lang" "Beer-correct.$lang" >diff && -	grep "^@@.*@@ $1" diff -} +	# for regexp compilation tests +	echo A >A.java && +	echo B >B.java +' -for p in ada bibtex cpp csharp fortran html java matlab objc pascal perl php python ruby tex +diffpatterns=" +	ada +	bibtex +	cpp +	csharp +	fortran +	html +	java +	matlab +	objc +	pascal +	perl +	php +	python +	ruby +	tex +	custom1 +	custom2 +	custom3 +" + +for p in $diffpatterns  do  	test_expect_success "builtin $p pattern compiles" '  		echo "*.java diff=$p" >.gitattributes &&  		test_expect_code 1 git diff --no-index \ -			Beer.java Beer-correct.java 2>msg && -		! grep fatal msg && -		! grep error msg +			A.java B.java 2>msg && +		test_i18ngrep ! fatal msg && +		test_i18ngrep ! error msg  	'  	test_expect_success "builtin $p wordRegex pattern compiles" '  		echo "*.java diff=$p" >.gitattributes &&  		test_expect_code 1 git diff --no-index --word-diff \ -			Beer.java Beer-correct.java 2>msg && -		! grep fatal msg && -		! grep error msg +			A.java B.java 2>msg && +		test_i18ngrep ! fatal msg && +		test_i18ngrep ! error msg  	'  done -test_expect_success 'default behaviour' ' -	rm -f .gitattributes && -	test_expect_funcname "public class Beer\$" -' - -test_expect_success 'set up .gitattributes declaring drivers to test' ' -	cat >.gitattributes <<-\EOF -	*.java diff=java -	*.perl diff=perl -	EOF -' - -test_expect_success 'preset java pattern' ' -	test_expect_funcname "public static void main(" -' - -test_expect_success 'preset perl pattern' ' -	test_expect_funcname "sub round {\$" perl -' - -test_expect_success 'perl pattern accepts K&R style brace placement, too' ' -	test_expect_funcname "sub finalround\$" perl -' - -test_expect_success 'but is not distracted by end of <<here document' ' -	test_expect_funcname "sub withheredocument {\$" perl -' - -test_expect_success 'perl pattern is not distracted by sub within POD' ' -	test_expect_funcname "=head" perl -' - -test_expect_success 'perl pattern gets full line of POD header' ' -	test_expect_funcname "=head1 SYNOPSIS\$" perl -' - -test_expect_success 'perl pattern is not distracted by forward declaration' ' -	test_expect_funcname "package Beer;\$" perl -' - -test_expect_success 'custom pattern' ' -	test_config diff.java.funcname "!static -!String -[^ 	].*s.*" && -	test_expect_funcname "int special;\$" -' -  test_expect_success 'last regexp must not be negated' ' +	echo "*.java diff=java" >.gitattributes &&  	test_config diff.java.funcname "!static" && -	test_expect_code 128 git diff --no-index Beer.java Beer-correct.java 2>msg && -	grep ": Last expression must not be negated:" msg +	test_expect_code 128 git diff --no-index A.java B.java 2>msg && +	test_i18ngrep ": Last expression must not be negated:" msg  ' -test_expect_success 'pattern which matches to end of line' ' -	test_config diff.java.funcname "Beer\$" && -	test_expect_funcname "Beer\$" +test_expect_success 'setup hunk header tests' ' +	for i in $diffpatterns +	do +		echo "$i-* diff=$i" +	done > .gitattributes && + +	# add all test files to the index +	( +		cd "$TEST_DIRECTORY"/t4018 && +		git --git-dir="$TRASH_DIRECTORY/.git" add . +	) && + +	# place modified files in the worktree +	for i in $(git ls-files) +	do +		sed -e "s/ChangeMe/IWasChanged/" <"$TEST_DIRECTORY/t4018/$i" >"$i" || return 1 +	done  ' -test_expect_success 'alternation in pattern' ' -	test_config diff.java.funcname "Beer$" && -	test_config diff.java.xfuncname "^[ 	]*((public|static).*)$" && -	test_expect_funcname "public static void main(" -' +# check each individual file +for i in $(git ls-files) +do +	if grep broken "$i" >/dev/null 2>&1 +	then +		result=failure +	else +		result=success +	fi +	test_expect_$result "hunk header: $i" " +		test_when_finished 'cat actual' &&	# for debugging only +		git diff -U1 $i >actual && +		grep '@@ .* @@.*RIGHT' actual +	" +done  test_done  | 
