The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

BEGIN { # Magic Perl CORE pragma
if ($ENV{PERL_CORE}) {
chdir 't' if -d 't';
@INC = '../lib';
}
}
use Test::More tests => 22;
use strict;
sub slurp ($) { open( my $handle,$_[0] ); local $/; <$handle> }
ok( open( my $handle,'>script' ),"Create script #1: $!" );
print $handle <<'EOD';
$| = 1;
use Sys::RunAlways;
<>;
EOD
ok( close( $handle ),"Close script #1: $!" );
ok( open( my $stdin,"| $^X -I$INC[-1] script 2>2" ),"Run script #1: $!" );
sleep 2;
chomp( my $error = slurp 2 );
is( $error,"Add __END__ to end of script 'script' to be able use the features of Sys::RunAlways","Error message #1" );
ok( !close( $stdin ),"Close pipe #1: $!" );
ok( open( $handle,'>script' ),"Create script #2: $!" );
print $handle <<'EOD';
$| = 1;
use Sys::RunAlways;
<>;
__END__
EOD
ok( close( $handle ),"Close script #2: $!" );
ok( open( my $stdin1,"| $^X -I$INC[-1] script 2>2" ),"Run script #2: $!" );
sleep 2;
chomp( my $error1 = slurp 2 );
like( $error1,qr{'script' has been started at .*},"Error message #2" );
ok( open( my $stdin2,"| $^X -I$INC[-1] script 2>2" ),"Run script #2: $!" );
sleep 2;
chomp( my $error2 = slurp 2 );
is( $error2,"","Error message #2a" );
ok( close( $stdin2 ),"Close pipe #2a: $!" );
print $stdin1 $/;
ok( close( $stdin1 ),"Close pipe #2: $!" );
ok( open( $handle,'>script' ),"Create script #3: $!" );
print $handle <<'EOD';
$| = 1;
use Sys::RunAlways silent => 1;
<>;
__END__
EOD
ok( close( $handle ),"Close script #3: $!" );
ok( open( $stdin1,"| $^X -I$INC[-1] script 2>2" ),"Run script #3: $!" );
sleep 2;
chomp( $error1 = slurp 2 );
is( $error1,"","Error message #3" );
ok( open( $stdin2,"| $^X -I$INC[-1] script 2>2" ),"Run script #3: $!" );
sleep 2;
chomp( $error2 = slurp 2 );
is( $error2,"","Error message #3a" );
ok( close( $stdin2 ),"Close pipe #3a: $!" );
print $stdin1 $/;
ok( close( $stdin1 ),"Close pipe #3: $!" );
is( 2,unlink( qw(script 2) ),"Cleanup" );