diff --whitespace=warn/error: obey blank-at-eof
[git/git.git] / t / t4019-diff-wserror.sh
1 #!/bin/sh
2
3 test_description='diff whitespace error detection'
4
5 . ./test-lib.sh
6
7 test_expect_success setup '
8
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
18
19 '
20
21 blue_grep='7;34m' ;# ESC [ 7 ; 3 4 m
22
23 test_expect_success default '
24
25 git diff --color >output
26 grep "$blue_grep" output >error
27 grep -v "$blue_grep" output >normal
28
29 grep Eight normal >/dev/null &&
30 grep HT error >/dev/null &&
31 grep With error >/dev/null &&
32 grep Return error >/dev/null &&
33 grep No normal >/dev/null
34
35 '
36
37 test_expect_success 'without -trail' '
38
39 git config core.whitespace -trail
40 git diff --color >output
41 grep "$blue_grep" output >error
42 grep -v "$blue_grep" output >normal
43
44 grep Eight normal >/dev/null &&
45 grep HT error >/dev/null &&
46 grep With normal >/dev/null &&
47 grep Return normal >/dev/null &&
48 grep No normal >/dev/null
49
50 '
51
52 test_expect_success 'without -trail (attribute)' '
53
54 git config --unset core.whitespace
55 echo "F whitespace=-trail" >.gitattributes
56 git diff --color >output
57 grep "$blue_grep" output >error
58 grep -v "$blue_grep" output >normal
59
60 grep Eight normal >/dev/null &&
61 grep HT error >/dev/null &&
62 grep With normal >/dev/null &&
63 grep Return normal >/dev/null &&
64 grep No normal >/dev/null
65
66 '
67
68 test_expect_success 'without -space' '
69
70 rm -f .gitattributes
71 git config core.whitespace -space
72 git diff --color >output
73 grep "$blue_grep" output >error
74 grep -v "$blue_grep" output >normal
75
76 grep Eight normal >/dev/null &&
77 grep HT normal >/dev/null &&
78 grep With error >/dev/null &&
79 grep Return error >/dev/null &&
80 grep No normal >/dev/null
81
82 '
83
84 test_expect_success 'without -space (attribute)' '
85
86 git config --unset core.whitespace
87 echo "F whitespace=-space" >.gitattributes
88 git diff --color >output
89 grep "$blue_grep" output >error
90 grep -v "$blue_grep" output >normal
91
92 grep Eight normal >/dev/null &&
93 grep HT normal >/dev/null &&
94 grep With error >/dev/null &&
95 grep Return error >/dev/null &&
96 grep No normal >/dev/null
97
98 '
99
100 test_expect_success 'with indent-non-tab only' '
101
102 rm -f .gitattributes
103 git config core.whitespace indent,-trailing,-space
104 git diff --color >output
105 grep "$blue_grep" output >error
106 grep -v "$blue_grep" output >normal
107
108 grep Eight error >/dev/null &&
109 grep HT normal >/dev/null &&
110 grep With normal >/dev/null &&
111 grep Return normal >/dev/null &&
112 grep No normal >/dev/null
113
114 '
115
116 test_expect_success 'with indent-non-tab only (attribute)' '
117
118 git config --unset core.whitespace
119 echo "F whitespace=indent,-trailing,-space" >.gitattributes
120 git diff --color >output
121 grep "$blue_grep" output >error
122 grep -v "$blue_grep" output >normal
123
124 grep Eight error >/dev/null &&
125 grep HT normal >/dev/null &&
126 grep With normal >/dev/null &&
127 grep Return normal >/dev/null &&
128 grep No normal >/dev/null
129
130 '
131
132 test_expect_success 'with cr-at-eol' '
133
134 rm -f .gitattributes
135 git config core.whitespace cr-at-eol
136 git diff --color >output
137 grep "$blue_grep" output >error
138 grep -v "$blue_grep" output >normal
139
140 grep Eight normal >/dev/null &&
141 grep HT error >/dev/null &&
142 grep With error >/dev/null &&
143 grep Return normal >/dev/null &&
144 grep No normal >/dev/null
145
146 '
147
148 test_expect_success 'with cr-at-eol (attribute)' '
149
150 git config --unset core.whitespace
151 echo "F whitespace=trailing,cr-at-eol" >.gitattributes
152 git diff --color >output
153 grep "$blue_grep" output >error
154 grep -v "$blue_grep" output >normal
155
156 grep Eight normal >/dev/null &&
157 grep HT error >/dev/null &&
158 grep With error >/dev/null &&
159 grep Return normal >/dev/null &&
160 grep No normal >/dev/null
161
162 '
163
164 test_expect_success 'trailing empty lines (1)' '
165
166 rm -f .gitattributes &&
167 test_must_fail git diff --check >output &&
168 grep "new blank line at" output &&
169 grep "trailing whitespace" output
170
171 '
172
173 test_expect_success 'trailing empty lines (2)' '
174
175 echo "F -whitespace" >.gitattributes &&
176 git diff --check >output &&
177 ! test -s output
178
179 '
180
181 test_expect_success 'do not color trailing cr in context' '
182 git config --unset core.whitespace
183 rm -f .gitattributes &&
184 echo AAAQ | tr Q "\015" >G &&
185 git add G &&
186 echo BBBQ | tr Q "\015" >>G
187 git diff --color G | tr "\015" Q >output &&
188 grep "BBB.*${blue_grep}Q" output &&
189 grep "AAA.*\[mQ" output
190
191 '
192
193 test_done