t4018: convert custom pattern test to the new infrastructure
[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 LF='
11 '
12 cat >Beer.java <<\EOF
13 public class Beer
14 {
15         int special;
16         public static void main(String args[])
17         {
18                 String s=" ";
19                 for(int x = 99; x > 0; x--)
20                 {
21                         System.out.print(x + " bottles of beer on the wall "
22                                 + x + " bottles of beer\n"
23                                 + "Take one down, pass it around, " + (x - 1)
24                                 + " bottles of beer on the wall.\n");
25                 }
26                 System.out.print("Go to the store, buy some more,\n"
27                         + "99 bottles of beer on the wall.\n");
28         }
29 }
30 EOF
31 sed 's/beer\\/beer,\\/' <Beer.java >Beer-correct.java
32
33 test_expect_success 'setup' '
34         # a non-trivial custom pattern
35         git config diff.custom1.funcname "!static
36 !String
37 [^      ].*s.*" &&
38
39         # a custom pattern which matches to end of line
40         git config diff.custom2.funcname "......Beer\$" &&
41
42         # alternation in pattern
43         git config diff.custom3.funcname "Beer$" &&
44         git config diff.custom3.xfuncname "^[   ]*((public|static).*)$"
45 '
46
47 diffpatterns="
48         ada
49         bibtex
50         cpp
51         csharp
52         fortran
53         html
54         java
55         matlab
56         objc
57         pascal
58         perl
59         php
60         python
61         ruby
62         tex
63         custom1
64         custom2
65         custom3
66 "
67
68 for p in $diffpatterns
69 do
70         test_expect_success "builtin $p pattern compiles" '
71                 echo "*.java diff=$p" >.gitattributes &&
72                 test_expect_code 1 git diff --no-index \
73                         Beer.java Beer-correct.java 2>msg &&
74                 ! grep fatal msg &&
75                 ! grep error msg
76         '
77         test_expect_success "builtin $p wordRegex pattern compiles" '
78                 echo "*.java diff=$p" >.gitattributes &&
79                 test_expect_code 1 git diff --no-index --word-diff \
80                         Beer.java Beer-correct.java 2>msg &&
81                 ! grep fatal msg &&
82                 ! grep error msg
83         '
84 done
85
86 test_expect_success 'set up .gitattributes declaring drivers to test' '
87         cat >.gitattributes <<-\EOF
88         *.java diff=java
89         EOF
90 '
91
92 test_expect_success 'last regexp must not be negated' '
93         test_config diff.java.funcname "!static" &&
94         test_expect_code 128 git diff --no-index Beer.java Beer-correct.java 2>msg &&
95         grep ": Last expression must not be negated:" msg
96 '
97
98 test_expect_success 'setup hunk header tests' '
99         for i in $diffpatterns
100         do
101                 echo "$i-* diff=$i"
102         done > .gitattributes &&
103
104         # add all test files to the index
105         (
106                 cd "$TEST_DIRECTORY"/t4018 &&
107                 git --git-dir="$TRASH_DIRECTORY/.git" add .
108         ) &&
109
110         # place modified files in the worktree
111         for i in $(git ls-files)
112         do
113                 sed -e "s/ChangeMe/IWasChanged/" <"$TEST_DIRECTORY/t4018/$i" >"$i" || return 1
114         done
115 '
116
117 # check each individual file
118 for i in $(git ls-files)
119 do
120         if grep broken "$i" >/dev/null 2>&1
121         then
122                 result=failure
123         else
124                 result=success
125         fi
126         test_expect_$result "hunk header: $i" "
127                 test_when_finished 'cat actual' &&      # for debugging only
128                 git diff -U1 $i >actual &&
129                 grep '@@ .* @@.*RIGHT' actual
130         "
131 done
132
133 test_done