Code

Merge branch 'jc/index-update-if-able' into maint
[git.git] / t / t4019-diff-wserror.sh
1 #!/bin/sh
3 test_description='diff whitespace error detection'
5 . ./test-lib.sh
7 test_expect_success setup '
9         git config diff.color.whitespace "blue reverse" &&
10         >F &&
11         git add F &&
12         echo "         Eight SP indent" >>F &&
13         echo "  HT and SP indent" >>F &&
14         echo "With trailing SP " >>F &&
15         echo "Carriage ReturnQ" | tr Q "\015" >>F &&
16         echo "No problem" >>F &&
17         echo >>F
19 '
21 blue_grep='7;34m' ;# ESC [ 7 ; 3 4 m
23 printf "\033[%s" "$blue_grep" >check-grep
24 if (grep "$blue_grep" <check-grep | grep "$blue_grep") >/dev/null 2>&1
25 then
26         grep_a=grep
27 elif (grep -a "$blue_grep" <check-grep | grep -a "$blue_grep") >/dev/null 2>&1
28 then
29         grep_a='grep -a'
30 else
31         grep_a=grep ;# expected to fail...
32 fi
33 rm -f check-grep
35 prepare_output () {
36         git diff --color >output
37         $grep_a "$blue_grep" output >error
38         $grep_a -v "$blue_grep" output >normal
39         return 0
40 }
42 test_expect_success default '
44         prepare_output &&
46         grep Eight normal >/dev/null &&
47         grep HT error >/dev/null &&
48         grep With error >/dev/null &&
49         grep Return error >/dev/null &&
50         grep No normal >/dev/null
52 '
54 test_expect_success 'default (attribute)' '
56         test_might_fail git config --unset core.whitespace &&
57         echo "F whitespace" >.gitattributes &&
58         prepare_output &&
60         grep Eight error >/dev/null &&
61         grep HT error >/dev/null &&
62         grep With error >/dev/null &&
63         grep Return error >/dev/null &&
64         grep No normal >/dev/null
66 '
68 test_expect_success 'default, tabwidth=10 (attribute)' '
70         git config core.whitespace "tabwidth=10" &&
71         echo "F whitespace" >.gitattributes &&
72         prepare_output &&
74         grep Eight normal >/dev/null &&
75         grep HT error >/dev/null &&
76         grep With error >/dev/null &&
77         grep Return error >/dev/null &&
78         grep No normal >/dev/null
80 '
82 test_expect_success 'no check (attribute)' '
84         test_might_fail git config --unset core.whitespace &&
85         echo "F -whitespace" >.gitattributes &&
86         prepare_output &&
88         grep Eight normal >/dev/null &&
89         grep HT normal >/dev/null &&
90         grep With normal >/dev/null &&
91         grep Return normal >/dev/null &&
92         grep No normal >/dev/null
94 '
96 test_expect_success 'no check, tabwidth=10 (attribute), must be irrelevant' '
98         git config core.whitespace "tabwidth=10" &&
99         echo "F -whitespace" >.gitattributes &&
100         prepare_output &&
102         grep Eight normal >/dev/null &&
103         grep HT normal >/dev/null &&
104         grep With normal >/dev/null &&
105         grep Return normal >/dev/null &&
106         grep No normal >/dev/null
110 test_expect_success 'without -trail' '
112         rm -f .gitattributes &&
113         git config core.whitespace -trail &&
114         prepare_output &&
116         grep Eight normal >/dev/null &&
117         grep HT error >/dev/null &&
118         grep With normal >/dev/null &&
119         grep Return normal >/dev/null &&
120         grep No normal >/dev/null
124 test_expect_success 'without -trail (attribute)' '
126         test_might_fail git config --unset core.whitespace &&
127         echo "F whitespace=-trail" >.gitattributes &&
128         prepare_output &&
130         grep Eight normal >/dev/null &&
131         grep HT error >/dev/null &&
132         grep With normal >/dev/null &&
133         grep Return normal >/dev/null &&
134         grep No normal >/dev/null
138 test_expect_success 'without -space' '
140         rm -f .gitattributes &&
141         git config core.whitespace -space &&
142         prepare_output &&
144         grep Eight normal >/dev/null &&
145         grep HT normal >/dev/null &&
146         grep With error >/dev/null &&
147         grep Return error >/dev/null &&
148         grep No normal >/dev/null
152 test_expect_success 'without -space (attribute)' '
154         test_might_fail git config --unset core.whitespace &&
155         echo "F whitespace=-space" >.gitattributes &&
156         prepare_output &&
158         grep Eight normal >/dev/null &&
159         grep HT normal >/dev/null &&
160         grep With error >/dev/null &&
161         grep Return error >/dev/null &&
162         grep No normal >/dev/null
166 test_expect_success 'with indent-non-tab only' '
168         rm -f .gitattributes &&
169         git config core.whitespace indent,-trailing,-space &&
170         prepare_output &&
172         grep Eight error >/dev/null &&
173         grep HT normal >/dev/null &&
174         grep With normal >/dev/null &&
175         grep Return normal >/dev/null &&
176         grep No normal >/dev/null
180 test_expect_success 'with indent-non-tab only (attribute)' '
182         test_might_fail git config --unset core.whitespace &&
183         echo "F whitespace=indent,-trailing,-space" >.gitattributes &&
184         prepare_output &&
186         grep Eight error >/dev/null &&
187         grep HT normal >/dev/null &&
188         grep With normal >/dev/null &&
189         grep Return normal >/dev/null &&
190         grep No normal >/dev/null
194 test_expect_success 'with indent-non-tab only, tabwidth=10' '
196         rm -f .gitattributes &&
197         git config core.whitespace indent,tabwidth=10,-trailing,-space &&
198         prepare_output &&
200         grep Eight normal >/dev/null &&
201         grep HT normal >/dev/null &&
202         grep With normal >/dev/null &&
203         grep Return normal >/dev/null &&
204         grep No normal >/dev/null
208 test_expect_success 'with indent-non-tab only, tabwidth=10 (attribute)' '
210         test_might_fail git config --unset core.whitespace &&
211         echo "F whitespace=indent,-trailing,-space,tabwidth=10" >.gitattributes &&
212         prepare_output &&
214         grep Eight normal >/dev/null &&
215         grep HT normal >/dev/null &&
216         grep With normal >/dev/null &&
217         grep Return normal >/dev/null &&
218         grep No normal >/dev/null
222 test_expect_success 'with cr-at-eol' '
224         rm -f .gitattributes &&
225         git config core.whitespace cr-at-eol &&
226         prepare_output &&
228         grep Eight normal >/dev/null &&
229         grep HT error >/dev/null &&
230         grep With error >/dev/null &&
231         grep Return normal >/dev/null &&
232         grep No normal >/dev/null
236 test_expect_success 'with cr-at-eol (attribute)' '
238         test_might_fail git config --unset core.whitespace &&
239         echo "F whitespace=trailing,cr-at-eol" >.gitattributes &&
240         prepare_output &&
242         grep Eight normal >/dev/null &&
243         grep HT error >/dev/null &&
244         grep With error >/dev/null &&
245         grep Return normal >/dev/null &&
246         grep No normal >/dev/null
250 test_expect_success 'trailing empty lines (1)' '
252         rm -f .gitattributes &&
253         test_must_fail git diff --check >output &&
254         grep "new blank line at" output &&
255         grep "trailing whitespace" output
259 test_expect_success 'trailing empty lines (2)' '
261         echo "F -whitespace" >.gitattributes &&
262         git diff --check >output &&
263         ! test -s output
267 test_expect_success 'checkdiff shows correct line number for trailing blank lines' '
269         printf "a\nb\n" > G &&
270         git add G &&
271         printf "x\nx\nx\na\nb\nc\n\n" > G &&
272         [ "$(git diff --check -- G)" = "G:7: new blank line at EOF." ]
276 test_expect_success 'do not color trailing cr in context' '
277         test_might_fail git config --unset core.whitespace &&
278         rm -f .gitattributes &&
279         echo AAAQ | tr Q "\015" >G &&
280         git add G &&
281         echo BBBQ | tr Q "\015" >>G &&
282         git diff --color G | tr "\015" Q >output &&
283         grep "BBB.*${blue_grep}Q" output &&
284         grep "AAA.*\[mQ" output
288 test_expect_success 'color new trailing blank lines' '
289         { echo a; echo b; echo; echo; } >x &&
290         git add x &&
291         { echo a; echo; echo; echo; echo c; echo; echo; echo; echo; } >x &&
292         git diff --color x >output &&
293         cnt=$($grep_a "${blue_grep}" output | wc -l) &&
294         test $cnt = 2
297 test_done