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 > expect &&
114
115 printf "\n" | git stripspace >actual &&
116 test_cmp expect actual &&
117
118 printf "\n\n\n" | git stripspace >actual &&
119 test_cmp expect actual &&
120
121 printf "$sss\n$sss\n$sss\n" | git stripspace >actual &&
122 test_cmp expect actual &&
123
124 printf "$sss$sss\n$sss\n\n" | git stripspace >actual &&
125 test_cmp expect actual &&
126
127 printf "\n$sss\n$sss$sss\n" | git stripspace >actual &&
128 test_cmp expect actual &&
129
130 printf "$sss$sss$sss$sss\n\n\n" | git stripspace >actual &&
131 test_cmp expect actual &&
132
133 printf "\n$sss$sss$sss$sss\n\n" | git stripspace >actual &&
134 test_cmp expect actual &&
135
136 printf "\n\n$sss$sss$sss$sss\n" | git stripspace >actual &&
137 test_cmp expect actual
138'
139
140test_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 &&
145
146 printf "$ttt\n" > expect &&
147 printf "\n\n\n$ttt\n" | git stripspace >actual &&
148 test_cmp expect actual &&
149
150 printf "$ttt$ttt\n" > expect &&
151 printf "\n\n\n$ttt$ttt\n" | git stripspace >actual &&
152 test_cmp expect actual &&
153
154 printf "$ttt$ttt$ttt\n" > expect &&
155 printf "\n\n\n$ttt$ttt$ttt\n" | git stripspace >actual &&
156 test_cmp expect actual &&
157
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 &&
161
162 printf "$ttt\n" > expect &&
163
164 printf "$sss\n$sss\n$sss\n$ttt\n" | git stripspace >actual &&
165 test_cmp expect actual &&
166
167 printf "\n$sss\n$sss$sss\n$ttt\n" | git stripspace >actual &&
168 test_cmp expect actual &&
169
170 printf "$sss$sss\n$sss\n\n$ttt\n" | git stripspace >actual &&
171 test_cmp expect actual &&
172
173 printf "$sss$sss$sss\n\n\n$ttt\n" | git stripspace >actual &&
174 test_cmp expect actual &&
175
176 printf "\n$sss$sss$sss\n\n$ttt\n" | git stripspace >actual &&
177 test_cmp expect actual &&
178
179 printf "\n\n$sss$sss$sss\n$ttt\n" | git stripspace >actual &&
180 test_cmp expect actual
181'
182
183test_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 &&
188
189 printf "$ttt\n" > expect &&
190 printf "$ttt\n\n\n\n" | git stripspace >actual &&
191 test_cmp expect actual &&
192
193 printf "$ttt$ttt\n" > expect &&
194 printf "$ttt$ttt\n\n\n\n" | git stripspace >actual &&
195 test_cmp expect actual &&
196
197 printf "$ttt$ttt$ttt\n" > expect &&
198 printf "$ttt$ttt$ttt\n\n\n\n" | git stripspace >actual &&
199 test_cmp expect actual &&
200
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 &&
204
205 printf "$ttt\n" > expect &&
206
207 printf "$ttt\n$sss\n$sss\n$sss\n" | git stripspace >actual &&
208 test_cmp expect actual &&
209
210 printf "$ttt\n\n$sss\n$sss$sss\n" | git stripspace >actual &&
211 test_cmp expect actual &&
212
213 printf "$ttt\n$sss$sss\n$sss\n\n" | git stripspace >actual &&
214 test_cmp expect actual &&
215
216 printf "$ttt\n$sss$sss$sss\n\n\n" | git stripspace >actual &&
217 test_cmp expect actual &&
218
219 printf "$ttt\n\n$sss$sss$sss\n\n" | git stripspace >actual &&
220 test_cmp expect actual &&
221
222 printf "$ttt\n\n\n$sss$sss$sss\n" | git stripspace >actual &&
223 test_cmp expect actual
224'
225
226test_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
232'
233
234# text plus spaces at the end:
235
236test_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
244'
245
246test_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)
254'
255
256test_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 &&
261
262 printf "$ttt\n" >expect &&
263 printf "$ttt$sss$sss" | git stripspace >actual &&
264 test_cmp expect actual &&
265
266 printf "$ttt\n" >expect &&
267 printf "$ttt$sss$sss$sss" | git stripspace >actual &&
268 test_cmp expect actual &&
269
270 printf "$ttt$ttt\n" >expect &&
271 printf "$ttt$ttt$sss" | git stripspace >actual &&
272 test_cmp expect actual &&
273
274 printf "$ttt$ttt\n" >expect &&
275 printf "$ttt$ttt$sss$sss" | git stripspace >actual &&
276 test_cmp expect actual &&
277
278 printf "$ttt$ttt$ttt\n" >expect &&
279 printf "$ttt$ttt$ttt$sss" | git stripspace >actual &&
280 test_cmp expect actual
281'
282
283test_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)
291'
292
293test_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 &&
298
299 echo "$ttt" >expect &&
300 echo "$ttt$sss$sss" | git stripspace >actual &&
301 test_cmp expect actual &&
302
303 echo "$ttt" >expect &&
304 echo "$ttt$sss$sss$sss" | git stripspace >actual &&
305 test_cmp expect actual &&
306
307 echo "$ttt$ttt" >expect &&
308 echo "$ttt$ttt$sss" | git stripspace >actual &&
309 test_cmp expect actual &&
310
311 echo "$ttt$ttt" >expect &&
312 echo "$ttt$ttt$sss$sss" | git stripspace >actual &&
313 test_cmp expect actual &&
314
315 echo "$ttt$ttt$ttt" >expect &&
316 echo "$ttt$ttt$ttt$sss" | git stripspace >actual &&
317 test_cmp expect actual
318'
319
320# spaces only:
321
322test_expect_success \
323 'spaces with newline at end should be replaced with empty string' '
324 printf "" >expect &&
325
326 echo | git stripspace >actual &&
327 test_cmp expect actual &&
328
329 echo "$sss" | git stripspace >actual &&
330 test_cmp expect actual &&
331
332 echo "$sss$sss" | git stripspace >actual &&
333 test_cmp expect actual &&
334
335 echo "$sss$sss$sss" | git stripspace >actual &&
336 test_cmp expect actual &&
337
338 echo "$sss$sss$sss$sss" | git stripspace >actual &&
339 test_cmp expect actual
340'
341
342test_expect_success \
343 'spaces without newline at end should not show spaces' '
344 ! (printf "" | git stripspace | grep " " >/dev/null) &&
345 ! (printf "$sss" | git stripspace | grep " " >/dev/null) &&
346 ! (printf "$sss$sss" | git stripspace | grep " " >/dev/null) &&
347 ! (printf "$sss$sss$sss" | git stripspace | grep " " >/dev/null) &&
348 ! (printf "$sss$sss$sss$sss" | git stripspace | grep " " >/dev/null)
349'
350
351test_expect_success \
352 'spaces without newline at end should be replaced with empty string' '
353 printf "" >expect &&
354
355 printf "" | git stripspace >actual &&
356 test_cmp expect actual &&
357
358 printf "$sss$sss" | git stripspace >actual &&
359 test_cmp expect actual &&
360
361 printf "$sss$sss$sss" | git stripspace >actual &&
362 test_cmp expect actual &&
363
364 printf "$sss$sss$sss$sss" | git stripspace >actual &&
365 test_cmp expect actual
366'
367
368test_expect_success \
369 'consecutive text lines should be unchanged' '
370 printf "$ttt$ttt\n$ttt\n" >expect &&
371 printf "$ttt$ttt\n$ttt\n" | git stripspace >actual &&
372 test_cmp expect actual &&
373
374 printf "$ttt\n$ttt$ttt\n$ttt\n" >expect &&
375 printf "$ttt\n$ttt$ttt\n$ttt\n" | git stripspace >actual &&
376 test_cmp expect actual &&
377
378 printf "$ttt\n$ttt\n$ttt\n$ttt$ttt\n" >expect &&
379 printf "$ttt\n$ttt\n$ttt\n$ttt$ttt\n" | git stripspace >actual &&
380 test_cmp expect actual &&
381
382 printf "$ttt\n$ttt\n\n$ttt$ttt\n$ttt\n" >expect &&
383 printf "$ttt\n$ttt\n\n$ttt$ttt\n$ttt\n" | git stripspace >actual &&
384 test_cmp expect actual &&
385
386 printf "$ttt$ttt\n\n$ttt\n$ttt$ttt\n" >expect &&
387 printf "$ttt$ttt\n\n$ttt\n$ttt$ttt\n" | git stripspace >actual &&
388 test_cmp expect actual &&
389
390 printf "$ttt\n$ttt$ttt\n\n$ttt\n" >expect &&
391 printf "$ttt\n$ttt$ttt\n\n$ttt\n" | git stripspace >actual &&
392 test_cmp expect actual
393'
394
395test_expect_success 'strip comments, too' '
396 test ! -z "$(echo "# comment" | git stripspace)" &&
397 test -z "$(echo "# comment" | git stripspace -s)"
398'
399
400test_expect_success 'strip comments with changed comment char' '
401 test ! -z "$(echo "; comment" | git -c core.commentchar=";" stripspace)" &&
402 test -z "$(echo "; comment" | git -c core.commentchar=";" stripspace -s)"
403'
404
405test_expect_success '-c with single line' '
406 printf "# foo\n" >expect &&
407 printf "foo" | git stripspace -c >actual &&
408 test_cmp expect actual
409'
410
411test_expect_success '-c with single line followed by empty line' '
412 printf "# foo\n#\n" >expect &&
413 printf "foo\n\n" | git stripspace -c >actual &&
414 test_cmp expect actual
415'
416
417test_expect_success '-c with newline only' '
418 printf "#\n" >expect &&
419 printf "\n" | git stripspace -c >actual &&
420 test_cmp expect actual
421'
422
423test_expect_success '--comment-lines with single line' '
424 printf "# foo\n" >expect &&
425 printf "foo" | git stripspace -c >actual &&
426 test_cmp expect actual
427'
428
429test_expect_success '-c with changed comment char' '
430 printf "; foo\n" >expect &&
431 printf "foo" | git -c core.commentchar=";" stripspace -c >actual &&
432 test_cmp expect actual
433'
434
435test_expect_success 'avoid SP-HT sequence in commented line' '
436 printf "#\tone\n#\n# two\n" >expect &&
437 printf "\tone\n\ntwo\n" | git stripspace -c >actual &&
438 test_cmp expect actual
439'
440
441test_done