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 )