Re: [PATCH 03/10] t4018: an infrastructure to test hunk headers
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Mar 21, 2014, 22:00 UTC
- Message-ID
- <xmqqk3bnrz3m.fsf@gitster.dls.corp.google.com>
- In-Reply-To
- <52505977c20a480941ae1f85f50ffb7a0bbffedb.1395433874.git.j6t@kdbg.org>
Johannes Sixt <j6t@kdbg.org> writes:
Show 5 quoted lines
> 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.
Show 38 quoted lines
> Signed-off-by: Johannes Sixt <j6t@kdbg.org>
> ---
> 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.
Show 21 quoted lines
> @@ -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.
Show 54 quoted lines
> + # 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.