4a2980c8333e99486de839d72c67005bf58fe304
   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    git diff expect actual &&
  20
  21    echo "$ttt$ttt" >expect &&
  22    git stripspace <expect >actual &&
  23    git diff expect actual &&
  24
  25    echo "$ttt$ttt$ttt" >expect &&
  26    git stripspace <expect >actual &&
  27    git diff expect actual &&
  28
  29    echo "$ttt$ttt$ttt$ttt" >expect &&
  30    git stripspace <expect >actual &&
  31    git diff 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    git diff expect actual &&
  39
  40    echo "$sss$sss$ttt" >expect &&
  41    git stripspace <expect >actual &&
  42    git diff expect actual &&
  43
  44    echo "$sss$sss$sss$ttt" >expect &&
  45    git stripspace <expect >actual &&
  46    git diff 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    git diff expect actual &&
  54
  55    echo "$ttt$sss$sss$ttt" >expect &&
  56    git stripspace <expect >actual &&
  57    git diff 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    git diff 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    git diff 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    git diff 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    git diff 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    git diff 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    git diff expect actual
  85'
  86
  87test_expect_success \
  88    'only consecutive blank lines should be completely removed' '
  89    > expect &&
  90
  91    printf "\n" | git stripspace >actual &&
  92    git diff expect actual &&
  93
  94    printf "\n\n\n" | git stripspace >actual &&
  95    git diff expect actual &&
  96
  97    printf "$sss\n$sss\n$sss\n" | git stripspace >actual &&
  98    git diff expect actual &&
  99
 100    printf "$sss$sss\n$sss\n\n" | git stripspace >actual &&
 101    git diff expect actual &&
 102
 103    printf "\n$sss\n$sss$sss\n" | git stripspace >actual &&
 104    git diff expect actual &&
 105
 106    printf "$sss$sss$sss$sss\n\n\n" | git stripspace >actual &&
 107    git diff expect actual &&
 108
 109    printf "\n$sss$sss$sss$sss\n\n" | git stripspace >actual &&
 110    git diff expect actual &&
 111
 112    printf "\n\n$sss$sss$sss$sss\n" | git stripspace >actual &&
 113    git diff expect actual
 114'
 115
 116test_expect_success \
 117    'consecutive blank lines at the beginning should be removed' '
 118    printf "$ttt\n" > expect &&
 119    printf "\n$ttt\n" | git stripspace >actual &&
 120    git diff expect actual &&
 121
 122    printf "$ttt\n" > expect &&
 123    printf "\n\n\n$ttt\n" | git stripspace >actual &&
 124    git diff expect actual &&
 125
 126    printf "$ttt$ttt\n" > expect &&
 127    printf "\n\n\n$ttt$ttt\n" | git stripspace >actual &&
 128    git diff expect actual &&
 129
 130    printf "$ttt$ttt$ttt\n" > expect &&
 131    printf "\n\n\n$ttt$ttt$ttt\n" | git stripspace >actual &&
 132    git diff expect actual &&
 133
 134    printf "$ttt$ttt$ttt$ttt\n" > expect &&
 135    printf "\n\n\n$ttt$ttt$ttt$ttt\n" | git stripspace >actual &&
 136    git diff expect actual &&
 137
 138    printf "$ttt\n" > expect &&
 139
 140    printf "$sss\n$sss\n$sss\n$ttt\n" | git stripspace >actual &&
 141    git diff expect actual &&
 142
 143    printf "\n$sss\n$sss$sss\n$ttt\n" | git stripspace >actual &&
 144    git diff expect actual &&
 145
 146    printf "$sss$sss\n$sss\n\n$ttt\n" | git stripspace >actual &&
 147    git diff expect actual &&
 148
 149    printf "$sss$sss$sss\n\n\n$ttt\n" | git stripspace >actual &&
 150    git diff expect actual &&
 151
 152    printf "\n$sss$sss$sss\n\n$ttt\n" | git stripspace >actual &&
 153    git diff expect actual &&
 154
 155    printf "\n\n$sss$sss$sss\n$ttt\n" | git stripspace >actual &&
 156    git diff expect actual
 157'
 158
 159test_expect_success \
 160    'consecutive blank lines at the end should be removed' '
 161    printf "$ttt\n" > expect &&
 162    printf "$ttt\n\n" | git stripspace >actual &&
 163    git diff expect actual &&
 164
 165    printf "$ttt\n" > expect &&
 166    printf "$ttt\n\n\n\n" | git stripspace >actual &&
 167    git diff expect actual &&
 168
 169    printf "$ttt$ttt\n" > expect &&
 170    printf "$ttt$ttt\n\n\n\n" | git stripspace >actual &&
 171    git diff expect actual &&
 172
 173    printf "$ttt$ttt$ttt\n" > expect &&
 174    printf "$ttt$ttt$ttt\n\n\n\n" | git stripspace >actual &&
 175    git diff expect actual &&
 176
 177    printf "$ttt$ttt$ttt$ttt\n" > expect &&
 178    printf "$ttt$ttt$ttt$ttt\n\n\n\n" | git stripspace >actual &&
 179    git diff expect actual &&
 180
 181    printf "$ttt\n" > expect &&
 182
 183    printf "$ttt\n$sss\n$sss\n$sss\n" | git stripspace >actual &&
 184    git diff expect actual &&
 185
 186    printf "$ttt\n\n$sss\n$sss$sss\n" | git stripspace >actual &&
 187    git diff expect actual &&
 188
 189    printf "$ttt\n$sss$sss\n$sss\n\n" | git stripspace >actual &&
 190    git diff expect actual &&
 191
 192    printf "$ttt\n$sss$sss$sss\n\n\n" | git stripspace >actual &&
 193    git diff expect actual &&
 194
 195    printf "$ttt\n\n$sss$sss$sss\n\n" | git stripspace >actual &&
 196    git diff expect actual &&
 197
 198    printf "$ttt\n\n\n$sss$sss$sss\n" | git stripspace >actual &&
 199    git diff expect actual
 200'
 201
 202test_expect_success \
 203    'text without newline at end should end with newline' '
 204    test `printf "$ttt" | git stripspace | wc -l` -gt 0 &&
 205    test `printf "$ttt$ttt" | git stripspace | wc -l` -gt 0 &&
 206    test `printf "$ttt$ttt$ttt" | git stripspace | wc -l` -gt 0 &&
 207    test `printf "$ttt$ttt$ttt$ttt" | git stripspace | wc -l` -gt 0
 208'
 209
 210# text plus spaces at the end:
 211
 212test_expect_success \
 213    'text plus spaces without newline at end should end with newline' '
 214    test `printf "$ttt$sss" | git stripspace | wc -l` -gt 0 &&
 215    test `printf "$ttt$ttt$sss" | git stripspace | wc -l` -gt 0 &&
 216    test `printf "$ttt$ttt$ttt$sss" | git stripspace | wc -l` -gt 0 &&
 217    test `printf "$ttt$sss$sss" | git stripspace | wc -l` -gt 0 &&
 218    test `printf "$ttt$ttt$sss$sss" | git stripspace | wc -l` -gt 0 &&
 219    test `printf "$ttt$sss$sss$sss" | git stripspace | wc -l` -gt 0
 220'
 221
 222test_expect_failure \
 223    'text plus spaces without newline at end should not show spaces' '
 224    printf "$ttt$sss" | git stripspace | grep -q "  " ||
 225    printf "$ttt$ttt$sss" | git stripspace | grep -q "  " ||
 226    printf "$ttt$ttt$ttt$sss" | git stripspace | grep -q "  " ||
 227    printf "$ttt$sss$sss" | git stripspace | grep -q "  " ||
 228    printf "$ttt$ttt$sss$sss" | git stripspace | grep -q "  " ||
 229    printf "$ttt$sss$sss$sss" | git stripspace | grep -q "  "
 230'
 231
 232test_expect_success \
 233    'text plus spaces without newline should show the correct lines' '
 234    printf "$ttt\n" >expect &&
 235    printf "$ttt$sss" | git stripspace >actual &&
 236    git diff expect actual &&
 237
 238    printf "$ttt\n" >expect &&
 239    printf "$ttt$sss$sss" | git stripspace >actual &&
 240    git diff expect actual &&
 241
 242    printf "$ttt\n" >expect &&
 243    printf "$ttt$sss$sss$sss" | git stripspace >actual &&
 244    git diff expect actual &&
 245
 246    printf "$ttt$ttt\n" >expect &&
 247    printf "$ttt$ttt$sss" | git stripspace >actual &&
 248    git diff expect actual &&
 249
 250    printf "$ttt$ttt\n" >expect &&
 251    printf "$ttt$ttt$sss$sss" | git stripspace >actual &&
 252    git diff expect actual &&
 253
 254    printf "$ttt$ttt$ttt\n" >expect &&
 255    printf "$ttt$ttt$ttt$sss" | git stripspace >actual &&
 256    git diff expect actual
 257'
 258
 259test_expect_failure \
 260    'text plus spaces at end should not show spaces' '
 261    echo "$ttt$sss" | git stripspace | grep -q "  " ||
 262    echo "$ttt$ttt$sss" | git stripspace | grep -q "  " ||
 263    echo "$ttt$ttt$ttt$sss" | git stripspace | grep -q "  " ||
 264    echo "$ttt$sss$sss" | git stripspace | grep -q "  " ||
 265    echo "$ttt$ttt$sss$sss" | git stripspace | grep -q "  " ||
 266    echo "$ttt$sss$sss$sss" | git stripspace | grep -q "  "
 267'
 268
 269test_expect_success \
 270    'text plus spaces at end should be cleaned and newline must remain' '
 271    echo "$ttt" >expect &&
 272    echo "$ttt$sss" | git stripspace >actual &&
 273    git diff expect actual &&
 274
 275    echo "$ttt" >expect &&
 276    echo "$ttt$sss$sss" | git stripspace >actual &&
 277    git diff expect actual &&
 278
 279    echo "$ttt" >expect &&
 280    echo "$ttt$sss$sss$sss" | git stripspace >actual &&
 281    git diff expect actual &&
 282
 283    echo "$ttt$ttt" >expect &&
 284    echo "$ttt$ttt$sss" | git stripspace >actual &&
 285    git diff expect actual &&
 286
 287    echo "$ttt$ttt" >expect &&
 288    echo "$ttt$ttt$sss$sss" | git stripspace >actual &&
 289    git diff expect actual &&
 290
 291    echo "$ttt$ttt$ttt" >expect &&
 292    echo "$ttt$ttt$ttt$sss" | git stripspace >actual &&
 293    git diff expect actual
 294'
 295
 296# spaces only:
 297
 298test_expect_success \
 299    'spaces with newline at end should be replaced with empty string' '
 300    printf "" >expect &&
 301
 302    echo | git stripspace >actual &&
 303    git diff expect actual &&
 304
 305    echo "$sss" | git stripspace >actual &&
 306    git diff expect actual &&
 307
 308    echo "$sss$sss" | git stripspace >actual &&
 309    git diff expect actual &&
 310
 311    echo "$sss$sss$sss" | git stripspace >actual &&
 312    git diff expect actual &&
 313
 314    echo "$sss$sss$sss$sss" | git stripspace >actual &&
 315    git diff expect actual
 316'
 317
 318test_expect_failure \
 319    'spaces without newline at end should not show spaces' '
 320    printf "" | git stripspace | grep -q " " ||
 321    printf "$sss" | git stripspace | grep -q " " ||
 322    printf "$sss$sss" | git stripspace | grep -q " " ||
 323    printf "$sss$sss$sss" | git stripspace | grep -q " " ||
 324    printf "$sss$sss$sss$sss" | git stripspace | grep -q " "
 325'
 326
 327test_expect_success \
 328    'spaces without newline at end should be replaced with empty string' '
 329    printf "" >expect &&
 330
 331    printf "" | git stripspace >actual &&
 332    git diff expect actual &&
 333
 334    printf "$sss$sss" | git stripspace >actual &&
 335    git diff expect actual &&
 336
 337    printf "$sss$sss$sss" | git stripspace >actual &&
 338    git diff expect actual &&
 339
 340    printf "$sss$sss$sss$sss" | git stripspace >actual &&
 341    git diff expect actual
 342'
 343
 344test_done