use IPC::Open3 rather than IPC::Run3
Graham Knop [Mon, 3 Aug 2020 11:10:01 +0000 (13:10 +0200)]
Makefile.PL
t/generated_app.t

index 14a471e..964ce6b 100644 (file)
@@ -38,7 +38,6 @@ if (!$Module::Install::AUTHOR && $^O ne 'MSWin32') {
 # it in its inc/ directory for releases.
 requires 'Module::Install' => '1.02';
 
-author_requires 'IPC::Run3';
 author_requires 'Proc::Background';
 author_requires 'Test::Pod';
 author_requires 'Test::Pod::Coverage';
index 01469b9..2b50377 100644 (file)
@@ -8,9 +8,7 @@ use File::Basename qw( dirname );
 use Catalyst::Helper;
 use Test::More;
 use Config;
-
-eval "use IPC::Run3";
-plan skip_all => 'These tests require IPC::Run3' if $@;
+use IPC::Open3 qw( open3 );
 
 my $helper_lib = abs_path(catdir(dirname($INC{'Catalyst/Helper.pm'}), updir));
 
@@ -173,17 +171,21 @@ done_testing;
 
 sub command_ok {
     my $cmd = shift;
-    my $desc = shift;
+    my $desc = shift || "Exit status ok for '@{$cmd}'";
 
-    my $stdout;
-    my $stderr;
-    run3( $cmd, \undef, \$stdout, \$stderr );
+    open my $stdin, '<', $devnull
+        or die "Cannot read $devnull: $!";
 
-    $desc ||= "Exit status ok for '@{$cmd}'";
-    unless ( is $? >> 8, 0, $desc ) {
-        diag "STDOUT:\n$stdout" if defined $stdout;
-        diag "STDERR:\n$stderr" if defined $stderr;
-    }
+    my $pid = open3( $stdin, my $stdout, undef, @$cmd );
+    my $output = do { local $/; <$stdout> };
+    waitpid $pid, 0;
+
+    my $result = is $?, 0, $desc;
+
+    diag "output:\n$output"
+      if !$result;
+
+    return $result;
 }
 
 sub runperl {