Alien-Build

 view release on metacpan or  search on metacpan

t/alienfile.t  view on Meta::CPAN

use 5.008004;
use Test2::V0 -no_srand => 1;
use Test::Alien::Build;
use Alien::Build;
use Path::Tiny qw( path );
use lib 'corpus/lib';
use Capture::Tiny qw( capture_merged );
use File::Temp qw( tempdir );

subtest 'compile examples' => sub {

  foreach my $alienfile (path('example')->children(qr/\.alienfile$/))
  {
    my $build = eval {
      Alien::Build->load("$alienfile");
    };
    is $@, '', $alienfile->basename;
  }

};

subtest 'non struct alienfile' => sub {

  eval {
    alienfile q{
      use alienfile;
      my $foo = 'bar';
      @{ "${foo}::${foo}" } = ();
    };
  };
  my $error = $@;
  isnt $error, '', 'throws error';
  note "error = $error";

};

subtest 'warnings alienfile' => sub {

  my $warning = warning {
    alienfile q{
      use alienfile;
      my $foo;
      my $bar = "$foo";
    };
  };

  ok $warning;
  note $warning;

};

subtest 'plugin' => sub {

  subtest 'basic' => sub {

    my $build = alienfile q{
      use alienfile;
      plugin 'RogerRamjet';
    };

    is(
      $build->meta->prop,
      hash {
        field ramjet => 'roger';
        field foo    => 22;
        field bar    => 'something generated';
        field baz    => undef;
        etc;
      }
    );

  };

  subtest 'default argument' => sub {

    my $build = alienfile q{
      use alienfile;
      plugin 'RogerRamjet' => 'starscream';
    };

    is(
      $build->meta->prop,
      hash {
        field ramjet => 'roger';
        field foo    => 22;
        field bar    => 'starscream';
        field baz    => undef;
        etc;
      }
    );

  };



( run in 0.837 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )