git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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.
Previous: Johannes SixtNext: Johannes Sixt
Message 14 of 30 in “diff: simplify cpp funcname regex”
  1. diff: simplify cpp funcname regexJeff King, Mar 5, 2014
  2. Johannes SixtMar 5, 2014
  3. Jeff KingMar 6, 2014
  4. Johannes SixtMar 7, 2014
  5. Jeff KingMar 14, 2014
  6. Johannes SixtMar 14, 2014
  7. Jeff KingMar 18, 2014
  8. Johannes SixtMar 18, 2014
  9. René ScharfeMar 18, 2014
  10. 00/10 userdiff: cpp pattern simplification and test frameworkJohannes Sixt, Mar 21, 2014
  11. 01/10 userdiff: support C++ ->* and .* operators in the word regexpJohannes Sixt, Mar 21, 2014
  12. 02/10 userdiff: support unsigned and long long suffixes of integer constantsJohannes Sixt, Mar 21, 2014
  13. 03/10 t4018: an infrastructure to test hunk headersJohannes Sixt, Mar 21, 2014
  14. Junio C HamanoMar 21, 2014
  15. Johannes SixtMar 22, 2014
  16. Junio C HamanoMar 23, 2014
  17. Jeff KingMar 24, 2014
  18. Jeff KingMar 24, 2014
  19. Johannes SixtMar 25, 2014
  20. Jeff KingMar 25, 2014
  21. 04/10 t4018: convert perl pattern tests to the new infrastructureJohannes Sixt, Mar 21, 2014
  22. 05/10 t4018: convert java pattern test to the new infrastructureJohannes Sixt, Mar 21, 2014
  23. 06/10 t4018: convert custom pattern test to the new infrastructureJohannes Sixt, Mar 21, 2014
  24. 07/10 t4018: reduce test files for pattern compilation testsJohannes Sixt, Mar 21, 2014
  25. 08/10 t4018: test cases for the built-in cpp patternJohannes Sixt, Mar 21, 2014
  26. 09/10 t4018: test cases showing that the cpp pattern misses many anchor pointsJohannes Sixt, Mar 21, 2014
  27. 10/10 userdiff: have 'cpp' hunk header pattern catch more C++ anchor pointsJohannes Sixt, Mar 21, 2014
  28. Junio C HamanoMar 21, 2014
  29. Jeff KingMar 24, 2014
  30. Junio C HamanoMar 5, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.