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