Merge branch 'ks/mailmap' into maint
[git] / t / t4018-diff-funcname.sh
1 #!/bin/sh
2 #
3 # Copyright (c) 2007 Johannes E. Schindelin
4 #
5
6 test_description='Test custom diff function name patterns'
7
8 . ./test-lib.sh
9
10 test_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
28 diffpatterns="
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
51 for p in $diffpatterns
52 do
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         '
67 done
68
69 test_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
76 test_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
96 for i in $(git ls-files)
97 do
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         "
109 done
110
111 test_done