| #!/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 | |
| ' | |
| test_expect_success 'setup: test-tool userdiff' ' | |
| # Make sure additions to builtin_drivers are sorted | |
| test_when_finished "rm builtin-drivers.sorted" && | |
| test-tool userdiff list-builtin-drivers >builtin-drivers && | |
| test_file_not_empty builtin-drivers && | |
| sort <builtin-drivers >builtin-drivers.sorted && | |
| test_cmp builtin-drivers.sorted builtin-drivers && | |
| # Ditto, but "custom" requires the .git directory and config | |
| # to be setup and read. | |
| test_when_finished "rm custom-drivers.sorted" && | |
| test-tool userdiff list-custom-drivers >custom-drivers && | |
| test_file_not_empty custom-drivers && | |
| sort <custom-drivers >custom-drivers.sorted && | |
| test_cmp custom-drivers.sorted custom-drivers | |
| ' | |
| diffpatterns=" | |
| $(cat builtin-drivers) | |
| $(cat custom-drivers) | |
| " | |
| 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_grep ! fatal msg && | |
| test_grep ! 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_grep ! fatal msg && | |
| test_grep ! error msg | |
| ' | |
| test_expect_success "builtin $p pattern compiles on bare repo with --attr-source" ' | |
| test_when_finished "rm -rf bare.git" && | |
| git checkout -B master && | |
| git add . && | |
| echo "*.java diff=notexist" >.gitattributes && | |
| git add .gitattributes && | |
| git commit -am "changing gitattributes" && | |
| git checkout -B branchA && | |
| echo "*.java diff=$p" >.gitattributes && | |
| git add .gitattributes && | |
| git commit -am "changing gitattributes" && | |
| git clone --bare --no-local . bare.git && | |
| git -C bare.git symbolic-ref HEAD refs/heads/master && | |
| test_expect_code 1 git -C bare.git --attr-source=branchA \ | |
| diff --exit-code HEAD:A.java HEAD:B.java 2>msg && | |
| test_grep ! fatal msg && | |
| test_grep ! 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_grep ": Last expression must not be negated:" msg | |
| ' | |
| test_expect_success 'setup hunk header tests' ' | |
| for i in $diffpatterns | |
| do | |
| echo "$i-* diff=$i" || return 1 | |
| 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 | |
| test_expect_success "hunk header: $i" " | |
| git diff -U1 $i >actual && | |
| test_grep '@@ .* @@.*RIGHT' actual | |
| " | |
| done | |
| test_done |