#!/bin/sh
#
# Copyright (c) 2007 Johannes E. Schindelin
#

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;
	}

	song;

=cut
EOT
sed -e '
	s/hello/goodbye/
	s/beer\\/beer,\\/
	s/more\\/more,\\/
	s/song;/song();/
' <Beer.perl >Beer-correct.perl

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 p in ada bibtex cpp csharp fortran html java matlab objc pascal perl php python ruby tex
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
	'
	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
	'
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' '
	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_success 'pattern which matches to end of line' '
	test_config diff.java.funcname "Beer\$" &&
	test_expect_funcname "Beer\$"
'

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("
'

test_done
