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