@@ -9,8 +9,7 @@ test_description='Test custom diff function name patterns'
9
9
10
10
LF='
11
11
'
12
-
13
- cat > Beer.java << EOF
12
+ cat > Beer.java << \EOF
14
13
public class Beer
15
14
{
16
15
int special;
@@ -29,61 +28,163 @@ public class Beer
29
28
}
30
29
}
31
30
EOF
31
+ sed ' s/beer\\/beer,\\/' < Beer.java > Beer-correct.java
32
+ cat > Beer.perl << \EOT
33
+ package Beer;
34
+
35
+ use strict;
36
+ use warnings;
37
+ use parent qw(Exporter);
38
+ our @EXPORT_OK = qw(round finalround);
39
+
40
+ sub other; # forward declaration
41
+
42
+ # hello
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
+
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
+
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
+
68
+ __END__
69
+
70
+ =head1 NAME
71
+
72
+ Beer - subroutine to output fragment of a drinking song
73
+
74
+ =head1 SYNOPSIS
75
+
76
+ use Beer qw(round finalround);
77
+
78
+ sub song {
79
+ for (my $i = 99; $i > 0; $i --) {
80
+ round $i ;
81
+ }
82
+ finalround;
83
+ }
32
84
33
- sed ' s/beer\\/beer,\\/ ' < Beer.java > Beer-correct.java
85
+ song;
34
86
35
- builtin_patterns=" bibtex cpp csharp fortran html java objc pascal perl php python ruby tex"
36
- for p in $builtin_patterns
87
+ =cut
88
+ EOT
89
+ sed -e '
90
+ s/hello/goodbye/
91
+ s/beer\\/beer,\\/
92
+ s/more\\/more,\\/
93
+ s/song;/song();/
94
+ ' < Beer.perl > Beer-correct.perl
95
+
96
+ test_config () {
97
+ git config " $1 " " $2 " &&
98
+ test_when_finished " git config --unset $1 "
99
+ }
100
+
101
+ test_expect_funcname () {
102
+ lang=${2-java}
103
+ test_expect_code 1 git diff --no-index -U1 \
104
+ " Beer.$lang " " Beer-correct.$lang " > diff &&
105
+ grep " ^@@.*@@ $1 " diff
106
+ }
107
+
108
+ for p in bibtex cpp csharp fortran html java objc pascal perl php python ruby tex
37
109
do
38
110
test_expect_success " builtin $p pattern compiles" '
39
- echo "*.java diff=$p" > .gitattributes &&
40
- ! { git diff --no-index Beer.java Beer-correct.java 2>&1 |
41
- grep "fatal" > /dev/null; }
111
+ echo "*.java diff=$p" >.gitattributes &&
112
+ test_expect_code 1 git diff --no-index \
113
+ Beer.java Beer-correct.java 2>msg &&
114
+ ! grep fatal msg &&
115
+ ! grep error msg
42
116
'
43
117
test_expect_success " builtin $p wordRegex pattern compiles" '
44
- ! { git diff --no-index --word-diff \
45
- Beer.java Beer-correct.java 2>&1 |
46
- grep "fatal" > /dev/null; }
118
+ echo "*.java diff=$p" >.gitattributes &&
119
+ test_expect_code 1 git diff --no-index --word-diff \
120
+ Beer.java Beer-correct.java 2>msg &&
121
+ ! grep fatal msg &&
122
+ ! grep error msg
47
123
'
48
124
done
49
125
50
126
test_expect_success ' default behaviour' '
51
127
rm -f .gitattributes &&
52
- git diff --no-index Beer.java Beer-correct.java |
53
- grep "^@@.*@@ public class Beer"
128
+ test_expect_funcname "public class Beer\$"
129
+ '
130
+
131
+ test_expect_success ' set up .gitattributes declaring drivers to test' '
132
+ cat >.gitattributes <<-\EOF
133
+ *.java diff=java
134
+ *.perl diff=perl
135
+ EOF
54
136
'
55
137
56
138
test_expect_success ' preset java pattern' '
57
- echo "*.java diff=java" >.gitattributes &&
58
- git diff --no-index Beer.java Beer-correct.java |
59
- grep "^@@.*@@ public static void main("
139
+ test_expect_funcname "public static void main("
60
140
'
61
141
62
- git config diff.java.funcname ' !static
63
- !String
64
- [^ ].*s.*'
142
+ test_expect_success ' preset perl pattern' '
143
+ test_expect_funcname "sub round {\$" perl
144
+ '
145
+
146
+ test_expect_success ' perl pattern accepts K&R style brace placement, too' '
147
+ test_expect_funcname "sub finalround\$" perl
148
+ '
149
+
150
+ test_expect_success ' but is not distracted by end of <<here document' '
151
+ test_expect_funcname "sub withheredocument {\$" perl
152
+ '
153
+
154
+ test_expect_success ' perl pattern is not distracted by sub within POD' '
155
+ test_expect_funcname "=head" perl
156
+ '
157
+
158
+ test_expect_success ' perl pattern gets full line of POD header' '
159
+ test_expect_funcname "=head1 SYNOPSIS\$" perl
160
+ '
161
+
162
+ test_expect_success ' perl pattern is not distracted by forward declaration' '
163
+ test_expect_funcname "package Beer;\$" perl
164
+ '
65
165
66
166
test_expect_success ' custom pattern' '
67
- git diff --no-index Beer.java Beer-correct.java |
68
- grep "^@@.*@@ int special;$"
167
+ test_config diff.java.funcname "!static
168
+ !String
169
+ [^ ].*s.*" &&
170
+ test_expect_funcname "int special;\$"
69
171
'
70
172
71
173
test_expect_success ' last regexp must not be negated' '
72
- git config diff.java.funcname "!static" &&
73
- git diff --no-index Beer.java Beer-correct.java 2>&1 |
74
- grep "fatal : Last expression must not be negated:"
174
+ test_config diff.java.funcname "!static" &&
175
+ test_expect_code 128 git diff --no-index Beer.java Beer-correct.java 2>msg &&
176
+ grep ": Last expression must not be negated:" msg
75
177
'
76
178
77
179
test_expect_success ' pattern which matches to end of line' '
78
- git config diff.java.funcname "Beer$" &&
79
- git diff --no-index Beer.java Beer-correct.java |
80
- grep "^@@.*@@ Beer"
180
+ test_config diff.java.funcname "Beer\$" &&
181
+ test_expect_funcname "Beer\$"
81
182
'
82
183
83
184
test_expect_success ' alternation in pattern' '
84
- git config diff.java.xfuncname "^[ ]*((public|static).*) $" &&
85
- git diff --no-index Beer .java Beer-correct.java |
86
- grep "^@@.*@@ public static void main("
185
+ test_config diff.java.funcname "Beer $" &&
186
+ test_config diff.java.xfuncname "^[ ]*((public|static).*)$" &&
187
+ test_expect_funcname " public static void main("
87
188
'
88
189
89
190
test_done
0 commit comments