Re: TAP output format in pg_regress

Daniel Gustafsson <daniel@yesql.se>

From: Daniel Gustafsson <daniel@yesql.se>
To: Dagfinn Ilmari Mannsåker <ilmari@ilmari.org>
Cc: Andres Freund <andres@anarazel.de>, Nikolay Shaplov <dhyan@nataraj.su>, PostgreSQL Developers <pgsql-hackers@lists.postgresql.org>, Andrew Dunstan <andrew@dunslane.net>, Tom Lane <tgl@sss.pgh.pa.us>, Peter Eisentraut <peter.eisentraut@enterprisedb.com>
Date: 2022-11-22T22:17:44Z
Lists: pgsql-hackers

Attachments

> On 21 Nov 2022, at 14:42, Dagfinn Ilmari Mannsåker <ilmari@ilmari.org> wrote:
> 
> Andres Freund <andres@anarazel.de> writes:
> 
>> But either way, it seems nicer to output the # inside a helper function?
> 
> Note that the helper function should inject '# ' at the start of every
> line in the message, not just the first line. It might also be worth
> having two separate functions: one that prints to stdout, so is only
> shown by the harness is in verbose mode, and another which prints to
> stderr, so is always shown. Perl's Test::More calls these note() and
> diag(), respectively.
> 
>>> +	/*
>>> +	 * In order for this information (or any error information) to be shown
>>> +	 * when running pg_regress test suites under prove it needs to be emitted
>>> +	 * stderr instead of stdout.
>>> +	 */
>>> 	if (file_size(difffilename) > 0)
>>> 	{
>>> -		printf(_("The differences that caused some tests to fail can be viewed in the\n"
>>> -				 "file \"%s\". A copy of the test summary that you see\n"
>>> -				 "above is saved in the file \"%s\".\n\n"),
>>> +		status(_("\n# The differences that caused some tests to fail can be viewed in the\n"
>>> +				 "# file \"%s\". A copy of the test summary that you see\n"
>>> +				 "# above is saved in the file \"%s\".\n\n"),
>>> 			 difffilename, logfilename);
>> 
>> The comment about needing to print to stderr is correct - but the patch
>> doesn't do so (anymore)?
>> 
>> The count of failed tests also should go to stderr (but not the report of all
>> tests having passed).
>> 
>> bail() probably also ought to print the error to stderr, so the most important
>> detail is immediately visible when looking at the failed test result.
> 
> Agreed on all three points.

The attached v10 attempts to address the points raised above.  Notes and
diagnostics are printed to stdout/stderr respectively and the TAP emitter is
changed to move more of the syntax into it making it less painful on the
translators.

--
Daniel Gustafsson		https://vmware.com/

Commits

  1. pg_regress: Emit TAP compliant output

  2. Consider a failed process as a failed test in pg_regress

  3. Avoid reference to nonexistent array element in ExecInitAgg().