Merge branch 'mt/fix-add-rm-with-sparse-index'
[git/debian.git] / t / t0030-stripspace.sh
blobae1ca380c1aa54709a557374d08a700337759b75
1 #!/bin/sh
3 # Copyright (c) 2007 Carlos Rica
6 test_description='git stripspace'
8 TEST_PASSES_SANITIZE_LEAK=true
9 . ./test-lib.sh
11 t40='A quick brown fox jumps over the lazy do'
12 s40=' '
13 sss="$s40$s40$s40$s40$s40$s40$s40$s40$s40$s40" # 400
14 ttt="$t40$t40$t40$t40$t40$t40$t40$t40$t40$t40" # 400
16 test_expect_success \
17 'long lines without spaces should be unchanged' '
18 echo "$ttt" >expect &&
19 git stripspace <expect >actual &&
20 test_cmp expect actual &&
22 echo "$ttt$ttt" >expect &&
23 git stripspace <expect >actual &&
24 test_cmp expect actual &&
26 echo "$ttt$ttt$ttt" >expect &&
27 git stripspace <expect >actual &&
28 test_cmp expect actual &&
30 echo "$ttt$ttt$ttt$ttt" >expect &&
31 git stripspace <expect >actual &&
32 test_cmp expect actual
35 test_expect_success \
36 'lines with spaces at the beginning should be unchanged' '
37 echo "$sss$ttt" >expect &&
38 git stripspace <expect >actual &&
39 test_cmp expect actual &&
41 echo "$sss$sss$ttt" >expect &&
42 git stripspace <expect >actual &&
43 test_cmp expect actual &&
45 echo "$sss$sss$sss$ttt" >expect &&
46 git stripspace <expect >actual &&
47 test_cmp expect actual
50 test_expect_success \
51 'lines with intermediate spaces should be unchanged' '
52 echo "$ttt$sss$ttt" >expect &&
53 git stripspace <expect >actual &&
54 test_cmp expect actual &&
56 echo "$ttt$sss$sss$ttt" >expect &&
57 git stripspace <expect >actual &&
58 test_cmp expect actual
61 test_expect_success \
62 'consecutive blank lines should be unified' '
63 printf "$ttt\n\n$ttt\n" > expect &&
64 printf "$ttt\n\n\n\n\n$ttt\n" | git stripspace >actual &&
65 test_cmp expect actual &&
67 printf "$ttt$ttt\n\n$ttt\n" > expect &&
68 printf "$ttt$ttt\n\n\n\n\n$ttt\n" | git stripspace >actual &&
69 test_cmp expect actual &&
71 printf "$ttt$ttt$ttt\n\n$ttt\n" > expect &&
72 printf "$ttt$ttt$ttt\n\n\n\n\n$ttt\n" | git stripspace >actual &&
73 test_cmp expect actual &&
75 printf "$ttt\n\n$ttt\n" > expect &&
76 printf "$ttt\n\n\n\n\n$ttt\n" | git stripspace >actual &&
77 test_cmp expect actual &&
79 printf "$ttt\n\n$ttt$ttt\n" > expect &&
80 printf "$ttt\n\n\n\n\n$ttt$ttt\n" | git stripspace >actual &&
81 test_cmp expect actual &&
83 printf "$ttt\n\n$ttt$ttt$ttt\n" > expect &&
84 printf "$ttt\n\n\n\n\n$ttt$ttt$ttt\n" | git stripspace >actual &&
85 test_cmp expect actual &&
87 printf "$ttt\n\n$ttt\n" > expect &&
88 printf "$ttt\n\t\n \n\n \t\t\n$ttt\n" | git stripspace >actual &&
89 test_cmp expect actual &&
91 printf "$ttt$ttt\n\n$ttt\n" > expect &&
92 printf "$ttt$ttt\n\t\n \n\n \t\t\n$ttt\n" | git stripspace >actual &&
93 test_cmp expect actual &&
95 printf "$ttt$ttt$ttt\n\n$ttt\n" > expect &&
96 printf "$ttt$ttt$ttt\n\t\n \n\n \t\t\n$ttt\n" | git stripspace >actual &&
97 test_cmp expect actual &&
99 printf "$ttt\n\n$ttt\n" > expect &&
100 printf "$ttt\n\t\n \n\n \t\t\n$ttt\n" | git stripspace >actual &&
101 test_cmp expect actual &&
103 printf "$ttt\n\n$ttt$ttt\n" > expect &&
104 printf "$ttt\n\t\n \n\n \t\t\n$ttt$ttt\n" | git stripspace >actual &&
105 test_cmp expect actual &&
107 printf "$ttt\n\n$ttt$ttt$ttt\n" > expect &&
108 printf "$ttt\n\t\n \n\n \t\t\n$ttt$ttt$ttt\n" | git stripspace >actual &&
109 test_cmp expect actual
112 test_expect_success \
113 'only consecutive blank lines should be completely removed' '
115 printf "\n" | git stripspace >actual &&
116 test_must_be_empty actual &&
118 printf "\n\n\n" | git stripspace >actual &&
119 test_must_be_empty actual &&
121 printf "$sss\n$sss\n$sss\n" | git stripspace >actual &&
122 test_must_be_empty actual &&
124 printf "$sss$sss\n$sss\n\n" | git stripspace >actual &&
125 test_must_be_empty actual &&
127 printf "\n$sss\n$sss$sss\n" | git stripspace >actual &&
128 test_must_be_empty actual &&
130 printf "$sss$sss$sss$sss\n\n\n" | git stripspace >actual &&
131 test_must_be_empty actual &&
133 printf "\n$sss$sss$sss$sss\n\n" | git stripspace >actual &&
134 test_must_be_empty actual &&
136 printf "\n\n$sss$sss$sss$sss\n" | git stripspace >actual &&
137 test_must_be_empty actual
140 test_expect_success \
141 'consecutive blank lines at the beginning should be removed' '
142 printf "$ttt\n" > expect &&
143 printf "\n$ttt\n" | git stripspace >actual &&
144 test_cmp expect actual &&
146 printf "$ttt\n" > expect &&
147 printf "\n\n\n$ttt\n" | git stripspace >actual &&
148 test_cmp expect actual &&
150 printf "$ttt$ttt\n" > expect &&
151 printf "\n\n\n$ttt$ttt\n" | git stripspace >actual &&
152 test_cmp expect actual &&
154 printf "$ttt$ttt$ttt\n" > expect &&
155 printf "\n\n\n$ttt$ttt$ttt\n" | git stripspace >actual &&
156 test_cmp expect actual &&
158 printf "$ttt$ttt$ttt$ttt\n" > expect &&
159 printf "\n\n\n$ttt$ttt$ttt$ttt\n" | git stripspace >actual &&
160 test_cmp expect actual &&
162 printf "$ttt\n" > expect &&
164 printf "$sss\n$sss\n$sss\n$ttt\n" | git stripspace >actual &&
165 test_cmp expect actual &&
167 printf "\n$sss\n$sss$sss\n$ttt\n" | git stripspace >actual &&
168 test_cmp expect actual &&
170 printf "$sss$sss\n$sss\n\n$ttt\n" | git stripspace >actual &&
171 test_cmp expect actual &&
173 printf "$sss$sss$sss\n\n\n$ttt\n" | git stripspace >actual &&
174 test_cmp expect actual &&
176 printf "\n$sss$sss$sss\n\n$ttt\n" | git stripspace >actual &&
177 test_cmp expect actual &&
179 printf "\n\n$sss$sss$sss\n$ttt\n" | git stripspace >actual &&
180 test_cmp expect actual
183 test_expect_success \
184 'consecutive blank lines at the end should be removed' '
185 printf "$ttt\n" > expect &&
186 printf "$ttt\n\n" | git stripspace >actual &&
187 test_cmp expect actual &&
189 printf "$ttt\n" > expect &&
190 printf "$ttt\n\n\n\n" | git stripspace >actual &&
191 test_cmp expect actual &&
193 printf "$ttt$ttt\n" > expect &&
194 printf "$ttt$ttt\n\n\n\n" | git stripspace >actual &&
195 test_cmp expect actual &&
197 printf "$ttt$ttt$ttt\n" > expect &&
198 printf "$ttt$ttt$ttt\n\n\n\n" | git stripspace >actual &&
199 test_cmp expect actual &&
201 printf "$ttt$ttt$ttt$ttt\n" > expect &&
202 printf "$ttt$ttt$ttt$ttt\n\n\n\n" | git stripspace >actual &&
203 test_cmp expect actual &&
205 printf "$ttt\n" > expect &&
207 printf "$ttt\n$sss\n$sss\n$sss\n" | git stripspace >actual &&
208 test_cmp expect actual &&
210 printf "$ttt\n\n$sss\n$sss$sss\n" | git stripspace >actual &&
211 test_cmp expect actual &&
213 printf "$ttt\n$sss$sss\n$sss\n\n" | git stripspace >actual &&
214 test_cmp expect actual &&
216 printf "$ttt\n$sss$sss$sss\n\n\n" | git stripspace >actual &&
217 test_cmp expect actual &&
219 printf "$ttt\n\n$sss$sss$sss\n\n" | git stripspace >actual &&
220 test_cmp expect actual &&
222 printf "$ttt\n\n\n$sss$sss$sss\n" | git stripspace >actual &&
223 test_cmp expect actual
226 test_expect_success \
227 'text without newline at end should end with newline' '
228 test $(printf "$ttt" | git stripspace | wc -l) -gt 0 &&
229 test $(printf "$ttt$ttt" | git stripspace | wc -l) -gt 0 &&
230 test $(printf "$ttt$ttt$ttt" | git stripspace | wc -l) -gt 0 &&
231 test $(printf "$ttt$ttt$ttt$ttt" | git stripspace | wc -l) -gt 0
234 # text plus spaces at the end:
236 test_expect_success \
237 'text plus spaces without newline at end should end with newline' '
238 test $(printf "$ttt$sss" | git stripspace | wc -l) -gt 0 &&
239 test $(printf "$ttt$ttt$sss" | git stripspace | wc -l) -gt 0 &&
240 test $(printf "$ttt$ttt$ttt$sss" | git stripspace | wc -l) -gt 0 &&
241 test $(printf "$ttt$sss$sss" | git stripspace | wc -l) -gt 0 &&
242 test $(printf "$ttt$ttt$sss$sss" | git stripspace | wc -l) -gt 0 &&
243 test $(printf "$ttt$sss$sss$sss" | git stripspace | wc -l) -gt 0
246 test_expect_success \
247 'text plus spaces without newline at end should not show spaces' '
248 ! (printf "$ttt$sss" | git stripspace | grep " " >/dev/null) &&
249 ! (printf "$ttt$ttt$sss" | git stripspace | grep " " >/dev/null) &&
250 ! (printf "$ttt$ttt$ttt$sss" | git stripspace | grep " " >/dev/null) &&
251 ! (printf "$ttt$sss$sss" | git stripspace | grep " " >/dev/null) &&
252 ! (printf "$ttt$ttt$sss$sss" | git stripspace | grep " " >/dev/null) &&
253 ! (printf "$ttt$sss$sss$sss" | git stripspace | grep " " >/dev/null)
256 test_expect_success \
257 'text plus spaces without newline should show the correct lines' '
258 printf "$ttt\n" >expect &&
259 printf "$ttt$sss" | git stripspace >actual &&
260 test_cmp expect actual &&
262 printf "$ttt\n" >expect &&
263 printf "$ttt$sss$sss" | git stripspace >actual &&
264 test_cmp expect actual &&
266 printf "$ttt\n" >expect &&
267 printf "$ttt$sss$sss$sss" | git stripspace >actual &&
268 test_cmp expect actual &&
270 printf "$ttt$ttt\n" >expect &&
271 printf "$ttt$ttt$sss" | git stripspace >actual &&
272 test_cmp expect actual &&
274 printf "$ttt$ttt\n" >expect &&
275 printf "$ttt$ttt$sss$sss" | git stripspace >actual &&
276 test_cmp expect actual &&
278 printf "$ttt$ttt$ttt\n" >expect &&
279 printf "$ttt$ttt$ttt$sss" | git stripspace >actual &&
280 test_cmp expect actual
283 test_expect_success \
284 'text plus spaces at end should not show spaces' '
285 ! (echo "$ttt$sss" | git stripspace | grep " " >/dev/null) &&
286 ! (echo "$ttt$ttt$sss" | git stripspace | grep " " >/dev/null) &&
287 ! (echo "$ttt$ttt$ttt$sss" | git stripspace | grep " " >/dev/null) &&
288 ! (echo "$ttt$sss$sss" | git stripspace | grep " " >/dev/null) &&
289 ! (echo "$ttt$ttt$sss$sss" | git stripspace | grep " " >/dev/null) &&
290 ! (echo "$ttt$sss$sss$sss" | git stripspace | grep " " >/dev/null)
293 test_expect_success \
294 'text plus spaces at end should be cleaned and newline must remain' '
295 echo "$ttt" >expect &&
296 echo "$ttt$sss" | git stripspace >actual &&
297 test_cmp expect actual &&
299 echo "$ttt" >expect &&
300 echo "$ttt$sss$sss" | git stripspace >actual &&
301 test_cmp expect actual &&
303 echo "$ttt" >expect &&
304 echo "$ttt$sss$sss$sss" | git stripspace >actual &&
305 test_cmp expect actual &&
307 echo "$ttt$ttt" >expect &&
308 echo "$ttt$ttt$sss" | git stripspace >actual &&
309 test_cmp expect actual &&
311 echo "$ttt$ttt" >expect &&
312 echo "$ttt$ttt$sss$sss" | git stripspace >actual &&
313 test_cmp expect actual &&
315 echo "$ttt$ttt$ttt" >expect &&
316 echo "$ttt$ttt$ttt$sss" | git stripspace >actual &&
317 test_cmp expect actual
320 # spaces only:
322 test_expect_success \
323 'spaces with newline at end should be replaced with empty string' '
324 echo | git stripspace >actual &&
325 test_must_be_empty actual &&
327 echo "$sss" | git stripspace >actual &&
328 test_must_be_empty actual &&
330 echo "$sss$sss" | git stripspace >actual &&
331 test_must_be_empty actual &&
333 echo "$sss$sss$sss" | git stripspace >actual &&
334 test_must_be_empty actual &&
336 echo "$sss$sss$sss$sss" | git stripspace >actual &&
337 test_must_be_empty actual
340 test_expect_success \
341 'spaces without newline at end should not show spaces' '
342 ! (printf "" | git stripspace | grep " " >/dev/null) &&
343 ! (printf "$sss" | git stripspace | grep " " >/dev/null) &&
344 ! (printf "$sss$sss" | git stripspace | grep " " >/dev/null) &&
345 ! (printf "$sss$sss$sss" | git stripspace | grep " " >/dev/null) &&
346 ! (printf "$sss$sss$sss$sss" | git stripspace | grep " " >/dev/null)
349 test_expect_success \
350 'spaces without newline at end should be replaced with empty string' '
351 printf "" | git stripspace >actual &&
352 test_must_be_empty actual &&
354 printf "$sss$sss" | git stripspace >actual &&
355 test_must_be_empty actual &&
357 printf "$sss$sss$sss" | git stripspace >actual &&
358 test_must_be_empty actual &&
360 printf "$sss$sss$sss$sss" | git stripspace >actual &&
361 test_must_be_empty actual
364 test_expect_success \
365 'consecutive text lines should be unchanged' '
366 printf "$ttt$ttt\n$ttt\n" >expect &&
367 printf "$ttt$ttt\n$ttt\n" | git stripspace >actual &&
368 test_cmp expect actual &&
370 printf "$ttt\n$ttt$ttt\n$ttt\n" >expect &&
371 printf "$ttt\n$ttt$ttt\n$ttt\n" | git stripspace >actual &&
372 test_cmp expect actual &&
374 printf "$ttt\n$ttt\n$ttt\n$ttt$ttt\n" >expect &&
375 printf "$ttt\n$ttt\n$ttt\n$ttt$ttt\n" | git stripspace >actual &&
376 test_cmp expect actual &&
378 printf "$ttt\n$ttt\n\n$ttt$ttt\n$ttt\n" >expect &&
379 printf "$ttt\n$ttt\n\n$ttt$ttt\n$ttt\n" | git stripspace >actual &&
380 test_cmp expect actual &&
382 printf "$ttt$ttt\n\n$ttt\n$ttt$ttt\n" >expect &&
383 printf "$ttt$ttt\n\n$ttt\n$ttt$ttt\n" | git stripspace >actual &&
384 test_cmp expect actual &&
386 printf "$ttt\n$ttt$ttt\n\n$ttt\n" >expect &&
387 printf "$ttt\n$ttt$ttt\n\n$ttt\n" | git stripspace >actual &&
388 test_cmp expect actual
391 test_expect_success 'strip comments, too' '
392 test ! -z "$(echo "# comment" | git stripspace)" &&
393 test -z "$(echo "# comment" | git stripspace -s)"
396 test_expect_success 'strip comments with changed comment char' '
397 test ! -z "$(echo "; comment" | git -c core.commentchar=";" stripspace)" &&
398 test -z "$(echo "; comment" | git -c core.commentchar=";" stripspace -s)"
401 test_expect_success '-c with single line' '
402 printf "# foo\n" >expect &&
403 printf "foo" | git stripspace -c >actual &&
404 test_cmp expect actual
407 test_expect_success '-c with single line followed by empty line' '
408 printf "# foo\n#\n" >expect &&
409 printf "foo\n\n" | git stripspace -c >actual &&
410 test_cmp expect actual
413 test_expect_success '-c with newline only' '
414 printf "#\n" >expect &&
415 printf "\n" | git stripspace -c >actual &&
416 test_cmp expect actual
419 test_expect_success '--comment-lines with single line' '
420 printf "# foo\n" >expect &&
421 printf "foo" | git stripspace -c >actual &&
422 test_cmp expect actual
425 test_expect_success '-c with changed comment char' '
426 printf "; foo\n" >expect &&
427 printf "foo" | git -c core.commentchar=";" stripspace -c >actual &&
428 test_cmp expect actual
431 test_expect_success '-c with comment char defined in .git/config' '
432 test_config core.commentchar = &&
433 printf "= foo\n" >expect &&
434 rm -fr sub &&
435 mkdir sub &&
436 printf "foo" | git -C sub stripspace -c >actual &&
437 test_cmp expect actual
440 test_expect_success '-c outside git repository' '
441 printf "# foo\n" >expect &&
442 printf "foo" | nongit git stripspace -c >actual &&
443 test_cmp expect actual
446 test_expect_success 'avoid SP-HT sequence in commented line' '
447 printf "#\tone\n#\n# two\n" >expect &&
448 printf "\tone\n\ntwo\n" | git stripspace -c >actual &&
449 test_cmp expect actual
452 test_done