Sponsoring The Perl Toolchain Summit 2025: Help make this important event another success Learn more

use strict;
use Test::More 0.88;
{
my $tzil = Builder->from_config(
{ dist_root => 'corpus/dist/DZT' },
{
add_files => {
'source/dist.ini' => simple_ini(
'GatherDir',
'ModuleBuild',
[ Prereqs => { 'Foo::Bar' => '1.20' } ],
[ Prereqs => BuildRequires => { 'Builder::Bob' => '9.901' } ],
[ Prereqs => TestRequires => { 'Test::Deet' => '7' } ],
),
},
},
);
$tzil->build;
my $modulebuild = $tzil->plugin_named('ModuleBuild');
my $have = $modulebuild->__module_build_args;
my %want = (
'module_name' => 'DZT::Sample',
'dist_name' => 'DZT-Sample',
'dist_abstract' => 'Sample DZ Dist',
'dist_version' => '0.001',
'dist_author' => [
'E. Xavier Ample <example@example.org>'
],
'license' => 'perl',
'requires' => {
'Foo::Bar' => '1.20'
},
build_requires => {
'Builder::Bob' => '9.901',
'Module::Build' => '0.28',
},
test_requires => {
'Test::Deet' => '7',
},
'configure_requires' => {
'Module::Build' => '0.28',
},
'recursive_test_files' => ignore,
);
cmp_deeply(
$have,
\%want,
'module_build_args',
);
is($modulebuild->_use_custom_class, q{}, 'no custom class by default');
}
{
my $tzil = Builder->from_config(
{ dist_root => 'corpus/dist/DZT' },
{
add_files => {
'source/dist.ini' => simple_ini(
'GatherDir', [ 'ModuleBuild' => { mb_class => 'Foo::Build' } ],
),
},
},
);
$tzil->build;
my $modulebuild = $tzil->plugin_named('ModuleBuild');
is(
$modulebuild->_use_custom_class,
q{use lib qw{inc}; use Foo::Build;},
'loads custom class from inc'
);
my $build = $tzil->slurp_file('build/Build.PL');
like($build, qr/\QFoo::Build->new/, 'Build.PL calls ->new on Foo::Build');
}
{
my $tzil = Builder->from_config(
{ dist_root => 'corpus/dist/DZT' },
{
add_files => {
'source/dist.ini' => simple_ini( 'GatherDir', [ 'ModuleBuild' => {
mb_class => 'Foo::Build',
mb_lib => 'inc,priv,something',
build_element => [qw(js sql)],
} ] ),
},
},
);
$tzil->build;
my $modulebuild = $tzil->plugin_named('ModuleBuild');
is(
$modulebuild->_use_custom_class,
q{use lib qw{inc priv something}; use Foo::Build;},
'loads custom class from items specificed in mb_lib'
);
is(
$modulebuild->_add_build_elements,
'$build->add_build_element($_) for qw(js sql);',
'adds build elements'
);
my $build = $tzil->slurp_file('build/Build.PL');
like($build, qr/\QFoo::Build->new/, 'Build.PL calls ->new on Foo::Build');
like($build, qr/\$build->add_build_element\(\$_\) for qw\(js sql\);/,
'Build.PL calls add_build_element for all elements');
}
done_testing;