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:
parent
abf8f98602
commit
bfa7d01413
@ -100,7 +100,25 @@ test_expect_funcname () {
|
|||||||
grep "^@@.*@@ $1" diff
|
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
|
do
|
||||||
test_expect_success "builtin $p pattern compiles" '
|
test_expect_success "builtin $p pattern compiles" '
|
||||||
echo "*.java diff=$p" >.gitattributes &&
|
echo "*.java diff=$p" >.gitattributes &&
|
||||||
@ -118,11 +136,6 @@ do
|
|||||||
'
|
'
|
||||||
done
|
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' '
|
test_expect_success 'set up .gitattributes declaring drivers to test' '
|
||||||
cat >.gitattributes <<-\EOF
|
cat >.gitattributes <<-\EOF
|
||||||
*.java diff=java
|
*.java diff=java
|
||||||
@ -182,4 +195,39 @@ test_expect_success 'alternation in pattern' '
|
|||||||
test_expect_funcname "public static void main("
|
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
|
test_done
|
||||||
|
18
t/t4018/README
Normal file
18
t/t4018/README
Normal 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.
|
Loading…
Reference in New Issue
Block a user