1#!/bin/sh
   2#
   3# Copyright (c) 2007 Carlos Rica
   4#
   5test_description='git stripspace'
   7. ./test-lib.sh
   9t40='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
  14test_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    echo "$ttt$ttt" >expect &&
  22    git stripspace <expect >actual &&
  23    test_cmp expect actual &&
  24    echo "$ttt$ttt$ttt" >expect &&
  26    git stripspace <expect >actual &&
  27    test_cmp expect actual &&
  28    echo "$ttt$ttt$ttt$ttt" >expect &&
  30    git stripspace <expect >actual &&
  31    test_cmp expect actual
  32'
  33test_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    echo "$sss$sss$ttt" >expect &&
  41    git stripspace <expect >actual &&
  42    test_cmp expect actual &&
  43    echo "$sss$sss$sss$ttt" >expect &&
  45    git stripspace <expect >actual &&
  46    test_cmp expect actual
  47'
  48test_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    echo "$ttt$sss$sss$ttt" >expect &&
  56    git stripspace <expect >actual &&
  57    test_cmp expect actual
  58'
  59test_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    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    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    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    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    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    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    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    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    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    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    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'
 110test_expect_success \
 112    'only consecutive blank lines should be completely removed' '
 113    > expect &&
 114    printf "\n" | git stripspace >actual &&
 116    test_cmp expect actual &&
 117    printf "\n\n\n" | git stripspace >actual &&
 119    test_cmp expect actual &&
 120    printf "$sss\n$sss\n$sss\n" | git stripspace >actual &&
 122    test_cmp expect actual &&
 123    printf "$sss$sss\n$sss\n\n" | git stripspace >actual &&
 125    test_cmp expect actual &&
 126    printf "\n$sss\n$sss$sss\n" | git stripspace >actual &&
 128    test_cmp expect actual &&
 129    printf "$sss$sss$sss$sss\n\n\n" | git stripspace >actual &&
 131    test_cmp expect actual &&
 132    printf "\n$sss$sss$sss$sss\n\n" | git stripspace >actual &&
 134    test_cmp expect actual &&
 135    printf "\n\n$sss$sss$sss$sss\n" | git stripspace >actual &&
 137    test_cmp expect actual
 138'
 139test_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    printf "$ttt\n" > expect &&
 147    printf "\n\n\n$ttt\n" | git stripspace >actual &&
 148    test_cmp expect actual &&
 149    printf "$ttt$ttt\n" > expect &&
 151    printf "\n\n\n$ttt$ttt\n" | git stripspace >actual &&
 152    test_cmp expect actual &&
 153    printf "$ttt$ttt$ttt\n" > expect &&
 155    printf "\n\n\n$ttt$ttt$ttt\n" | git stripspace >actual &&
 156    test_cmp expect actual &&
 157    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    printf "$ttt\n" > expect &&
 163    printf "$sss\n$sss\n$sss\n$ttt\n" | git stripspace >actual &&
 165    test_cmp expect actual &&
 166    printf "\n$sss\n$sss$sss\n$ttt\n" | git stripspace >actual &&
 168    test_cmp expect actual &&
 169    printf "$sss$sss\n$sss\n\n$ttt\n" | git stripspace >actual &&
 171    test_cmp expect actual &&
 172    printf "$sss$sss$sss\n\n\n$ttt\n" | git stripspace >actual &&
 174    test_cmp expect actual &&
 175    printf "\n$sss$sss$sss\n\n$ttt\n" | git stripspace >actual &&
 177    test_cmp expect actual &&
 178    printf "\n\n$sss$sss$sss\n$ttt\n" | git stripspace >actual &&
 180    test_cmp expect actual
 181'
 182test_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    printf "$ttt\n" > expect &&
 190    printf "$ttt\n\n\n\n" | git stripspace >actual &&
 191    test_cmp expect actual &&
 192    printf "$ttt$ttt\n" > expect &&
 194    printf "$ttt$ttt\n\n\n\n" | git stripspace >actual &&
 195    test_cmp expect actual &&
 196    printf "$ttt$ttt$ttt\n" > expect &&
 198    printf "$ttt$ttt$ttt\n\n\n\n" | git stripspace >actual &&
 199    test_cmp expect actual &&
 200    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    printf "$ttt\n" > expect &&
 206    printf "$ttt\n$sss\n$sss\n$sss\n" | git stripspace >actual &&
 208    test_cmp expect actual &&
 209    printf "$ttt\n\n$sss\n$sss$sss\n" | git stripspace >actual &&
 211    test_cmp expect actual &&
 212    printf "$ttt\n$sss$sss\n$sss\n\n" | git stripspace >actual &&
 214    test_cmp expect actual &&
 215    printf "$ttt\n$sss$sss$sss\n\n\n" | git stripspace >actual &&
 217    test_cmp expect actual &&
 218    printf "$ttt\n\n$sss$sss$sss\n\n" | git stripspace >actual &&
 220    test_cmp expect actual &&
 221    printf "$ttt\n\n\n$sss$sss$sss\n" | git stripspace >actual &&
 223    test_cmp expect actual
 224'
 225test_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# text plus spaces at the end:
 235test_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'
 245test_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'
 255test_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    printf "$ttt\n" >expect &&
 263    printf "$ttt$sss$sss" | git stripspace >actual &&
 264    test_cmp expect actual &&
 265    printf "$ttt\n" >expect &&
 267    printf "$ttt$sss$sss$sss" | git stripspace >actual &&
 268    test_cmp expect actual &&
 269    printf "$ttt$ttt\n" >expect &&
 271    printf "$ttt$ttt$sss" | git stripspace >actual &&
 272    test_cmp expect actual &&
 273    printf "$ttt$ttt\n" >expect &&
 275    printf "$ttt$ttt$sss$sss" | git stripspace >actual &&
 276    test_cmp expect actual &&
 277    printf "$ttt$ttt$ttt\n" >expect &&
 279    printf "$ttt$ttt$ttt$sss" | git stripspace >actual &&
 280    test_cmp expect actual
 281'
 282test_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'
 292test_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    echo "$ttt" >expect &&
 300    echo "$ttt$sss$sss" | git stripspace >actual &&
 301    test_cmp expect actual &&
 302    echo "$ttt" >expect &&
 304    echo "$ttt$sss$sss$sss" | git stripspace >actual &&
 305    test_cmp expect actual &&
 306    echo "$ttt$ttt" >expect &&
 308    echo "$ttt$ttt$sss" | git stripspace >actual &&
 309    test_cmp expect actual &&
 310    echo "$ttt$ttt" >expect &&
 312    echo "$ttt$ttt$sss$sss" | git stripspace >actual &&
 313    test_cmp expect actual &&
 314    echo "$ttt$ttt$ttt" >expect &&
 316    echo "$ttt$ttt$ttt$sss" | git stripspace >actual &&
 317    test_cmp expect actual
 318'
 319# spaces only:
 321test_expect_success \
 323    'spaces with newline at end should be replaced with empty string' '
 324    printf "" >expect &&
 325    echo | git stripspace >actual &&
 327    test_cmp expect actual &&
 328    echo "$sss" | git stripspace >actual &&
 330    test_cmp expect actual &&
 331    echo "$sss$sss" | git stripspace >actual &&
 333    test_cmp expect actual &&
 334    echo "$sss$sss$sss" | git stripspace >actual &&
 336    test_cmp expect actual &&
 337    echo "$sss$sss$sss$sss" | git stripspace >actual &&
 339    test_cmp expect actual
 340'
 341test_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'
 350test_expect_success \
 352    'spaces without newline at end should be replaced with empty string' '
 353    printf "" >expect &&
 354    printf "" | git stripspace >actual &&
 356    test_cmp expect actual &&
 357    printf "$sss$sss" | git stripspace >actual &&
 359    test_cmp expect actual &&
 360    printf "$sss$sss$sss" | git stripspace >actual &&
 362    test_cmp expect actual &&
 363    printf "$sss$sss$sss$sss" | git stripspace >actual &&
 365    test_cmp expect actual
 366'
 367test_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    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    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    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    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    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'
 394test_expect_success 'strip comments, too' '
 396        test ! -z "$(echo "# comment" | git stripspace)" &&
 397        test -z "$(echo "# comment" | git stripspace -s)"
 398'
 399test_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'
 404test_expect_success '-c with single line' '
 406        printf "# foo\n" >expect &&
 407        printf "foo" | git stripspace -c >actual &&
 408        test_cmp expect actual
 409'
 410test_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'
 416test_expect_success '-c with newline only' '
 418        printf "#\n" >expect &&
 419        printf "\n" | git stripspace -c >actual &&
 420        test_cmp expect actual
 421'
 422test_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'
 428test_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'
 434test_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'
 440test_done