The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings FATAL => 'all';
use POE;
use POE::Quickie;
use Test::More tests => 5;

POE::Session->create(
    package_states => [
        (__PACKAGE__) => [qw(
            _start
            stdout
            stderr
        )],
    ],
);

POE::Kernel->run;

sub _start {
    my $heap = $_[HEAP];

    POE::Quickie->run(
        Program     => sub { print "foo\n" },
        StdoutEvent => 'stdout',
        Context     => 'baz',
    );
}

sub stdout {
    my ($heap, $output, $pid, $context) = @_[HEAP, ARG0..ARG2];
    is($output, 'foo', 'Got stdout');
    is($context, 'baz', 'Got context');
    my $procs = POE::Quickie->processes();
    is($procs->{$pid}, 'baz', '$quickie->processes() works');

    POE::Quickie->run(
        Program     => sub { warn "bar\n" },
        StderrEvent => 'stderr',
        Context     => 'quux',
    );
}

sub stderr {
    my ($heap, $error, $context) = @_[HEAP, ARG0, ARG2];
    is($error, 'bar', 'Got stderr');
    is($context, 'quux', 'Got context');
}