]>
Commit | Line | Data |
---|---|---|
f258475a JH |
1 | #!/bin/sh |
2 | # | |
3 | # Copyright (c) 2007 Johannes E. Schindelin | |
4 | # | |
5 | ||
6 | test_description='Test custom diff function name patterns' | |
7 | ||
8 | . ./test-lib.sh | |
9 | ||
10 | LF=' | |
11 | ' | |
d64d6cdc | 12 | cat >Beer.java <<\EOF |
f258475a JH |
13 | public class Beer |
14 | { | |
15 | int special; | |
16 | public static void main(String args[]) | |
17 | { | |
18 | String s=" "; | |
19 | for(int x = 99; x > 0; x--) | |
20 | { | |
21 | System.out.print(x + " bottles of beer on the wall " | |
22 | + x + " bottles of beer\n" | |
23 | + "Take one down, pass it around, " + (x - 1) | |
24 | + " bottles of beer on the wall.\n"); | |
25 | } | |
26 | System.out.print("Go to the store, buy some more,\n" | |
27 | + "99 bottles of beer on the wall.\n"); | |
28 | } | |
29 | } | |
30 | EOF | |
d64d6cdc | 31 | sed 's/beer\\/beer,\\/' <Beer.java >Beer-correct.java |
f143d9c6 | 32 | cat >Beer.perl <<\EOT |
f12c66b9 JN |
33 | package Beer; |
34 | ||
35 | use strict; | |
36 | use warnings; | |
37 | use parent qw(Exporter); | |
ea2ca449 JN |
38 | our @EXPORT_OK = qw(round finalround); |
39 | ||
40 | sub other; # forward declaration | |
41 | ||
42 | # hello | |
f12c66b9 JN |
43 | |
44 | sub round { | |
45 | my ($n) = @_; | |
46 | print "$n bottles of beer on the wall "; | |
47 | print "$n bottles of beer\n"; | |
48 | print "Take one down, pass it around, "; | |
49 | $n = $n - 1; | |
50 | print "$n bottles of beer on the wall.\n"; | |
51 | } | |
52 | ||
ea2ca449 JN |
53 | sub finalround |
54 | { | |
55 | print "Go to the store, buy some more\n"; | |
56 | print "99 bottles of beer on the wall.\n"); | |
57 | } | |
58 | ||
f143d9c6 JN |
59 | sub withheredocument { |
60 | print <<"EOF" | |
61 | decoy here-doc | |
62 | EOF | |
63 | # some lines of context | |
64 | # to pad it out | |
65 | print "hello\n"; | |
66 | } | |
67 | ||
f12c66b9 JN |
68 | __END__ |
69 | ||
70 | =head1 NAME | |
71 | ||
72 | Beer - subroutine to output fragment of a drinking song | |
73 | ||
74 | =head1 SYNOPSIS | |
75 | ||
ea2ca449 | 76 | use Beer qw(round finalround); |
f12c66b9 JN |
77 | |
78 | sub song { | |
79 | for (my $i = 99; $i > 0; $i--) { | |
80 | round $i; | |
81 | } | |
ea2ca449 | 82 | finalround; |
f12c66b9 JN |
83 | } |
84 | ||
85 | song; | |
86 | ||
87 | =cut | |
f143d9c6 | 88 | EOT |
f12c66b9 | 89 | sed -e ' |
ea2ca449 | 90 | s/hello/goodbye/ |
f12c66b9 | 91 | s/beer\\/beer,\\/ |
ea2ca449 | 92 | s/more\\/more,\\/ |
f12c66b9 JN |
93 | s/song;/song();/ |
94 | ' <Beer.perl >Beer-correct.perl | |
f258475a | 95 | |
d64d6cdc | 96 | test_expect_funcname () { |
f12c66b9 JN |
97 | lang=${2-java} |
98 | test_expect_code 1 git diff --no-index -U1 \ | |
99 | "Beer.$lang" "Beer-correct.$lang" >diff && | |
d64d6cdc JN |
100 | grep "^@@.*@@ $1" diff |
101 | } | |
102 | ||
e90d065e | 103 | for p in ada bibtex cpp csharp fortran html java matlab objc pascal perl php python ruby tex |
e3bf5e43 BC |
104 | do |
105 | test_expect_success "builtin $p pattern compiles" ' | |
5b5e4594 | 106 | echo "*.java diff=$p" >.gitattributes && |
d64d6cdc JN |
107 | test_expect_code 1 git diff --no-index \ |
108 | Beer.java Beer-correct.java 2>msg && | |
109 | ! grep fatal msg && | |
110 | ! grep error msg | |
e3bf5e43 | 111 | ' |
bff42061 | 112 | test_expect_success "builtin $p wordRegex pattern compiles" ' |
5b5e4594 | 113 | echo "*.java diff=$p" >.gitattributes && |
d64d6cdc JN |
114 | test_expect_code 1 git diff --no-index --word-diff \ |
115 | Beer.java Beer-correct.java 2>msg && | |
116 | ! grep fatal msg && | |
117 | ! grep error msg | |
bff42061 | 118 | ' |
e3bf5e43 BC |
119 | done |
120 | ||
f258475a | 121 | test_expect_success 'default behaviour' ' |
e3bf5e43 | 122 | rm -f .gitattributes && |
d64d6cdc | 123 | test_expect_funcname "public class Beer\$" |
f258475a JH |
124 | ' |
125 | ||
5b5e4594 | 126 | test_expect_success 'set up .gitattributes declaring drivers to test' ' |
f12c66b9 JN |
127 | cat >.gitattributes <<-\EOF |
128 | *.java diff=java | |
129 | *.perl diff=perl | |
130 | EOF | |
5b5e4594 JN |
131 | ' |
132 | ||
f258475a | 133 | test_expect_success 'preset java pattern' ' |
d64d6cdc | 134 | test_expect_funcname "public static void main(" |
f258475a JH |
135 | ' |
136 | ||
f12c66b9 JN |
137 | test_expect_success 'preset perl pattern' ' |
138 | test_expect_funcname "sub round {\$" perl | |
139 | ' | |
140 | ||
ea2ca449 JN |
141 | test_expect_success 'perl pattern accepts K&R style brace placement, too' ' |
142 | test_expect_funcname "sub finalround\$" perl | |
143 | ' | |
144 | ||
f143d9c6 JN |
145 | test_expect_success 'but is not distracted by end of <<here document' ' |
146 | test_expect_funcname "sub withheredocument {\$" perl | |
147 | ' | |
148 | ||
f12c66b9 JN |
149 | test_expect_success 'perl pattern is not distracted by sub within POD' ' |
150 | test_expect_funcname "=head" perl | |
151 | ' | |
152 | ||
12f0967a JN |
153 | test_expect_success 'perl pattern gets full line of POD header' ' |
154 | test_expect_funcname "=head1 SYNOPSIS\$" perl | |
155 | ' | |
156 | ||
ea2ca449 JN |
157 | test_expect_success 'perl pattern is not distracted by forward declaration' ' |
158 | test_expect_funcname "package Beer;\$" perl | |
159 | ' | |
160 | ||
f258475a | 161 | test_expect_success 'custom pattern' ' |
f792a0b8 JN |
162 | test_config diff.java.funcname "!static |
163 | !String | |
164 | [^ ].*s.*" && | |
d64d6cdc | 165 | test_expect_funcname "int special;\$" |
f258475a JH |
166 | ' |
167 | ||
168 | test_expect_success 'last regexp must not be negated' ' | |
f792a0b8 | 169 | test_config diff.java.funcname "!static" && |
d64d6cdc JN |
170 | test_expect_code 128 git diff --no-index Beer.java Beer-correct.java 2>msg && |
171 | grep ": Last expression must not be negated:" msg | |
f258475a JH |
172 | ' |
173 | ||
563d5a2c | 174 | test_expect_success 'pattern which matches to end of line' ' |
d64d6cdc JN |
175 | test_config diff.java.funcname "Beer\$" && |
176 | test_expect_funcname "Beer\$" | |
f258475a JH |
177 | ' |
178 | ||
3632cfc2 | 179 | test_expect_success 'alternation in pattern' ' |
f792a0b8 JN |
180 | test_config diff.java.funcname "Beer$" && |
181 | test_config diff.java.xfuncname "^[ ]*((public|static).*)$" && | |
d64d6cdc | 182 | test_expect_funcname "public static void main(" |
3632cfc2 AL |
183 | ' |
184 | ||
f258475a | 185 | test_done |