On Tue, May 07, 2019 at 06:47:59PM +0200, David Fetter wrote: > On Tue, May 07, 2019 at 09:39:57AM -0400, Andrew Dunstan wrote: > > > > On 5/6/19 10:42 PM, David Fetter wrote: > > > On Tue, May 07, 2019 at 11:05:32AM +0900, Kyotaro HORIGUCHI wrote: > > >> Hi. > > >> > > >> At Sun, 28 Apr 2019 17:07:16 +0200, David Fetter <da...@fetter.org> > > >> wrote in <20190428150716.gp28...@fetter.org> > > >>> Our test coverage needs all the help it can get. > > >>> > > >>> This patch, extracted from another by Fabian Coelho, helps move things > > >>> in that direction. > > >>> > > >>> I'd like to argue that it's not a new feature, and that it should be > > >>> back-patched as far as possible. > > >> The comment for the parameter "in". > > >> > > >> +# - in: standard input > > >> > > >> Perhaps this is "string to be fed to standard input". This also > > >> can be a I/O reference but we don't care that? > > > OK > > > > > >> + $in = '' if not defined $in; > > >> > > >> run($cmd, '<', \undef) seems to work, maybe assuming "< > > >> /dev/null", which might be better? > > > Is /dev/null a thing on Windows? > > > > However, I don't think we should be faking anything here. I think it > > would be better to avoid setting $in if not supplied and then have this: > > > > if (defined($in)) > > > > { > > > > IPC::Run::run($cmd, '<', \$in, '>', \$stdout, '2>', \$stderr); > > > > } > > > > else > > > > { > > > > IPC::Run::run($cmd, >', \$stdout, '2>', \$stderr); > > > > } > > Done that way.
It helps to commit the work before putting together the patch. Best, David. -- David Fetter <david(at)fetter(dot)org> http://fetter.org/ Phone: +1 415 235 3778 Remember to vote! Consider donating to Postgres: http://www.postgresql.org/about/donate
>From 3d56bdc7acb5f70e57dc4a19b99ad31e7a13127a Mon Sep 17 00:00:00 2001 From: David Fetter <da...@fetter.org> Date: Sun, 28 Apr 2019 08:01:01 -0700 Subject: [PATCH v3] Add a way to supply stdin to TAP tests To: hackers MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------2.21.0" This is a multi-part message in MIME format. --------------2.21.0 Content-Type: text/plain; charset=UTF-8; format=fixed Content-Transfer-Encoding: 8bit by Fabian Coelho This will help increase test coverage for anything that might need it, and a lot of things currently need it. diff --git a/src/test/perl/TestLib.pm b/src/test/perl/TestLib.pm index a164cdbd8c..b9b18950ed 100644 --- a/src/test/perl/TestLib.pm +++ b/src/test/perl/TestLib.pm @@ -519,22 +519,30 @@ sub command_fails_like } # Run a command and check its status and outputs. -# The 5 arguments are: +# The 5 to 6 arguments are: # - cmd: ref to list for command, options and arguments to run # - ret: expected exit status # - out: ref to list of re to be checked against stdout (all must match) # - err: ref to list of re to be checked against stderr (all must match) # - test_name: name of test +# - in: standard input sub command_checks_all { local $Test::Builder::Level = $Test::Builder::Level + 1; - my ($cmd, $expected_ret, $out, $err, $test_name) = @_; + my ($cmd, $expected_ret, $out, $err, $test_name, $in) = @_; # run command my ($stdout, $stderr); print("# Running: " . join(" ", @{$cmd}) . "\n"); - IPC::Run::run($cmd, '>', \$stdout, '2>', \$stderr); + if (defined $in) + { + IPC::Run::run($cmd, '<', \$in, '>', \$stdout, '2>', \$stderr); + } + else + { + IPC::Run::run($cmd, '>', \$stdout, '2>', \$stderr); + } # See http://perldoc.perl.org/perlvar.html#%24CHILD_ERROR my $ret = $?; --------------2.21.0--