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

Re: [PATCH 3/2] test: factor out helper function test_must_contain

From
René Scharfe <l.s.r@web.de>
Date
Nov 21, 2015, 09:35 UTC
Message-ID
<56503ADC.50908@web.de>
In-Reply-To
<56502745.2000307@kdbg.org>
Am 21.11.2015 um 09:11 schrieb Johannes Sixt:
Show 18 quoted lines
> Am 20.11.2015 um 21:50 schrieb René Scharfe:
>> Extract a helper function for searching for a pattern in a file and
>> printing the whole file if the pattern is not found.  It is useful
>> when starting tests with --verbose for debugging purposes.
> 
>> +# Check if a file contains an expected pattern.
>> +test_must_contain () {
>> +    if grep "$1" "$2"
>> +    then
>> +        return 0
>> +    else
>> +        echo "didn't find /$1/ in '$2', it contains:"
>> +        cat "$2"
>> +        return 1
>> +    fi
>> +}
> 
> There is already test_i18n_grep. Should it be folded into this function? 

That's a good point. But how? test_i18ngrep can also work as a filter and pass on options, so we'd need to parse all parameters and redirect stdin to a temporary file unless a file was specified. Or we could be sloppy and just check if the last parameter is a file and if yes then spew it out.

> Wouldn't we also want to have a function test_must_not_contain?

I doubt it. In such a function grep would display the lines that match unexpectedly already, so showing the whole file after that won't add much more of interest.

Show 6 quoted lines
> IMHO, we should not increase the number of functions that give a bonus 
> only when there is a test case failure. They do not scale well: There is 
> a permanent mental burden on every reviewer to watch out that they are 
> used in new tests. But without those functions, the burden is on the one 
> person investigating a test case failure, who has to live without the 
> debugging support.

test_must_contain doesn't have to be used everywhere, only in cases where a file is shown and grepped. I agree that letting an existing function do that job (or deciding that the job is not worth doing) is preferable.

Here's how I imagine the sloppy add-on to test_i18ncmp to look:
diff --git a/t/test-lib.sh b/t/test-lib.sh
index 16c4d7b..db64600 100644
--- a/t/test-lib.sh
+++ b/t/test-lib.sh
@@ -985,13 +985,28 @@ test_i18ncmp () {
 test_i18ngrep () {
 	if test -n "$GETTEXT_POISON"
 	then
 	    : # pretend success
 	elif test "x!" = "x$1"
 	then
 		shift
 		! grep "$@"
 	else
 		grep "$@"
+
+		rc=$?
+		if test $rc != 0
+		then
+			while test $# -gt 1
+			do
+				shift
+			done
+			if test -f "$1"
+			then
+				echo "Expected pattern not found, content is:"
+				cat "$1"
+			fi
+			return $rc
+		fi
 	fi
 }
 
Previous: Johannes SixtNext: René Scharfe
Message 11 of 14 in “t1450: add tests for NUL in headers of commits and tags”
  1. 1/2 t1450: add tests for NUL in headers of commits and tagsRené Scharfe, Nov 19, 2015
  2. 2/2 fsck: treat a NUL in a tag header as an errorRené Scharfe, Nov 19, 2015
  3. Jeff KingNov 20, 2015
  4. Johannes SchindelinNov 20, 2015
  5. Eric SunshineNov 19, 2015
  6. René ScharfeNov 19, 2015
  7. Jeff KingNov 20, 2015
  8. René ScharfeNov 20, 2015
  9. 3/2 test: factor out helper function test_must_containRené Scharfe, Nov 20, 2015
  10. Johannes SixtNov 21, 2015
  11. René ScharfeNov 21, 2015
  12. 4/2 test: use test_must_containRené Scharfe, Nov 20, 2015
  13. SZEDER GáborNov 21, 2015
  14. René ScharfeNov 21, 2015

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.