Alien-Build

 view release on metacpan or  search on metacpan

t/alien_build_commandsequence.t  view on Meta::CPAN


};

subtest 'execute' => sub {

  my $build = alienfile filename => 'corpus/blank/alienfile';
  my $meta = $build->meta;
  my $intr = $meta->interpolator;
  $intr->add_helper(foo => sub { 'myfoo' });

  system_clear;

  note capture_merged {
    Alien::Build::CommandSequence->new(
      '%{foo}',
      [ 'stuff', '%{foo}' ],
    )->execute($build);
  };

  is(
    system_last,
    [ ['myfoo'], ['stuff','myfoo'] ],
    'plain',
  );

  system_clear;

  my $error;
  note capture_merged {
    eval {
      Alien::Build::CommandSequence->new(
        'bogus',
        [ 'stuff', '%{foo}' ],
      )->execute($build);
    };
    $error = $@;
  };

  like $error, qr/command failed/;

  system_clear;

  system_hook stuff => sub {
    print "stuff output";
    print STDERR "stuff error";
  };


  my @cap;

  note capture_merged {
    Alien::Build::CommandSequence->new(
      [ 'stuff', '%{foo}', sub { @cap = @_ } ],
    )->execute($build);
  };

  is(
    \@cap,
    array {
      item object {
        prop blessed => ref $build;
        call sub { shift->isa('Alien::Build') } => T();
      };
      item hash {
        field command => ['stuff','myfoo'];
        field err  => match qr/stuff error/;
        field out  => match qr/stuff output/;
        field exit => 0;
      };
    },
  );

  system_hook bogus => sub {
    print "bogus output";
    print STDERR "bogus error";
  };

  @cap = ();

  note capture_merged {
    Alien::Build::CommandSequence->new(
      [ 'bogus', '%{foo}', sub { @cap = @_ } ],
    )->execute($build);
  };

  is(
    \@cap,
    array {
      item object {
        prop blessed => ref $build;
        call sub { shift->isa('Alien::Build') } => T();
      };
      item hash {
        field command => ['bogus','myfoo'];
        field err  => match qr/bogus error/;
        field out  => match qr/bogus output/;
        field exit => -1;
      };
    },
  );

  system_hook stuff2 => sub {
    print "single line\n";
    print STDERR "stuff error\n";
    print STDERR "stuff error\n";
  };

  system_clear;

  note capture_merged {
    Alien::Build::CommandSequence->new(
      [ 'stuff2', '%{foo}', \'%{alien.runtime.foo}' ],
    )->execute($build);
  };

  is($build->runtime_prop->{foo}, 'single line');

  system_clear;

  system_hook 'stuff2 myfoo' => sub {
    print "single line2\n";
    print STDERR "stuff error\n";
    print STDERR "stuff error\n";
  };

  note capture_merged {
    Alien::Build::CommandSequence->new(
      [ 'stuff2 %{foo}', \'%{alien.runtime.foo2}' ],
    )->execute($build);
  };

  is($build->runtime_prop->{foo2}, 'single line2');
  is system_last, [['stuff2 myfoo']];

  system_clear;

  system_hook 'stuff2 myfoo' => sub {
    print "single line2\n";
    print STDERR "stuff error\n";
    print STDERR "stuff error\n";
  };

  note capture_merged {
    Alien::Build::CommandSequence->new(
      [ 'stuff2 %{foo}', \'%{.runtime.foo2}' ],
    )->execute($build);
  };

  is($build->runtime_prop->{foo2}, 'single line2');
  is system_last, [['stuff2 myfoo']];



( run in 1.217 second using v1.01-cache-2.11-cpan-9bca49b1385 )