1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
|
# sample.t -- a sample test file for Module::Build
use strict;
use lib 't/lib';
use MBTest;
use DistGen;
plan tests => 27;
# Ensure any Module::Build modules are loaded from correct directory
blib_load('Module::Build');
my $dist = DistGen->new->regen->chdir_in;
# get a Module::Build object and test with it
my $mb;
stderr_of(sub {
ok( $mb = $dist->new_from_context, "Default Build.PL" );
});
ok( ! $mb->needs_compiler, "needs_compiler is false" );
ok( ! exists $mb->{properties}{build_requires}{'ExtUtils::CBuilder'},
"ExtUtils::CBuilder is not in build_requires"
);
#--------------------------------------------------------------------------#
# try with c_source as a string
#--------------------------------------------------------------------------#
$dist->change_build_pl({
module_name => $dist->name,
license => 'perl',
c_source => 'src',
});
$dist->regen;
stderr_of(sub {
ok( $mb = $dist->new_from_context,
"Build.PL with string c_source"
);
});
is( $mb->c_source, 'src', "c_source is set" );
ok( $mb->needs_compiler, "needs_compiler is true" );
ok( exists $mb->{properties}{build_requires}{'ExtUtils::CBuilder'},
"ExtUtils::CBuilder was added to build_requires"
);
#--------------------------------------------------------------------------#
# try with c_source as an array
#--------------------------------------------------------------------------#
$dist->change_build_pl({
module_name => $dist->name,
license => 'perl',
c_source => ['src'],
});
$dist->regen;
stderr_of(sub {
ok( $mb = $dist->new_from_context,
"Build.PL with non-empty array c_source"
);
});
is_deeply( $mb->c_source, ['src'], "c_source is set" );
ok( $mb->needs_compiler, "needs_compiler is true" );
ok( exists $mb->{properties}{build_requires}{'ExtUtils::CBuilder'},
"ExtUtils::CBuilder was added to build_requires"
);
#--------------------------------------------------------------------------#
# try with c_source as an empty array
#--------------------------------------------------------------------------#
$dist->change_build_pl({
module_name => $dist->name,
license => 'perl',
c_source => [],
});
$dist->regen;
stderr_of(sub {
ok( $mb = $dist->new_from_context,
"Build.PL with empty array c_source"
);
});
is_deeply( $mb->c_source, [], "c_source is set" );
ok( ! $mb->needs_compiler, "needs_compiler is false" );
ok( ! exists $mb->{properties}{build_requires}{'ExtUtils::CBuilder'},
"ExtUtils::CBuilder is not in build_requires"
);
#--------------------------------------------------------------------------#
# try with xs files
#--------------------------------------------------------------------------#
$dist = DistGen->new(dir => 'MBTest', xs => 1);
$dist->regen;
$dist->chdir_in;
stderr_of(sub {
ok( $mb = $dist->new_from_context,
"Build.PL with xs files"
);
});
ok( $mb->needs_compiler, "needs_compiler is true" );
ok( exists $mb->{properties}{build_requires}{'ExtUtils::CBuilder'},
"ExtUtils::CBuilder was added to build_requires"
);
#--------------------------------------------------------------------------#
# force needs_compiler off, despite xs modules
#--------------------------------------------------------------------------#
$dist->change_build_pl({
module_name => $dist->name,
license => 'perl',
needs_compiler => 0,
});
$dist->regen;
stderr_of(sub {
ok( $mb = $dist->new_from_context ,
"Build.PL with xs files, but needs_compiler => 0"
);
});
is( $mb->needs_compiler, 0, "needs_compiler is false" );
ok( ! exists $mb->{properties}{build_requires}{'ExtUtils::CBuilder'},
"ExtUtils::CBuilder is not in build_requires"
);
#--------------------------------------------------------------------------#
# don't override specific EU::CBuilder build_requires
#--------------------------------------------------------------------------#
$dist->change_build_pl({
module_name => $dist->name,
license => 'perl',
build_requires => { 'ExtUtils::CBuilder' => 0.2 },
});
$dist->regen;
stderr_of(sub {
ok( $mb = $dist->new_from_context ,
"Build.PL with xs files, build_requires EU::CB 0.2"
);
});
ok( $mb->needs_compiler, "needs_compiler is true" );
is( $mb->build_requires->{'ExtUtils::CBuilder'}, 0.2,
"build_requires for ExtUtils::CBuilder is correct version"
);
#--------------------------------------------------------------------------#
# falsify compiler and test error handling
#--------------------------------------------------------------------------#
# clear $ENV{CC} so we are sure to fail to find our fake compiler :-)
local $ENV{CC};
my $err = stderr_of( sub {
$mb = $dist->new_from_context( config => { cc => "adfasdfadjdjk" } )
});
ok( $mb, "Build.PL while hiding compiler" );
like( $err, qr/no compiler detected/,
"hidden compiler resulted in warning message during Build.PL"
);
eval { $mb->dispatch('build') };
like( $@, qr/no compiler detected/,
"hidden compiler resulted in fatal message during Build"
);
# vim:ts=2:sw=2:et:sta:sts=2
|