t / t4018-diff-funcname.shon commit tree-walk: be more specific about corrupt tree errors (2edffef)
   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        html
  37        java
  38        matlab
  39        objc
  40        pascal
  41        perl
  42        php
  43        python
  44        ruby
  45        tex
  46        custom1
  47        custom2
  48        custom3
  49"
  50
  51for p in $diffpatterns
  52do
  53        test_expect_success "builtin $p pattern compiles" '
  54                echo "*.java diff=$p" >.gitattributes &&
  55                test_expect_code 1 git diff --no-index \
  56                        A.java B.java 2>msg &&
  57                test_i18ngrep ! fatal msg &&
  58                test_i18ngrep ! error msg
  59        '
  60        test_expect_success "builtin $p wordRegex pattern compiles" '
  61                echo "*.java diff=$p" >.gitattributes &&
  62                test_expect_code 1 git diff --no-index --word-diff \
  63                        A.java B.java 2>msg &&
  64                test_i18ngrep ! fatal msg &&
  65                test_i18ngrep ! error msg
  66        '
  67done
  68
  69test_expect_success 'last regexp must not be negated' '
  70        echo "*.java diff=java" >.gitattributes &&
  71        test_config diff.java.funcname "!static" &&
  72        test_expect_code 128 git diff --no-index A.java B.java 2>msg &&
  73        test_i18ngrep ": Last expression must not be negated:" msg
  74'
  75
  76test_expect_success 'setup hunk header tests' '
  77        for i in $diffpatterns
  78        do
  79                echo "$i-* diff=$i"
  80        done > .gitattributes &&
  81
  82        # add all test files to the index
  83        (
  84                cd "$TEST_DIRECTORY"/t4018 &&
  85                git --git-dir="$TRASH_DIRECTORY/.git" add .
  86        ) &&
  87
  88        # place modified files in the worktree
  89        for i in $(git ls-files)
  90        do
  91                sed -e "s/ChangeMe/IWasChanged/" <"$TEST_DIRECTORY/t4018/$i" >"$i" || return 1
  92        done
  93'
  94
  95# check each individual file
  96for i in $(git ls-files)
  97do
  98        if grep broken "$i" >/dev/null 2>&1
  99        then
 100                result=failure
 101        else
 102                result=success
 103        fi
 104        test_expect_$result "hunk header: $i" "
 105                test_when_finished 'cat actual' &&      # for debugging only
 106                git diff -U1 $i >actual &&
 107                grep '@@ .* @@.*RIGHT' actual
 108        "
 109done
 110
 111test_done