t / t4034-diff-words.shon commit Merge branch 'jc/color-attrs' (d7173d9)
   1#!/bin/sh
   2
   3test_description='word diff colors'
   4
   5. ./test-lib.sh
   6
   7test_expect_success setup '
   8
   9        git config diff.color.old red
  10        git config diff.color.new green
  11        git config diff.color.func magenta
  12
  13'
  14
  15word_diff () {
  16        test_must_fail git diff --no-index "$@" pre post > output &&
  17        test_decode_color <output >output.decrypted &&
  18        test_cmp expect output.decrypted
  19}
  20
  21cat > pre <<\EOF
  22h(4)
  23
  24a = b + c
  25EOF
  26
  27cat > post <<\EOF
  28h(4),hh[44]
  29
  30a = b + c
  31
  32aa = a
  33
  34aeff = aeff * ( aaa )
  35EOF
  36
  37cat > expect <<\EOF
  38<WHITE>diff --git a/pre b/post<RESET>
  39<WHITE>index 330b04f..5ed8eff 100644<RESET>
  40<WHITE>--- a/pre<RESET>
  41<WHITE>+++ b/post<RESET>
  42<CYAN>@@ -1,3 +1,7 @@<RESET>
  43<RED>h(4)<RESET><GREEN>h(4),hh[44]<RESET>
  44
  45a = b + c<RESET>
  46
  47<GREEN>aa = a<RESET>
  48
  49<GREEN>aeff = aeff * ( aaa )<RESET>
  50EOF
  51
  52test_expect_success 'word diff with runs of whitespace' '
  53
  54        word_diff --color-words
  55
  56'
  57
  58cat > expect <<\EOF
  59<WHITE>diff --git a/pre b/post<RESET>
  60<WHITE>index 330b04f..5ed8eff 100644<RESET>
  61<WHITE>--- a/pre<RESET>
  62<WHITE>+++ b/post<RESET>
  63<CYAN>@@ -1 +1 @@<RESET>
  64<RED>h(4)<RESET><GREEN>h(4),hh[44]<RESET>
  65<CYAN>@@ -3,0 +4,4 @@<RESET> <RESET><MAGENTA>a = b + c<RESET>
  66
  67<GREEN>aa = a<RESET>
  68
  69<GREEN>aeff = aeff * ( aaa )<RESET>
  70EOF
  71
  72test_expect_success 'word diff without context' '
  73
  74        word_diff --color-words --unified=0
  75
  76'
  77
  78cat > expect <<\EOF
  79<WHITE>diff --git a/pre b/post<RESET>
  80<WHITE>index 330b04f..5ed8eff 100644<RESET>
  81<WHITE>--- a/pre<RESET>
  82<WHITE>+++ b/post<RESET>
  83<CYAN>@@ -1,3 +1,7 @@<RESET>
  84h(4),<GREEN>hh<RESET>[44]
  85
  86a = b + c<RESET>
  87
  88<GREEN>aa = a<RESET>
  89
  90<GREEN>aeff = aeff * ( aaa<RESET> )
  91EOF
  92cp expect expect.letter-runs-are-words
  93
  94test_expect_success 'word diff with a regular expression' '
  95
  96        word_diff --color-words="[a-z]+"
  97
  98'
  99
 100test_expect_success 'set a diff driver' '
 101        git config diff.testdriver.wordRegex "[^[:space:]]" &&
 102        cat <<EOF > .gitattributes
 103pre diff=testdriver
 104post diff=testdriver
 105EOF
 106'
 107
 108test_expect_success 'option overrides .gitattributes' '
 109
 110        word_diff --color-words="[a-z]+"
 111
 112'
 113
 114cat > expect <<\EOF
 115<WHITE>diff --git a/pre b/post<RESET>
 116<WHITE>index 330b04f..5ed8eff 100644<RESET>
 117<WHITE>--- a/pre<RESET>
 118<WHITE>+++ b/post<RESET>
 119<CYAN>@@ -1,3 +1,7 @@<RESET>
 120h(4)<GREEN>,hh[44]<RESET>
 121
 122a = b + c<RESET>
 123
 124<GREEN>aa = a<RESET>
 125
 126<GREEN>aeff = aeff * ( aaa )<RESET>
 127EOF
 128cp expect expect.non-whitespace-is-word
 129
 130test_expect_success 'use regex supplied by driver' '
 131
 132        word_diff --color-words
 133
 134'
 135
 136test_expect_success 'set diff.wordRegex option' '
 137        git config diff.wordRegex "[[:alnum:]]+"
 138'
 139
 140cp expect.letter-runs-are-words expect
 141
 142test_expect_success 'command-line overrides config' '
 143        word_diff --color-words="[a-z]+"
 144'
 145
 146cp expect.non-whitespace-is-word expect
 147
 148test_expect_success '.gitattributes override config' '
 149        word_diff --color-words
 150'
 151
 152test_expect_success 'remove diff driver regex' '
 153        git config --unset diff.testdriver.wordRegex
 154'
 155
 156cat > expect <<\EOF
 157<WHITE>diff --git a/pre b/post<RESET>
 158<WHITE>index 330b04f..5ed8eff 100644<RESET>
 159<WHITE>--- a/pre<RESET>
 160<WHITE>+++ b/post<RESET>
 161<CYAN>@@ -1,3 +1,7 @@<RESET>
 162h(4),<GREEN>hh[44<RESET>]
 163
 164a = b + c<RESET>
 165
 166<GREEN>aa = a<RESET>
 167
 168<GREEN>aeff = aeff * ( aaa<RESET> )
 169EOF
 170
 171test_expect_success 'use configured regex' '
 172        word_diff --color-words
 173'
 174
 175echo 'aaa (aaa)' > pre
 176echo 'aaa (aaa) aaa' > post
 177
 178cat > expect <<\EOF
 179<WHITE>diff --git a/pre b/post<RESET>
 180<WHITE>index c29453b..be22f37 100644<RESET>
 181<WHITE>--- a/pre<RESET>
 182<WHITE>+++ b/post<RESET>
 183<CYAN>@@ -1 +1 @@<RESET>
 184aaa (aaa) <GREEN>aaa<RESET>
 185EOF
 186
 187test_expect_success 'test parsing words for newline' '
 188
 189        word_diff --color-words="a+"
 190
 191
 192'
 193
 194echo '(:' > pre
 195echo '(' > post
 196
 197cat > expect <<\EOF
 198<WHITE>diff --git a/pre b/post<RESET>
 199<WHITE>index 289cb9d..2d06f37 100644<RESET>
 200<WHITE>--- a/pre<RESET>
 201<WHITE>+++ b/post<RESET>
 202<CYAN>@@ -1 +1 @@<RESET>
 203(<RED>:<RESET>
 204EOF
 205
 206test_expect_success 'test when words are only removed at the end' '
 207
 208        word_diff --color-words=.
 209
 210'
 211
 212test_done