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