The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

=pod

=head1 NAME

signal.t - Test suite IPC::Run->signal

=cut

use strict;
BEGIN { 
	$|  = 1;
	$^W = 1;
	if( $ENV{PERL_CORE} ) {
		chdir '../lib/IPC/Run' if -d '../lib/IPC/Run';
		unshift @INC, 'lib', '../..';
		$^X = '../../../t/' . $^X;
	}
}

use Test::More;
use IPC::Run qw( :filters :filter_imp start run );
use t::lib::Test;
BEGIN {
	if ( IPC::Run::Win32_MODE() ) {
		plan skip_all => 'Skipping on Win32';
	} else {
		plan tests => 3;
	}
}

my @receiver = (
   $^X,
   '-e',
   <<'END_RECEIVER',
      my $which = "          ";
      sub s{ $which = $_[0] };
      $SIG{$_}=\&s for (qw(USR1 USR2));
      $| = 1;
      print "Ok\n";
      for (1..10) { sleep 1; print $which, "\n" }
END_RECEIVER
);

my $h;
my $out;

$h = start \@receiver, \undef, \$out;
pump $h until $out =~ /Ok/;
ok 1;
$out = "";
$h->signal( "USR2" );
pump $h;
$h->signal( "USR1" );
pump $h;
$h->signal( "USR2" );
pump $h;
$h->signal( "USR1" );
pump $h;
ok $out, "USR2\nUSR1\nUSR2\nUSR1\n";
$h->signal( "TERM" );
finish $h;
ok( 1 );