1#!/bin/sh
2#
3# Copyright (c) 2007 Carlos Rica
4#
5
6test_description='git stripspace'
7
8. ./test-lib.sh
9
10t40='A quick brown fox jumps over the lazy do'
11s40=' '
12sss="$s40$s40$s40$s40$s40$s40$s40$s40$s40$s40" # 400
13ttt="$t40$t40$t40$t40$t40$t40$t40$t40$t40$t40" # 400
14
15test_expect_success \
16 'long lines without spaces should be unchanged' '
17 echo "$ttt" >expect &&
18 git stripspace <expect >actual &&
19 test_cmp expect actual &&
20
21 echo "$ttt$ttt" >expect &&
22 git stripspace <expect >actual &&
23 test_cmp expect actual &&
24
25 echo "$ttt$ttt$ttt" >expect &&
26 git stripspace <expect >actual &&
27 test_cmp expect actual &&
28
29 echo "$ttt$ttt$ttt$ttt" >expect &&
30 git stripspace <expect >actual &&
31 test_cmp expect actual
32'
33
34test_expect_success \
35 'lines with spaces at the beginning should be unchanged' '
36 echo "$sss$ttt" >expect &&
37 git stripspace <expect >actual &&
38 test_cmp expect actual &&
39
40 echo "$sss$sss$ttt" >expect &&
41 git stripspace <expect >actual &&
42 test_cmp expect actual &&
43
44 echo "$sss$sss$sss$ttt" >expect &&
45 git stripspace <expect >actual &&
46 test_cmp expect actual
47'
48
49test_expect_success \
50 'lines with intermediate spaces should be unchanged' '
51 echo "$ttt$sss$ttt" >expect &&
52 git stripspace <expect >actual &&
53 test_cmp expect actual &&
54
55 echo "$ttt$sss$sss$ttt" >expect &&
56 git stripspace <expect >actual &&
57 test_cmp expect actual
58'
59
60test_expect_success \
61 'consecutive blank lines should be unified' '
62 printf "$ttt\n\n$ttt\n" > expect &&
63 printf "$ttt\n\n\n\n\n$ttt\n" | git stripspace >actual &&
64 test_cmp expect actual &&
65
66 printf "$ttt$ttt\n\n$ttt\n" > expect &&
67 printf "$ttt$ttt\n\n\n\n\n$ttt\n" | git stripspace >actual &&
68 test_cmp expect actual &&
69
70 printf "$ttt$ttt$ttt\n\n$ttt\n" > expect &&
71 printf "$ttt$ttt$ttt\n\n\n\n\n$ttt\n" | git stripspace >actual &&
72 test_cmp expect actual &&
73
74 printf "$ttt\n\n$ttt\n" > expect &&
75 printf "$ttt\n\n\n\n\n$ttt\n" | git stripspace >actual &&
76 test_cmp expect actual &&
77
78 printf "$ttt\n\n$ttt$ttt\n" > expect &&
79 printf "$ttt\n\n\n\n\n$ttt$ttt\n" | git stripspace >actual &&
80 test_cmp expect actual &&
81
82 printf "$ttt\n\n$ttt$ttt$ttt\n" > expect &&
83 printf "$ttt\n\n\n\n\n$ttt$ttt$ttt\n" | git stripspace >actual &&
84 test_cmp expect actual &&
85
86 printf "$ttt\n\n$ttt\n" > expect &&
87 printf "$ttt\n\t\n \n\n \t\t\n$ttt\n" | git stripspace >actual &&
88 test_cmp expect actual &&
89
90 printf "$ttt$ttt\n\n$ttt\n" > expect &&
91 printf "$ttt$ttt\n\t\n \n\n \t\t\n$ttt\n" | git stripspace >actual &&
92 test_cmp expect actual &&
93
94 printf "$ttt$ttt$ttt\n\n$ttt\n" > expect &&
95 printf "$ttt$ttt$ttt\n\t\n \n\n \t\t\n$ttt\n" | git stripspace >actual &&
96 test_cmp expect actual &&
97
98 printf "$ttt\n\n$ttt\n" > expect &&
99 printf "$ttt\n\t\n \n\n \t\t\n$ttt\n" | git stripspace >actual &&
100 test_cmp expect actual &&
101
102 printf "$ttt\n\n$ttt$ttt\n" > expect &&
103 printf "$ttt\n\t\n \n\n \t\t\n$ttt$ttt\n" | git stripspace >actual &&
104 test_cmp expect actual &&
105
106 printf "$ttt\n\n$ttt$ttt$ttt\n" > expect &&
107 printf "$ttt\n\t\n \n\n \t\t\n$ttt$ttt$ttt\n" | git stripspace >actual &&
108 test_cmp expect actual
109'
110
111test_expect_success \
112 'only consecutive blank lines should be completely removed' '
113
114 printf "\n" | git stripspace >actual &&
115 test_must_be_empty actual &&
116
117 printf "\n\n\n" | git stripspace >actual &&
118 test_must_be_empty actual &&
119
120 printf "$sss\n$sss\n$sss\n" | git stripspace >actual &&
121 test_must_be_empty actual &&
122
123 printf "$sss$sss\n$sss\n\n" | git stripspace >actual &&
124 test_must_be_empty actual &&
125
126 printf "\n$sss\n$sss$sss\n" | git stripspace >actual &&
127 test_must_be_empty actual &&
128
129 printf "$sss$sss$sss$sss\n\n\n" | git stripspace >actual &&
130 test_must_be_empty actual &&
131
132 printf "\n$sss$sss$sss$sss\n\n" | git stripspace >actual &&
133 test_must_be_empty actual &&
134
135 printf "\n\n$sss$sss$sss$sss\n" | git stripspace >actual &&
136 test_must_be_empty actual
137'
138
139test_expect_success \
140 'consecutive blank lines at the beginning should be removed' '
141 printf "$ttt\n" > expect &&
142 printf "\n$ttt\n" | git stripspace >actual &&
143 test_cmp expect actual &&
144
145 printf "$ttt\n" > expect &&
146 printf "\n\n\n$ttt\n" | git stripspace >actual &&
147 test_cmp expect actual &&
148
149 printf "$ttt$ttt\n" > expect &&
150 printf "\n\n\n$ttt$ttt\n" | git stripspace >actual &&
151 test_cmp expect actual &&
152
153 printf "$ttt$ttt$ttt\n" > expect &&
154 printf "\n\n\n$ttt$ttt$ttt\n" | git stripspace >actual &&
155 test_cmp expect actual &&
156
157 printf "$ttt$ttt$ttt$ttt\n" > expect &&
158 printf "\n\n\n$ttt$ttt$ttt$ttt\n" | git stripspace >actual &&
159 test_cmp expect actual &&
160
161 printf "$ttt\n" > expect &&
162
163 printf "$sss\n$sss\n$sss\n$ttt\n" | git stripspace >actual &&
164 test_cmp expect actual &&
165
166 printf "\n$sss\n$sss$sss\n$ttt\n" | git stripspace >actual &&
167 test_cmp expect actual &&
168
169 printf "$sss$sss\n$sss\n\n$ttt\n" | git stripspace >actual &&
170 test_cmp expect actual &&
171
172 printf "$sss$sss$sss\n\n\n$ttt\n" | git stripspace >actual &&
173 test_cmp expect actual &&
174
175 printf "\n$sss$sss$sss\n\n$ttt\n" | git stripspace >actual &&
176 test_cmp expect actual &&
177
178 printf "\n\n$sss$sss$sss\n$ttt\n" | git stripspace >actual &&
179 test_cmp expect actual
180'
181
182test_expect_success \
183 'consecutive blank lines at the end should be removed' '
184 printf "$ttt\n" > expect &&
185 printf "$ttt\n\n" | git stripspace >actual &&
186 test_cmp expect actual &&
187
188 printf "$ttt\n" > expect &&
189 printf "$ttt\n\n\n\n" | git stripspace >actual &&
190 test_cmp expect actual &&
191
192 printf "$ttt$ttt\n" > expect &&
193 printf "$ttt$ttt\n\n\n\n" | git stripspace >actual &&
194 test_cmp expect actual &&
195
196 printf "$ttt$ttt$ttt\n" > expect &&
197 printf "$ttt$ttt$ttt\n\n\n\n" | git stripspace >actual &&
198 test_cmp expect actual &&
199
200 printf "$ttt$ttt$ttt$ttt\n" > expect &&
201 printf "$ttt$ttt$ttt$ttt\n\n\n\n" | git stripspace >actual &&
202 test_cmp expect actual &&
203
204 printf "$ttt\n" > expect &&
205
206 printf "$ttt\n$sss\n$sss\n$sss\n" | git stripspace >actual &&
207 test_cmp expect actual &&
208
209 printf "$ttt\n\n$sss\n$sss$sss\n" | git stripspace >actual &&
210 test_cmp expect actual &&
211
212 printf "$ttt\n$sss$sss\n$sss\n\n" | git stripspace >actual &&
213 test_cmp expect actual &&
214
215 printf "$ttt\n$sss$sss$sss\n\n\n" | git stripspace >actual &&
216 test_cmp expect actual &&
217
218 printf "$ttt\n\n$sss$sss$sss\n\n" | git stripspace >actual &&
219 test_cmp expect actual &&
220
221 printf "$ttt\n\n\n$sss$sss$sss\n" | git stripspace >actual &&
222 test_cmp expect actual
223'
224
225test_expect_success \
226 'text without newline at end should end with newline' '
227 test $(printf "$ttt" | git stripspace | wc -l) -gt 0 &&
228 test $(printf "$ttt$ttt" | git stripspace | wc -l) -gt 0 &&
229 test $(printf "$ttt$ttt$ttt" | git stripspace | wc -l) -gt 0 &&
230 test $(printf "$ttt$ttt$ttt$ttt" | git stripspace | wc -l) -gt 0
231'
232
233# text plus spaces at the end:
234
235test_expect_success \
236 'text plus spaces without newline at end should end with newline' '
237 test $(printf "$ttt$sss" | git stripspace | wc -l) -gt 0 &&
238 test $(printf "$ttt$ttt$sss" | git stripspace | wc -l) -gt 0 &&
239 test $(printf "$ttt$ttt$ttt$sss" | git stripspace | wc -l) -gt 0 &&
240 test $(printf "$ttt$sss$sss" | git stripspace | wc -l) -gt 0 &&
241 test $(printf "$ttt$ttt$sss$sss" | git stripspace | wc -l) -gt 0 &&
242 test $(printf "$ttt$sss$sss$sss" | git stripspace | wc -l) -gt 0
243'
244
245test_expect_success \
246 'text plus spaces without newline at end should not show spaces' '
247 ! (printf "$ttt$sss" | git stripspace | grep " " >/dev/null) &&
248 ! (printf "$ttt$ttt$sss" | git stripspace | grep " " >/dev/null) &&
249 ! (printf "$ttt$ttt$ttt$sss" | git stripspace | grep " " >/dev/null) &&
250 ! (printf "$ttt$sss$sss" | git stripspace | grep " " >/dev/null) &&
251 ! (printf "$ttt$ttt$sss$sss" | git stripspace | grep " " >/dev/null) &&
252 ! (printf "$ttt$sss$sss$sss" | git stripspace | grep " " >/dev/null)
253'
254
255test_expect_success \
256 'text plus spaces without newline should show the correct lines' '
257 printf "$ttt\n" >expect &&
258 printf "$ttt$sss" | git stripspace >actual &&
259 test_cmp expect actual &&
260
261 printf "$ttt\n" >expect &&
262 printf "$ttt$sss$sss" | git stripspace >actual &&
263 test_cmp expect actual &&
264
265 printf "$ttt\n" >expect &&
266 printf "$ttt$sss$sss$sss" | git stripspace >actual &&
267 test_cmp expect actual &&
268
269 printf "$ttt$ttt\n" >expect &&
270 printf "$ttt$ttt$sss" | git stripspace >actual &&
271 test_cmp expect actual &&
272
273 printf "$ttt$ttt\n" >expect &&
274 printf "$ttt$ttt$sss$sss" | git stripspace >actual &&
275 test_cmp expect actual &&
276
277 printf "$ttt$ttt$ttt\n" >expect &&
278 printf "$ttt$ttt$ttt$sss" | git stripspace >actual &&
279 test_cmp expect actual
280'
281
282test_expect_success \
283 'text plus spaces at end should not show spaces' '
284 ! (echo "$ttt$sss" | git stripspace | grep " " >/dev/null) &&
285 ! (echo "$ttt$ttt$sss" | git stripspace | grep " " >/dev/null) &&
286 ! (echo "$ttt$ttt$ttt$sss" | git stripspace | grep " " >/dev/null) &&
287 ! (echo "$ttt$sss$sss" | git stripspace | grep " " >/dev/null) &&
288 ! (echo "$ttt$ttt$sss$sss" | git stripspace | grep " " >/dev/null) &&
289 ! (echo "$ttt$sss$sss$sss" | git stripspace | grep " " >/dev/null)
290'
291
292test_expect_success \
293 'text plus spaces at end should be cleaned and newline must remain' '
294 echo "$ttt" >expect &&
295 echo "$ttt$sss" | git stripspace >actual &&
296 test_cmp expect actual &&
297
298 echo "$ttt" >expect &&
299 echo "$ttt$sss$sss" | git stripspace >actual &&
300 test_cmp expect actual &&
301
302 echo "$ttt" >expect &&
303 echo "$ttt$sss$sss$sss" | git stripspace >actual &&
304 test_cmp expect actual &&
305
306 echo "$ttt$ttt" >expect &&
307 echo "$ttt$ttt$sss" | git stripspace >actual &&
308 test_cmp expect actual &&
309
310 echo "$ttt$ttt" >expect &&
311 echo "$ttt$ttt$sss$sss" | git stripspace >actual &&
312 test_cmp expect actual &&
313
314 echo "$ttt$ttt$ttt" >expect &&
315 echo "$ttt$ttt$ttt$sss" | git stripspace >actual &&
316 test_cmp expect actual
317'
318
319# spaces only:
320
321test_expect_success \
322 'spaces with newline at end should be replaced with empty string' '
323 echo | git stripspace >actual &&
324 test_must_be_empty actual &&
325
326 echo "$sss" | git stripspace >actual &&
327 test_must_be_empty actual &&
328
329 echo "$sss$sss" | git stripspace >actual &&
330 test_must_be_empty actual &&
331
332 echo "$sss$sss$sss" | git stripspace >actual &&
333 test_must_be_empty actual &&
334
335 echo "$sss$sss$sss$sss" | git stripspace >actual &&
336 test_must_be_empty actual
337'
338
339test_expect_success \
340 'spaces without newline at end should not show spaces' '
341 ! (printf "" | git stripspace | grep " " >/dev/null) &&
342 ! (printf "$sss" | git stripspace | grep " " >/dev/null) &&
343 ! (printf "$sss$sss" | git stripspace | grep " " >/dev/null) &&
344 ! (printf "$sss$sss$sss" | git stripspace | grep " " >/dev/null) &&
345 ! (printf "$sss$sss$sss$sss" | git stripspace | grep " " >/dev/null)
346'
347
348test_expect_success \
349 'spaces without newline at end should be replaced with empty string' '
350 printf "" | git stripspace >actual &&
351 test_must_be_empty actual &&
352
353 printf "$sss$sss" | git stripspace >actual &&
354 test_must_be_empty actual &&
355
356 printf "$sss$sss$sss" | git stripspace >actual &&
357 test_must_be_empty actual &&
358
359 printf "$sss$sss$sss$sss" | git stripspace >actual &&
360 test_must_be_empty actual
361'
362
363test_expect_success \
364 'consecutive text lines should be unchanged' '
365 printf "$ttt$ttt\n$ttt\n" >expect &&
366 printf "$ttt$ttt\n$ttt\n" | git stripspace >actual &&
367 test_cmp expect actual &&
368
369 printf "$ttt\n$ttt$ttt\n$ttt\n" >expect &&
370 printf "$ttt\n$ttt$ttt\n$ttt\n" | git stripspace >actual &&
371 test_cmp expect actual &&
372
373 printf "$ttt\n$ttt\n$ttt\n$ttt$ttt\n" >expect &&
374 printf "$ttt\n$ttt\n$ttt\n$ttt$ttt\n" | git stripspace >actual &&
375 test_cmp expect actual &&
376
377 printf "$ttt\n$ttt\n\n$ttt$ttt\n$ttt\n" >expect &&
378 printf "$ttt\n$ttt\n\n$ttt$ttt\n$ttt\n" | git stripspace >actual &&
379 test_cmp expect actual &&
380
381 printf "$ttt$ttt\n\n$ttt\n$ttt$ttt\n" >expect &&
382 printf "$ttt$ttt\n\n$ttt\n$ttt$ttt\n" | git stripspace >actual &&
383 test_cmp expect actual &&
384
385 printf "$ttt\n$ttt$ttt\n\n$ttt\n" >expect &&
386 printf "$ttt\n$ttt$ttt\n\n$ttt\n" | git stripspace >actual &&
387 test_cmp expect actual
388'
389
390test_expect_success 'strip comments, too' '
391 test ! -z "$(echo "# comment" | git stripspace)" &&
392 test -z "$(echo "# comment" | git stripspace -s)"
393'
394
395test_expect_success 'strip comments with changed comment char' '
396 test ! -z "$(echo "; comment" | git -c core.commentchar=";" stripspace)" &&
397 test -z "$(echo "; comment" | git -c core.commentchar=";" stripspace -s)"
398'
399
400test_expect_success '-c with single line' '
401 printf "# foo\n" >expect &&
402 printf "foo" | git stripspace -c >actual &&
403 test_cmp expect actual
404'
405
406test_expect_success '-c with single line followed by empty line' '
407 printf "# foo\n#\n" >expect &&
408 printf "foo\n\n" | git stripspace -c >actual &&
409 test_cmp expect actual
410'
411
412test_expect_success '-c with newline only' '
413 printf "#\n" >expect &&
414 printf "\n" | git stripspace -c >actual &&
415 test_cmp expect actual
416'
417
418test_expect_success '--comment-lines with single line' '
419 printf "# foo\n" >expect &&
420 printf "foo" | git stripspace -c >actual &&
421 test_cmp expect actual
422'
423
424test_expect_success '-c with changed comment char' '
425 printf "; foo\n" >expect &&
426 printf "foo" | git -c core.commentchar=";" stripspace -c >actual &&
427 test_cmp expect actual
428'
429
430test_expect_success '-c with comment char defined in .git/config' '
431 test_config core.commentchar = &&
432 printf "= foo\n" >expect &&
433 rm -fr sub &&
434 mkdir sub &&
435 printf "foo" | git -C sub stripspace -c >actual &&
436 test_cmp expect actual
437'
438
439test_expect_success '-c outside git repository' '
440 printf "# foo\n" >expect &&
441 printf "foo" | nongit git stripspace -c >actual &&
442 test_cmp expect actual
443'
444
445test_expect_success 'avoid SP-HT sequence in commented line' '
446 printf "#\tone\n#\n# two\n" >expect &&
447 printf "\tone\n\ntwo\n" | git stripspace -c >actual &&
448 test_cmp expect actual
449'
450
451test_done