Test::Alien::Synthetic - A mock alien object for testing
version 0.07
use Test2::Bundle::Extended; use Test::Alien; plan 1; my $alien = synthetic { cflags => '-I/foo/bar/include', libs => '-L/foo/bar/lib -lbaz', }; alien_ok $alien;
This class is used to model a synthetic Alien class that implements the minimum Alien::Base interface needed by Test::Alien.
It can be useful if you have a non-Alien::Base based Alien distribution that you need to test.
NOTE: The name of this class may move in the future, so do not refer to this class name directly. Instead create instances of this class using the Test::Alien#synthetic function.
String containing the compiler flags
String containing the linker and library flags
List reference containing the dynamic libraries.
Tool binary directory.
Here is a complete example using Alien::Libarchive which is a non-Alien::Base based Alien distribution.
use strict; use warnings; use Test2::Bundle::Extended; use Test::Alien; use Alien::Libarchive; plan 5; my $real = Alien::Libarchive->new; my $alien = synthetic { cflags => scalar $real->cflags, libs => scalar $real->libs, dynamic_libs => [$real->dlls], }; alien_ok $alien; xs_ok do { local $/; <DATA> }, with_subtest { my($module) = @_; plan 1; my $ptr = $module->archive_read_new; like $ptr, qr{^[0-9]+$}; $module->archive_read_free($ptr); }; ffi_ok { symbols => [qw( archive_read_new )] }, with_subtest { my($ffi) = @_; my $new = $ffi->function(archive_read_new => [] => 'opaque'); my $free = $ffi->function(archive_read_close => ['opaque'] => 'void'); my $ptr = $new->(); like $ptr, qr{^[0-9]+$}; $free->($ptr); }; __DATA__ #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include <archive.h> MODULE = TA_MODULE PACKAGE = TA_MODULE void *archive_read_new(class); const char *class; CODE: RETVAL = (void*) archive_read_new(); OUTPUT: RETVAL void archive_read_free(class, ptr); const char *class; void *ptr; CODE: archive_read_free(ptr);
Graham Ollis <plicease@cpan.org>
This software is copyright (c) 2015 by Graham Ollis.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
To install Test::Alien, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Test::Alien
CPAN shell
perl -MCPAN -e shell install Test::Alien
For more information on module installation, please visit the detailed CPAN module installation guide.