Johannes Sixt <j6t@xxxxxxxx> writes: > 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; s/how/what/, or "how a test file must be written" you mean? > the README itself tests the default behavior. Thanks. Looks like a reasonable way to mark what must be found. > Signed-off-by: Johannes Sixt <j6t@xxxxxxxx> > --- > t/t4018-diff-funcname.sh | 60 +++++++++++++++++++++++++++++++++++++++++++----- > t/t4018/README | 18 +++++++++++++++ > 2 files changed, 72 insertions(+), 6 deletions(-) > create mode 100644 t/t4018/README > > diff --git a/t/t4018-diff-funcname.sh b/t/t4018-diff-funcname.sh > index 38a092a..b467d9e 100755 > --- a/t/t4018-diff-funcname.sh > +++ b/t/t4018-diff-funcname.sh > @@ -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 && I always found this "Let's apply rules for language $p to these *.java files" strange. I have wonder if it makes sense to further change the framework to read the name of the rule to be applied from the file in t/t4018/ directory, instead of using filename that is the same as the name of the rule? That way, you can list the files in t/t4018/ directory to come up with the above list, without having to maintain the list of rules separately like the above. > @@ -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 && I like that you can have more than one test for each language/rule this way, allowing you to test one kind of breakage without getting affected by lines prepared for other tests in the same file. > + # 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 > diff --git a/t/t4018/README b/t/t4018/README > new file mode 100644 > index 0000000..283e01cc > --- /dev/null > +++ b/t/t4018/README > @@ -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. -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html