446b4daed873fed06f8a6ca09195016ab816f9cc
   1#!/bin/sh
   2
   3test_description='Test diff-highlight'
   4
   5CURR_DIR=$(pwd)
   6TEST_OUTPUT_DIRECTORY=$(pwd)
   7TEST_DIRECTORY="$CURR_DIR"/../../../t
   8DIFF_HIGHLIGHT="$CURR_DIR"/../diff-highlight
   9
  10CW="$(printf "\033[7m")"        # white
  11CR="$(printf "\033[27m")"       # reset
  12
  13. "$TEST_DIRECTORY"/test-lib.sh
  14
  15if ! test_have_prereq PERL
  16then
  17        skip_all='skipping diff-highlight tests; perl not available'
  18        test_done
  19fi
  20
  21# dh_test is a test helper function which takes 3 file names as parameters. The
  22# first 2 files are used to generate diff and commit output, which is then
  23# piped through diff-highlight. The 3rd file should contain the expected output
  24# of diff-highlight (minus the diff/commit header, ie. everything after and
  25# including the first @@ line).
  26dh_test () {
  27        a="$1" b="$2" &&
  28
  29        cat >patch.exp &&
  30
  31        {
  32                cat "$a" >file &&
  33                git add file &&
  34                git commit -m "Add a file" &&
  35
  36                cat "$b" >file &&
  37                git diff file >diff.raw &&
  38                git commit -a -m "Update a file" &&
  39                git show >commit.raw
  40        } >/dev/null &&
  41
  42        "$DIFF_HIGHLIGHT" <diff.raw | test_strip_patch_header >diff.act &&
  43        "$DIFF_HIGHLIGHT" <commit.raw | test_strip_patch_header >commit.act &&
  44        test_cmp patch.exp diff.act &&
  45        test_cmp patch.exp commit.act
  46}
  47
  48test_strip_patch_header () {
  49        sed -n '/^@@/,$p' $*
  50}
  51
  52test_expect_success 'diff-highlight highlights the beginning of a line' '
  53        cat >a <<-\EOF &&
  54                aaa
  55                bbb
  56                ccc
  57        EOF
  58
  59        cat >b <<-\EOF &&
  60                aaa
  61                0bb
  62                ccc
  63        EOF
  64
  65        dh_test a b <<-EOF
  66                @@ -1,3 +1,3 @@
  67                 aaa
  68                -${CW}b${CR}bb
  69                +${CW}0${CR}bb
  70                 ccc
  71        EOF
  72'
  73
  74test_expect_success 'diff-highlight highlights the end of a line' '
  75        cat >a <<-\EOF &&
  76                aaa
  77                bbb
  78                ccc
  79        EOF
  80
  81        cat >b <<-\EOF &&
  82                aaa
  83                bb0
  84                ccc
  85        EOF
  86
  87        dh_test a b <<-EOF
  88                @@ -1,3 +1,3 @@
  89                 aaa
  90                -bb${CW}b${CR}
  91                +bb${CW}0${CR}
  92                 ccc
  93        EOF
  94'
  95
  96test_expect_success 'diff-highlight highlights the middle of a line' '
  97        cat >a <<-\EOF &&
  98                aaa
  99                bbb
 100                ccc
 101        EOF
 102
 103        cat >b <<-\EOF &&
 104                aaa
 105                b0b
 106                ccc
 107        EOF
 108
 109        dh_test a b <<-EOF
 110                @@ -1,3 +1,3 @@
 111                 aaa
 112                -b${CW}b${CR}b
 113                +b${CW}0${CR}b
 114                 ccc
 115        EOF
 116'
 117
 118test_expect_success 'diff-highlight does not highlight whole line' '
 119        cat >a <<-\EOF &&
 120                aaa
 121                bbb
 122                ccc
 123        EOF
 124
 125        cat >b <<-\EOF &&
 126                aaa
 127                000
 128                ccc
 129        EOF
 130
 131        dh_test a b <<-EOF
 132                @@ -1,3 +1,3 @@
 133                 aaa
 134                -bbb
 135                +000
 136                 ccc
 137        EOF
 138'
 139
 140test_expect_failure 'diff-highlight highlights mismatched hunk size' '
 141        cat >a <<-\EOF &&
 142                aaa
 143                bbb
 144        EOF
 145
 146        cat >b <<-\EOF &&
 147                aaa
 148                b0b
 149                ccc
 150        EOF
 151
 152        dh_test a b <<-EOF
 153                @@ -1,3 +1,3 @@
 154                 aaa
 155                -b${CW}b${CR}b
 156                +b${CW}0${CR}b
 157                +ccc
 158        EOF
 159'
 160
 161# TODO add multi-byte test
 162
 163test_done