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

use strict;
use warnings;

use Test::More;
use Proc::Lite;


eval { Proc::Lite->new( fake => ) };
like( $@, qr/^Odd number of parameters/, 'odd parameters' );

eval { Proc::Lite->new( fake => 'fake' ) };
like( $@, qr/^command: Required parameter/, 'odd parameters' );

{
  my $proc = Proc::Lite->new( command => \&command )->run;
  ok( $proc->status == 0, 'new->run: status' );
  ok( $proc->success, 'new->run: success' );
}

{
  my $proc = Proc::Lite->exec( \&command, stdout => 'STDOUT', stderr => 'STDERR' );
  is(   $proc->stdout->[0], 'STDOUT', 'exec: stdout: scalar' );
  is(   $proc->stderr->[0], 'STDERR', 'exec: stderr: scalar' );
  is( ( $proc->stdout )[0], 'STDOUT', 'exec: stdout: list: ' );
  is( ( $proc->stderr )[0], 'STDERR', 'exec: stderr: list' );
}

{
  my $info;

  my $proc = Proc::Lite->new(
    parent  => sub { $info = $$. ':'. $_[0] },
    child   => sub { $info = $_[0]. ':'. $$ },
    command => sub { print $info },
  )->run;

  is( $proc->stdout->[0], $info, 'parent/child callbacks' );
}

{
  my $proc = Proc::Lite->new(
    priority => 1,
    command  => sub { },
  )->run;

  ok( $proc->status == 0, 'priority' );
}

done_testing;


sub command {
  my %args = @_;

  print STDOUT $args{stdout}, "\n"
    if defined $args{stdout};

  print STDERR $args{stderr}, "\n"
    if defined $args{stderr};
}