c94a5f49d2211cb2b26521e6b83a4d944f77b71f
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
10LF='
11'
12cat >Beer.java <<\EOF
13public 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}
30EOF
31sed 's/beer\\/beer,\\/' <Beer.java >Beer-correct.java
32
33test_expect_funcname () {
34 lang=${2-java}
35 test_expect_code 1 git diff --no-index -U1 \
36 "Beer.$lang" "Beer-correct.$lang" >diff &&
37 grep "^@@.*@@ $1" diff
38}
39
40diffpatterns="
41 ada
42 bibtex
43 cpp
44 csharp
45 fortran
46 html
47 java
48 matlab
49 objc
50 pascal
51 perl
52 php
53 python
54 ruby
55 tex
56"
57
58for p in $diffpatterns
59do
60 test_expect_success "builtin $p pattern compiles" '
61 echo "*.java diff=$p" >.gitattributes &&
62 test_expect_code 1 git diff --no-index \
63 Beer.java Beer-correct.java 2>msg &&
64 ! grep fatal msg &&
65 ! grep error msg
66 '
67 test_expect_success "builtin $p wordRegex pattern compiles" '
68 echo "*.java diff=$p" >.gitattributes &&
69 test_expect_code 1 git diff --no-index --word-diff \
70 Beer.java Beer-correct.java 2>msg &&
71 ! grep fatal msg &&
72 ! grep error msg
73 '
74done
75
76test_expect_success 'set up .gitattributes declaring drivers to test' '
77 cat >.gitattributes <<-\EOF
78 *.java diff=java
79 EOF
80'
81
82test_expect_success 'preset java pattern' '
83 test_expect_funcname "public static void main("
84'
85
86test_expect_success 'custom pattern' '
87 test_config diff.java.funcname "!static
88!String
89[^ ].*s.*" &&
90 test_expect_funcname "int special;\$"
91'
92
93test_expect_success 'last regexp must not be negated' '
94 test_config diff.java.funcname "!static" &&
95 test_expect_code 128 git diff --no-index Beer.java Beer-correct.java 2>msg &&
96 grep ": Last expression must not be negated:" msg
97'
98
99test_expect_success 'pattern which matches to end of line' '
100 test_config diff.java.funcname "Beer\$" &&
101 test_expect_funcname "Beer\$"
102'
103
104test_expect_success 'alternation in pattern' '
105 test_config diff.java.funcname "Beer$" &&
106 test_config diff.java.xfuncname "^[ ]*((public|static).*)$" &&
107 test_expect_funcname "public static void main("
108'
109
110test_expect_success 'setup hunk header tests' '
111 for i in $diffpatterns
112 do
113 echo "$i-* diff=$i"
114 done > .gitattributes &&
115
116 # add all test files to the index
117 (
118 cd "$TEST_DIRECTORY"/t4018 &&
119 git --git-dir="$TRASH_DIRECTORY/.git" add .
120 ) &&
121
122 # place modified files in the worktree
123 for i in $(git ls-files)
124 do
125 sed -e "s/ChangeMe/IWasChanged/" <"$TEST_DIRECTORY/t4018/$i" >"$i" || return 1
126 done
127'
128
129# check each individual file
130for i in $(git ls-files)
131do
132 if grep broken "$i" >/dev/null 2>&1
133 then
134 result=failure
135 else
136 result=success
137 fi
138 test_expect_$result "hunk header: $i" "
139 test_when_finished 'cat actual' && # for debugging only
140 git diff -U1 $i >actual &&
141 grep '@@ .* @@.*RIGHT' actual
142 "
143done
144
145test_done