Merge branch 'jc/revision-dash-count-parsing'
[git.git] / t / t4018-diff-funcname.sh
blob34591c23da82230f2412b46620f0d3a12188656f
1 #!/bin/sh
3 # Copyright (c) 2007 Johannes E. Schindelin
6 test_description='Test custom diff function name patterns'
8 . ./test-lib.sh
10 test_expect_success 'setup' '
11 # a non-trivial custom pattern
12 git config diff.custom1.funcname "!static
13 !String
14 [^ ].*s.*" &&
16 # a custom pattern which matches to end of line
17 git config diff.custom2.funcname "......Beer\$" &&
19 # alternation in pattern
20 git config diff.custom3.funcname "Beer$" &&
21 git config diff.custom3.xfuncname "^[ ]*((public|static).*)$" &&
23 # for regexp compilation tests
24 echo A >A.java &&
25 echo B >B.java
28 diffpatterns="
29 ada
30 bibtex
31 cpp
32 csharp
33 fortran
34 html
35 java
36 matlab
37 objc
38 pascal
39 perl
40 php
41 python
42 ruby
43 tex
44 custom1
45 custom2
46 custom3
49 for p in $diffpatterns
51 test_expect_success "builtin $p pattern compiles" '
52 echo "*.java diff=$p" >.gitattributes &&
53 test_expect_code 1 git diff --no-index \
54 A.java B.java 2>msg &&
55 ! test_i18ngrep fatal msg &&
56 ! test_i18ngrep error msg
58 test_expect_success "builtin $p wordRegex pattern compiles" '
59 echo "*.java diff=$p" >.gitattributes &&
60 test_expect_code 1 git diff --no-index --word-diff \
61 A.java B.java 2>msg &&
62 ! test_i18ngrep fatal msg &&
63 ! test_i18ngrep error msg
65 done
67 test_expect_success 'last regexp must not be negated' '
68 echo "*.java diff=java" >.gitattributes &&
69 test_config diff.java.funcname "!static" &&
70 test_expect_code 128 git diff --no-index A.java B.java 2>msg &&
71 test_i18ngrep ": Last expression must not be negated:" msg
74 test_expect_success 'setup hunk header tests' '
75 for i in $diffpatterns
77 echo "$i-* diff=$i"
78 done > .gitattributes &&
80 # add all test files to the index
82 cd "$TEST_DIRECTORY"/t4018 &&
83 git --git-dir="$TRASH_DIRECTORY/.git" add .
84 ) &&
86 # place modified files in the worktree
87 for i in $(git ls-files)
89 sed -e "s/ChangeMe/IWasChanged/" <"$TEST_DIRECTORY/t4018/$i" >"$i" || return 1
90 done
93 # check each individual file
94 for i in $(git ls-files)
96 if grep broken "$i" >/dev/null 2>&1
97 then
98 result=failure
99 else
100 result=success
102 test_expect_$result "hunk header: $i" "
103 test_when_finished 'cat actual' && # for debugging only
104 git diff -U1 $i >actual &&
105 grep '@@ .* @@.*RIGHT' actual
107 done
109 test_done