Alien-Base-ModuleBuild
view release on metacpan or search on metacpan
t/alien_base_modulebuild.t view on Meta::CPAN
skip_all "Unix test" unless $builder->is_unixish();
ok( $builder->alien_validate_repo( {platform => 'Unix'} ), "platform Unix on Unix");
ok( ! $builder->alien_validate_repo( {platform => 'Windows'} ), "platform Windows on Unix is false");
};
subtest 'need c compiler' => sub {
skip_all "Needs c compiler" unless $builder->have_c_compiler();
ok( $builder->alien_validate_repo( {platform => 'src'} ), "platform src");
};
};
subtest 'basic interpolation' => sub {
my $builder = builder();
is( $builder->alien_interpolate('%phello'), $builder->alien_exec_prefix . 'hello', 'prefix interpolation');
is( $builder->alien_interpolate('%%phello'), '%phello', 'no prefix interpolation with escape');
my $path = $builder->alien_library_destination;
is( $builder->alien_interpolate('thing other=%s'), "thing other=$path", 'share_dir interpolation');
is( $builder->alien_interpolate('thing other=%%s'), 'thing other=%s', 'no share_dir interpolation with escape');
my $perl = $builder->perl;
is( $builder->alien_interpolate('%x'), $perl, '%x is current interpreter' );
unlike( $builder->alien_interpolate('%X'), qr{\\}, 'no backslash in %X' );
};
subtest 'interpolation of version' => sub {
my $builder = builder();
subtest 'prior to loading version information' => sub {
my $warn_count = warns {
is ( $builder->alien_interpolate('version=%v'), 'version=%v', 'version prior to setting it' );
};
is $warn_count, 1, 'version warning';
};
subtest 'after loading the version information' => sub {
my $warn_count = warns {
my $current_version = $builder->config_data( 'alien_version' ) ;
my $test_version = time;
$builder->config_data( 'alien_version', $test_version );
is( $builder->alien_interpolate('version=%v'), "version=$test_version", 'version after setting it' );
};
is $warn_count, 0, 'no warnings';
};
};
subtest 'interpolation of helpers' => sub {
my $mock = mock 'Alien::foopatcher' => (
add => [
new => sub { bless 'Alien::foopatcher', {} },
alien_helper => sub {
return {
patch1 => 'join " ", qw(patch1 --binary)',
patch2 => sub { 'patch2 --binary' },
double => sub { 2 },
argument_count2 => sub { scalar @_ },
},
}
],
);
my $builder = builder(
alien_helper => {
foo => ' "bar" . "baz" ',
exception => ' die "abcd" ',
double => '"1";',
argument_count1 => 'scalar @_',
},
alien_bin_requires => {
'Alien::foopatcher' => 0,
},
);
is( $builder->alien_interpolate("|%{foo}|"), "|barbaz|", "helper" );
is( $builder->alien_interpolate("|%{foo}|%{foo}|"), "|barbaz|barbaz|", "helper x 2" );
eval { $builder->alien_interpolate("%{exception}") };
like $@, qr{abcd}, "exception gets thrown";
$builder->_alien_bin_require('Alien::foopatcher');
is( $builder->alien_interpolate("|%{patch1}|"), "|patch1 --binary|", "helper from independent Alien module");
is( $builder->alien_interpolate("|%{patch2}|"), "|patch2 --binary|", "helper from independent Alien module with code ref");
eval { $builder->alien_interpolate("%{bogus}") };
like $@, qr{no such helper: bogus}, "exception thrown with bogus helper";
is( $builder->alien_interpolate('%{double}'), "1", "MB helper overrides AB helper");
is( $builder->alien_interpolate('%{argument_count1}'), "0", "argument count is zero (string helper)");
is( $builder->alien_interpolate('%{argument_count2}'), "0", "argument count is zero (code helper)");
is( $builder->alien_interpolate('%{pkg_config}'), Alien::Base::PkgConfig->pkg_config_command, "support for %{pkg_config}");
};
subtest 'find lib' => sub {
my $expected = {
lib => [ 'lib' ],
inc => [ 'include' ],
lib_files => [ 'mylib' ],
};
my $builder = builder();
$builder->config( so => 'so' );
$builder->config( ext_lib => '.a' );
subtest 'dynamic' => sub {
my $dir = $abmb_root->child('corpus/alien_base_modulebuild__find_lib/dynamic')->stringify;
( run in 0.591 second using v1.01-cache-2.11-cpan-62beec7d96d )