Alien-Build

 view release on metacpan or  search on metacpan

t/alien_build.t  view on Meta::CPAN


    $meta->add_requires( 'any' => 'Foo::Bar::Baz1' => '2.00');
    eval { $build->load_requires };
    my $error = $@;
    isnt $error, '';
    note "error=$error";
  };
};

subtest 'hook' => sub {

  my $build = alienfile filename => 'corpus/blank/alienfile';
  my $meta = $build->meta;

  subtest 'simple single working hook' => sub {

    my @foo1;
    my $props;

    $meta->register_hook(
      foo1 => sub {
        @foo1 = @_;
        my($build) = @_;
        $props = $build->hook_prop;
        return 42;
      }
    );

    is( $build->hook_prop, undef );

    is( $build->_call_hook(foo1 => ('roger', 'ramjet')), 42);

    is(
      $props,
      hash {
        field name => 'foo1';
        etc;
      },
    );

    is( $build->hook_prop, undef );

    is(
      \@foo1,
      array {
        item object {
          prop blessed => ref $build;
          call sub { shift->isa('Alien::Build') } => T();
        };
        item 'roger';
        item 'ramjet';
      }
    );
  };

  my $exception_count = 0;

  $meta->register_hook(
    foo2 => sub {
      $exception_count++;
      die "throw exception";
    }
  );

  subtest 'single failing hook' => sub {

    $exception_count = 0;

    eval { $build->_call_hook(foo2 => ()) };
    like $@, qr/throw exception/;
    note "error = $@";
    is $exception_count, 1;

  };

  subtest 'one fail, one okay' => sub {

    $exception_count = 0;

    $meta->register_hook(
      foo2 => sub {
        99;
      }
    );

    is( $build->_call_hook(foo2 => ()), 99);
    is $exception_count, 1;

  };

  subtest 'invalid hook' => sub {

    eval { $build->_call_hook(foo3 => ()) };
    like $@, qr/No hooks registered for foo3/;

  };

  subtest 'command list hook' => sub {

    $meta->register_hook(
      foo4 => [[$^X, -e => 'print @ARGV', 'hello', ' ', 'world']],
    );

    my $out = capture_merged { $build->_call_hook('foo4') };
    note $out;

    like $out, qr/hello world/s;

  };

  subtest 'command with failure' => sub {

    $meta->register_hook(
      foo5 => [[$^X, -e => 'exit 1']],
    );

    my $error;
    note capture_merged {
      eval { $build->_call_hook('foo5') };
      $error = $@;
    };

    like $error, qr/external command failed/;

  };

  subtest 'command with failure, followed by good command' => sub {

    $meta->register_hook(
      foo5 => [[$^X, -e => '']],

t/alien_build.t  view on Meta::CPAN

          $install_type;
        }
      );

    };

    alien_install_type_is 'share';

    is(
      $build->install_prop->{try},
      [
        [ undef, 'share', 'bar' ],
        [ undef, 'share', undef ],
        [ undef, 'share', 'baz' ],
      ],
      'set and unset at the right time.',
    );

    is $build->hook_prop, undef;

  };

};

subtest 'probe' => sub {

  subtest 'system' => sub {

    my $build = alienfile filename => 'corpus/blank/alienfile';
    my $meta = $build->meta;

    $meta->register_hook(
      probe => sub {
        note "dir = $CWD";
        return 'system';
      },
    );

    is($build->probe, 'system');
    is($build->runtime_prop->{install_type}, 'system');

  };

  subtest 'share' => sub {

    my $build = alienfile filename => 'corpus/blank/alienfile';
    my $meta = $build->meta;

    $meta->register_hook(
      probe => sub {
        note "dir = $CWD";
        return 'system';
      },
    );

    is($build->probe, 'system');
    is($build->runtime_prop->{install_type}, 'system');

  };

  subtest 'throw exception' => sub {

    my $build = alienfile filename => 'corpus/blank/alienfile';
    my $meta = $build->meta;

    $meta->register_hook(
      probe => sub {
        note "dir = $CWD";
        die "error will robinson!";
      },
    );

    my $type;
    note capture_merged { $type = $build->probe };
    is($type, 'share');
    is($build->runtime_prop->{install_type}, 'share');

  };

};

subtest 'gather system' => sub {

  local $ENV{ALIEN_INSTALL_TYPE} = 'system';

  my $build = alienfile filename => 'corpus/blank/alienfile';
  my $meta = $build->meta;

  $meta->register_hook(
    probe => sub {
      'system';
    }
  );

  $meta->register_hook(
    gather_system => sub {
      my($build) = @_;
      $build->runtime_prop->{cflags}  = '-DFoo=1';
      $build->runtime_prop->{libs}    = '-lfoo';
      $build->runtime_prop->{version} = '1.2.3';
    },
  );

  if($build->install_type eq 'system')
  {
    note capture_merged {
      $build->build;
    };
  }

  is(
    $build->runtime_prop,
    hash {
      field cflags  => '-DFoo=1';
      field libs    => '-lfoo';
      field version => '1.2.3';
      etc;
    },
    'runtime props'
  );



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