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

18
t/t4018/README Normal file
View File

@ -0,0 +1,18 @@
How to write RIGHT test cases
=============================
Insert the word "ChangeMe" (exactly this form) at a distance of
at least two lines from the line that must appear in the hunk header.
The text that must appear in the hunk header must contain the word
"right", but in all upper-case, like in the title above.
To mark a test case that highlights a malfunction, insert the word
BROKEN in all lower-case somewhere in the file.
This text is a bit twisted and out of order, but it is itself a
test case for the default hunk header pattern. Know what you are doing
if you change it.
BTW, this tests that the head line goes to the hunk header, not the line
of equal signs.