]>
Commit | Line | Data |
---|---|---|
49e703af JH |
1 | #!/bin/sh |
2 | ||
3 | test_description='diff whitespace error detection' | |
4 | ||
7ff24785 | 5 | TEST_PASSES_SANITIZE_LEAK=true |
49e703af JH |
6 | . ./test-lib.sh |
7 | ||
8 | test_expect_success setup ' | |
9 | ||
10 | git config diff.color.whitespace "blue reverse" && | |
11 | >F && | |
12 | git add F && | |
13 | echo " Eight SP indent" >>F && | |
14 | echo " HT and SP indent" >>F && | |
15 | echo "With trailing SP " >>F && | |
b2979ff5 | 16 | echo "Carriage ReturnQ" | tr Q "\015" >>F && |
04c6e9e9 JH |
17 | echo "No problem" >>F && |
18 | echo >>F | |
49e703af JH |
19 | |
20 | ' | |
21 | ||
22 | blue_grep='7;34m' ;# ESC [ 7 ; 3 4 m | |
23 | ||
eca4460e JH |
24 | printf "\033[%s" "$blue_grep" >check-grep |
25 | if (grep "$blue_grep" <check-grep | grep "$blue_grep") >/dev/null 2>&1 | |
26 | then | |
27 | grep_a=grep | |
28 | elif (grep -a "$blue_grep" <check-grep | grep -a "$blue_grep") >/dev/null 2>&1 | |
29 | then | |
30 | grep_a='grep -a' | |
31 | else | |
32 | grep_a=grep ;# expected to fail... | |
33 | fi | |
34 | rm -f check-grep | |
35 | ||
36 | prepare_output () { | |
37 | git diff --color >output | |
38 | $grep_a "$blue_grep" output >error | |
39 | $grep_a -v "$blue_grep" output >normal | |
0564b3ee | 40 | return 0 |
eca4460e JH |
41 | } |
42 | ||
49e703af JH |
43 | test_expect_success default ' |
44 | ||
0564b3ee | 45 | prepare_output && |
49e703af JH |
46 | |
47 | grep Eight normal >/dev/null && | |
48 | grep HT error >/dev/null && | |
49 | grep With error >/dev/null && | |
b2979ff5 | 50 | grep Return error >/dev/null && |
49e703af JH |
51 | grep No normal >/dev/null |
52 | ||
53 | ' | |
54 | ||
f4b05a49 JS |
55 | test_expect_success 'default (attribute)' ' |
56 | ||
57 | test_might_fail git config --unset core.whitespace && | |
58 | echo "F whitespace" >.gitattributes && | |
59 | prepare_output && | |
60 | ||
61 | grep Eight error >/dev/null && | |
62 | grep HT error >/dev/null && | |
63 | grep With error >/dev/null && | |
64 | grep Return error >/dev/null && | |
65 | grep No normal >/dev/null | |
66 | ||
67 | ' | |
68 | ||
69 | test_expect_success 'default, tabwidth=10 (attribute)' ' | |
70 | ||
71 | git config core.whitespace "tabwidth=10" && | |
72 | echo "F whitespace" >.gitattributes && | |
73 | prepare_output && | |
74 | ||
75 | grep Eight normal >/dev/null && | |
76 | grep HT error >/dev/null && | |
77 | grep With error >/dev/null && | |
78 | grep Return error >/dev/null && | |
79 | grep No normal >/dev/null | |
80 | ||
81 | ' | |
82 | ||
83 | test_expect_success 'no check (attribute)' ' | |
84 | ||
85 | test_might_fail git config --unset core.whitespace && | |
86 | echo "F -whitespace" >.gitattributes && | |
87 | prepare_output && | |
88 | ||
89 | grep Eight normal >/dev/null && | |
90 | grep HT normal >/dev/null && | |
91 | grep With normal >/dev/null && | |
92 | grep Return normal >/dev/null && | |
93 | grep No normal >/dev/null | |
94 | ||
95 | ' | |
96 | ||
97 | test_expect_success 'no check, tabwidth=10 (attribute), must be irrelevant' ' | |
98 | ||
99 | git config core.whitespace "tabwidth=10" && | |
100 | echo "F -whitespace" >.gitattributes && | |
101 | prepare_output && | |
102 | ||
103 | grep Eight normal >/dev/null && | |
104 | grep HT normal >/dev/null && | |
105 | grep With normal >/dev/null && | |
106 | grep Return normal >/dev/null && | |
107 | grep No normal >/dev/null | |
108 | ||
109 | ' | |
110 | ||
49e703af JH |
111 | test_expect_success 'without -trail' ' |
112 | ||
f4b05a49 | 113 | rm -f .gitattributes && |
0564b3ee EN |
114 | git config core.whitespace -trail && |
115 | prepare_output && | |
49e703af JH |
116 | |
117 | grep Eight normal >/dev/null && | |
118 | grep HT error >/dev/null && | |
119 | grep With normal >/dev/null && | |
b2979ff5 | 120 | grep Return normal >/dev/null && |
49e703af JH |
121 | grep No normal >/dev/null |
122 | ||
123 | ' | |
124 | ||
cf1b7869 JH |
125 | test_expect_success 'without -trail (attribute)' ' |
126 | ||
0564b3ee EN |
127 | test_might_fail git config --unset core.whitespace && |
128 | echo "F whitespace=-trail" >.gitattributes && | |
129 | prepare_output && | |
cf1b7869 JH |
130 | |
131 | grep Eight normal >/dev/null && | |
132 | grep HT error >/dev/null && | |
133 | grep With normal >/dev/null && | |
b2979ff5 | 134 | grep Return normal >/dev/null && |
cf1b7869 JH |
135 | grep No normal >/dev/null |
136 | ||
137 | ' | |
138 | ||
49e703af JH |
139 | test_expect_success 'without -space' ' |
140 | ||
0564b3ee EN |
141 | rm -f .gitattributes && |
142 | git config core.whitespace -space && | |
143 | prepare_output && | |
49e703af JH |
144 | |
145 | grep Eight normal >/dev/null && | |
146 | grep HT normal >/dev/null && | |
147 | grep With error >/dev/null && | |
b2979ff5 | 148 | grep Return error >/dev/null && |
49e703af JH |
149 | grep No normal >/dev/null |
150 | ||
151 | ' | |
152 | ||
cf1b7869 JH |
153 | test_expect_success 'without -space (attribute)' ' |
154 | ||
0564b3ee EN |
155 | test_might_fail git config --unset core.whitespace && |
156 | echo "F whitespace=-space" >.gitattributes && | |
157 | prepare_output && | |
cf1b7869 JH |
158 | |
159 | grep Eight normal >/dev/null && | |
160 | grep HT normal >/dev/null && | |
161 | grep With error >/dev/null && | |
b2979ff5 | 162 | grep Return error >/dev/null && |
cf1b7869 JH |
163 | grep No normal >/dev/null |
164 | ||
165 | ' | |
166 | ||
49e703af JH |
167 | test_expect_success 'with indent-non-tab only' ' |
168 | ||
0564b3ee EN |
169 | rm -f .gitattributes && |
170 | git config core.whitespace indent,-trailing,-space && | |
171 | prepare_output && | |
49e703af JH |
172 | |
173 | grep Eight error >/dev/null && | |
174 | grep HT normal >/dev/null && | |
175 | grep With normal >/dev/null && | |
b2979ff5 | 176 | grep Return normal >/dev/null && |
49e703af JH |
177 | grep No normal >/dev/null |
178 | ||
179 | ' | |
180 | ||
cf1b7869 JH |
181 | test_expect_success 'with indent-non-tab only (attribute)' ' |
182 | ||
0564b3ee EN |
183 | test_might_fail git config --unset core.whitespace && |
184 | echo "F whitespace=indent,-trailing,-space" >.gitattributes && | |
185 | prepare_output && | |
cf1b7869 JH |
186 | |
187 | grep Eight error >/dev/null && | |
188 | grep HT normal >/dev/null && | |
189 | grep With normal >/dev/null && | |
b2979ff5 JH |
190 | grep Return normal >/dev/null && |
191 | grep No normal >/dev/null | |
192 | ||
193 | ' | |
194 | ||
f4b05a49 JS |
195 | test_expect_success 'with indent-non-tab only, tabwidth=10' ' |
196 | ||
197 | rm -f .gitattributes && | |
198 | git config core.whitespace indent,tabwidth=10,-trailing,-space && | |
199 | prepare_output && | |
200 | ||
201 | grep Eight normal >/dev/null && | |
202 | grep HT normal >/dev/null && | |
203 | grep With normal >/dev/null && | |
204 | grep Return normal >/dev/null && | |
205 | grep No normal >/dev/null | |
206 | ||
207 | ' | |
208 | ||
209 | test_expect_success 'with indent-non-tab only, tabwidth=10 (attribute)' ' | |
210 | ||
211 | test_might_fail git config --unset core.whitespace && | |
212 | echo "F whitespace=indent,-trailing,-space,tabwidth=10" >.gitattributes && | |
213 | prepare_output && | |
214 | ||
215 | grep Eight normal >/dev/null && | |
216 | grep HT normal >/dev/null && | |
217 | grep With normal >/dev/null && | |
218 | grep Return normal >/dev/null && | |
219 | grep No normal >/dev/null | |
220 | ||
221 | ' | |
222 | ||
b2979ff5 JH |
223 | test_expect_success 'with cr-at-eol' ' |
224 | ||
0564b3ee EN |
225 | rm -f .gitattributes && |
226 | git config core.whitespace cr-at-eol && | |
227 | prepare_output && | |
b2979ff5 JH |
228 | |
229 | grep Eight normal >/dev/null && | |
230 | grep HT error >/dev/null && | |
231 | grep With error >/dev/null && | |
232 | grep Return normal >/dev/null && | |
233 | grep No normal >/dev/null | |
234 | ||
235 | ' | |
236 | ||
237 | test_expect_success 'with cr-at-eol (attribute)' ' | |
238 | ||
0564b3ee EN |
239 | test_might_fail git config --unset core.whitespace && |
240 | echo "F whitespace=trailing,cr-at-eol" >.gitattributes && | |
241 | prepare_output && | |
b2979ff5 JH |
242 | |
243 | grep Eight normal >/dev/null && | |
244 | grep HT error >/dev/null && | |
245 | grep With error >/dev/null && | |
246 | grep Return normal >/dev/null && | |
cf1b7869 JH |
247 | grep No normal >/dev/null |
248 | ||
249 | ' | |
250 | ||
04c6e9e9 JH |
251 | test_expect_success 'trailing empty lines (1)' ' |
252 | ||
253 | rm -f .gitattributes && | |
254 | test_must_fail git diff --check >output && | |
5b5061ef | 255 | grep "new blank line at" output && |
04c6e9e9 JH |
256 | grep "trailing whitespace" output |
257 | ||
258 | ' | |
259 | ||
260 | test_expect_success 'trailing empty lines (2)' ' | |
261 | ||
262 | echo "F -whitespace" >.gitattributes && | |
263 | git diff --check >output && | |
ec10b018 | 264 | test_must_be_empty output |
04c6e9e9 JH |
265 | |
266 | ' | |
267 | ||
8837d335 CM |
268 | test_expect_success 'checkdiff shows correct line number for trailing blank lines' ' |
269 | ||
270 | printf "a\nb\n" > G && | |
271 | git add G && | |
272 | printf "x\nx\nx\na\nb\nc\n\n" > G && | |
273 | [ "$(git diff --check -- G)" = "G:7: new blank line at EOF." ] | |
274 | ||
275 | ' | |
276 | ||
39280970 | 277 | test_expect_success 'do not color trailing cr in context' ' |
0564b3ee | 278 | test_might_fail git config --unset core.whitespace && |
39280970 JH |
279 | rm -f .gitattributes && |
280 | echo AAAQ | tr Q "\015" >G && | |
281 | git add G && | |
0564b3ee | 282 | echo BBBQ | tr Q "\015" >>G && |
39280970 JH |
283 | git diff --color G | tr "\015" Q >output && |
284 | grep "BBB.*${blue_grep}Q" output && | |
285 | grep "AAA.*\[mQ" output | |
286 | ||
287 | ' | |
288 | ||
690ed843 JH |
289 | test_expect_success 'color new trailing blank lines' ' |
290 | { echo a; echo b; echo; echo; } >x && | |
291 | git add x && | |
d68fe26f | 292 | { echo a; echo; echo; echo; echo c; echo; echo; echo; echo; } >x && |
690ed843 | 293 | git diff --color x >output && |
eca4460e | 294 | cnt=$($grep_a "${blue_grep}" output | wc -l) && |
690ed843 JH |
295 | test $cnt = 2 |
296 | ' | |
297 | ||
49e703af | 298 | test_done |