| #!/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 |
| fortran |
| 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 |