Alien-Build
view release on metacpan or search on metacpan
t/test_alien.t view on Meta::CPAN
event Diag => sub {};
event Diag => sub {
call message => ' ExtUtils::CBuilder->compile failed';
};
etc;
},
'xs with C compile error'
);
# TODO: test that link error should fail
};
subtest 'good' => sub {
my $xs = <<'EOF';
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
int baz(const char *class)
{
return 42;
}
MODULE = TA_MODULE PACKAGE = TA_MODULE
int baz(class);
const char *class;
EOF
xs_ok { xs => $xs, verbose => 1 }, with_subtest {
my($module) = @_;
is $module->baz(), 42, "call $module->baz()";
};
$xs =~ s{\bTA_MODULE\b}{Foo::Bar}g;
xs_ok $xs, 'xs without parameterized name', with_subtest {
my($module) = @_;
is $module, 'Foo::Bar';
is $module->baz(), 42, "call $module->baz()";
};
};
subtest 'with xs_load' => sub {
_reset();
my $xs = <<'EOF';
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
MODULE = TA_MODULE PACKAGE = TA_MODULE
int
get_foo_one(klass)
const char *klass
CODE:
RETVAL = FOO_ONE;
OUTPUT:
RETVAL
int
get_foo_two(klass)
const char *klass
CODE:
RETVAL = FOO_TWO;
OUTPUT:
RETVAL
EOF
my @aliens = (
synthetic({ cflags => '-DFOO_ONE=42' }),
synthetic({ cflags => '-DFOO_TWO=47' }),
);
alien_ok $aliens[0];
alien_ok $aliens[1];
my @xs_load_args;
my $mock = mock 'Test::Alien::Synthetic' => (
add => [
xs_load => sub {
my($alien, $module, $version, @rest) = @_;
@xs_load_args = @_;
require XSLoader;
XSLoader::load($module, $version);
},
],
);
xs_ok { xs => $xs, verbose => 1 }, with_subtest {
my($mod) = @_;
is($mod->get_foo_one, 42, 'get_foo_one');
is($mod->get_foo_two, 47, 'get_foo_two');
};
is(
\@xs_load_args,
array {
item object {
call 'cflags' => '-DFOO_ONE=42';
};
item match(qr{^Test::Alien::XS::Mod});
item '0.01';
item object {
call 'cflags' => '-DFOO_TWO=47';
};
end;
},
'called xs_load with correct args',
);
};
subtest 'acme' => sub {
skip_all 'Test requires Acme::Alien::DontPanic 0.026'
unless eval {
require Acme::Alien::DontPanic;
Acme::Alien::DontPanic->VERSION('0.026');
};
reset();
my $xs = <<'EOF';
#include "EXTERN.h"
( run in 0.474 second using v1.01-cache-2.11-cpan-13bb782fe5a )