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

use strict;
use warnings;

use Test::More;

if ($^O =~ m/(?:linux|freebsd|netbsd|aix|macos|darwin)/i) {
	plan tests => 2;
} else {
	plan skip_all => 'This test requires supported UNIX platform.';
}

use FindBin;
use MojoX::Run;

my $e = MojoX::Run->new();
$e->log_level('info');

my $test_cmd = $FindBin::Bin . '/stdin-test.pl';
my $cb_exit_status = undef;
my $cb_pid = undef;
my $cb_stdout = undef;

my $pid = $e->spawn(
    cmd => $test_cmd,
    
    exit_cb => sub {
      my ($pid, $res) = @_;
      $cb_pid = $pid;
      $cb_exit_status = $res->{exit_status};      
      $cb_stdout = $res->{stdout};

      # stop ioloop
      $e->ioloop->stop();
    },
);

ok $pid > 0, "Spawn succeeded";

my $data_sent = 'abcdefgh';

# write some data to stdin...
$e->stdin_write($pid, $data_sent);

# close stdin
$e->stdin_close($pid);

# start loop
$e->ioloop()->start();

# check what process got on stdin...
ok defined $cb_stdout && $data_sent eq $cb_stdout, "Sent data equals received data.";