t / t4018-diff-funcname.shon commit doc: promote "git restore" (80f537f)
   1#!/bin/sh
   2#
   3# Copyright (c) 2007 Johannes E. Schindelin
   4#
   5
   6test_description='Test custom diff function name patterns'
   7
   8. ./test-lib.sh
   9
  10test_expect_success 'setup' '
  11        # a non-trivial custom pattern
  12        git config diff.custom1.funcname "!static
  13!String
  14[^      ].*s.*" &&
  15
  16        # a custom pattern which matches to end of line
  17        git config diff.custom2.funcname "......Beer\$" &&
  18
  19        # alternation in pattern
  20        git config diff.custom3.funcname "Beer$" &&
  21        git config diff.custom3.xfuncname "^[   ]*((public|static).*)$" &&
  22
  23        # for regexp compilation tests
  24        echo A >A.java &&
  25        echo B >B.java
  26'
  27
  28diffpatterns="
  29        ada
  30        bibtex
  31        cpp
  32        csharp
  33        css
  34        fortran
  35        fountain
  36        golang
  37        html
  38        java
  39        matlab
  40        objc
  41        pascal
  42        perl
  43        php
  44        python
  45        ruby
  46        tex
  47        custom1
  48        custom2
  49        custom3
  50"
  51
  52for p in $diffpatterns
  53do
  54        test_expect_success "builtin $p pattern compiles" '
  55                echo "*.java diff=$p" >.gitattributes &&
  56                test_expect_code 1 git diff --no-index \
  57                        A.java B.java 2>msg &&
  58                test_i18ngrep ! fatal msg &&
  59                test_i18ngrep ! error msg
  60        '
  61        test_expect_success "builtin $p wordRegex pattern compiles" '
  62                echo "*.java diff=$p" >.gitattributes &&
  63                test_expect_code 1 git diff --no-index --word-diff \
  64                        A.java B.java 2>msg &&
  65                test_i18ngrep ! fatal msg &&
  66                test_i18ngrep ! error msg
  67        '
  68done
  69
  70test_expect_success 'last regexp must not be negated' '
  71        echo "*.java diff=java" >.gitattributes &&
  72        test_config diff.java.funcname "!static" &&
  73        test_expect_code 128 git diff --no-index A.java B.java 2>msg &&
  74        test_i18ngrep ": Last expression must not be negated:" msg
  75'
  76
  77test_expect_success 'setup hunk header tests' '
  78        for i in $diffpatterns
  79        do
  80                echo "$i-* diff=$i"
  81        done > .gitattributes &&
  82
  83        # add all test files to the index
  84        (
  85                cd "$TEST_DIRECTORY"/t4018 &&
  86                git --git-dir="$TRASH_DIRECTORY/.git" add .
  87        ) &&
  88
  89        # place modified files in the worktree
  90        for i in $(git ls-files)
  91        do
  92                sed -e "s/ChangeMe/IWasChanged/" <"$TEST_DIRECTORY/t4018/$i" >"$i" || return 1
  93        done
  94'
  95
  96# check each individual file
  97for i in $(git ls-files)
  98do
  99        if grep broken "$i" >/dev/null 2>&1
 100        then
 101                result=failure
 102        else
 103                result=success
 104        fi
 105        test_expect_$result "hunk header: $i" "
 106                test_when_finished 'cat actual' &&      # for debugging only
 107                git diff -U1 $i >actual &&
 108                grep '@@ .* @@.*RIGHT' actual
 109        "
 110done
 111
 112test_done