t4018: an infrastructure to test hunk headers

Add an infrastructure that simplifies adding new tests of the hunk
header regular expressions.

To add new tests, a file with the syntax to test can be dropped in the
directory t4018. The README file explains how a test file must contain;
the README itself tests the default behavior.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Johannes Sixt
2014-03-21 22:07:15 +01:00
committed by Junio C Hamano
parent abf8f98602
commit bfa7d01413
2 changed files with 72 additions and 6 deletions

View File

@ -100,7 +100,25 @@ test_expect_funcname () {
grep "^@@.*@@ $1" diff
}
for p in ada bibtex cpp csharp fortran html java matlab objc pascal perl php python ruby tex
diffpatterns="
ada
bibtex
cpp
csharp
fortran
html
java
matlab
objc
pascal
perl
php
python
ruby
tex
"
for p in $diffpatterns
do
test_expect_success "builtin $p pattern compiles" '
echo "*.java diff=$p" >.gitattributes &&
@ -118,11 +136,6 @@ do
'
done
test_expect_success 'default behaviour' '
rm -f .gitattributes &&
test_expect_funcname "public class Beer\$"
'
test_expect_success 'set up .gitattributes declaring drivers to test' '
cat >.gitattributes <<-\EOF
*.java diff=java
@ -182,4 +195,39 @@ test_expect_success 'alternation in pattern' '
test_expect_funcname "public static void main("
'
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