git/t/t4018-diff-funcname.sh
Alban Gruin 1dbf0c0ad6 userdiff: add built-in pattern for golang
This adds xfuncname and word_regex patterns for golang, a quite
popular programming language. It also includes test cases for the
xfuncname regex (t4018) and updated documentation.

The xfuncname regex finds functions, structs and interfaces.  Although
the Go language prohibits the opening brace from being on its own
line, the regex does not makes it mandatory, to be able to match
`func` statements like this:

    func foo(bar int,
    	baz int) {
    }

This is covered by the test case t4018/golang-long-func.

The word_regex pattern finds identifiers, integers, floats, complex
numbers and operators, according to the go specification.

Signed-off-by: Alban Gruin <alban.gruin@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-03-01 13:36:49 -08:00

113 lines
2.2 KiB
Bash
Executable File

#!/bin/sh
#
# Copyright (c) 2007 Johannes E. Schindelin
#
test_description='Test custom diff function name patterns'
. ./test-lib.sh
test_expect_success 'setup' '
# a non-trivial custom pattern
git config diff.custom1.funcname "!static
!String
[^ ].*s.*" &&
# a custom pattern which matches to end of line
git config diff.custom2.funcname "......Beer\$" &&
# alternation in pattern
git config diff.custom3.funcname "Beer$" &&
git config diff.custom3.xfuncname "^[ ]*((public|static).*)$" &&
# for regexp compilation tests
echo A >A.java &&
echo B >B.java
'
diffpatterns="
ada
bibtex
cpp
csharp
css
fortran
fountain
golang
html
java
matlab
objc
pascal
perl
php
python
ruby
tex
custom1
custom2
custom3
"
for p in $diffpatterns
do
test_expect_success "builtin $p pattern compiles" '
echo "*.java diff=$p" >.gitattributes &&
test_expect_code 1 git diff --no-index \
A.java B.java 2>msg &&
test_i18ngrep ! fatal msg &&
test_i18ngrep ! error msg
'
test_expect_success "builtin $p wordRegex pattern compiles" '
echo "*.java diff=$p" >.gitattributes &&
test_expect_code 1 git diff --no-index --word-diff \
A.java B.java 2>msg &&
test_i18ngrep ! fatal msg &&
test_i18ngrep ! error msg
'
done
test_expect_success 'last regexp must not be negated' '
echo "*.java diff=java" >.gitattributes &&
test_config diff.java.funcname "!static" &&
test_expect_code 128 git diff --no-index A.java B.java 2>msg &&
test_i18ngrep ": Last expression must not be negated:" msg
'
test_expect_success 'setup hunk header tests' '
for i in $diffpatterns
do
echo "$i-* diff=$i"
done > .gitattributes &&
# add all test files to the index
(
cd "$TEST_DIRECTORY"/t4018 &&
git --git-dir="$TRASH_DIRECTORY/.git" add .
) &&
# place modified files in the worktree
for i in $(git ls-files)
do
sed -e "s/ChangeMe/IWasChanged/" <"$TEST_DIRECTORY/t4018/$i" >"$i" || return 1
done
'
# check each individual file
for i in $(git ls-files)
do
if grep broken "$i" >/dev/null 2>&1
then
result=failure
else
result=success
fi
test_expect_$result "hunk header: $i" "
test_when_finished 'cat actual' && # for debugging only
git diff -U1 $i >actual &&
grep '@@ .* @@.*RIGHT' actual
"
done
test_done