#!/usr/bin/perl -w
use
lib
$ENV
{PERL_CORE} ?
'../lib/Module/Build/t/lib'
:
't/lib'
;
use_ok
'Module::Build'
;
ensure_blib(
'Module::Build'
);
my
$tmp
= MBTest->tmpdir;
my
$dist
= DistGen->new(
dir
=>
$tmp
);
$dist
->regen;
$dist
->chdir_in;
$::x = 0;
my
$mb
= Module::Build->subclass
(
code
=>
"sub ACTION_loop { die 'recursed' if \$::x++; shift->depends_on('loop'); }"
)->new(
module_name
=>
$dist
->name );
ok
$mb
;
$mb
->dispatch(
'loop'
);
ok $::x;
$mb
->dispatch(
'realclean'
);
my
$build2class
=
ref
(
$mb
)->subclass
(
code
=>
"sub ACTION_loop2 {}"
,
class
=>
'MBB'
,
);
can_ok(
$build2class
,
'ACTION_loop'
);
can_ok(
$build2class
,
'ACTION_loop2'
);
{
$dist
->add_file(
'script'
,
<<'---' );
#!perl -w
print "Hello, World!\n";
---
$dist
->regen;
$mb
->test_files(
'*t*'
);
my
$files
=
$mb
->test_files;
ok
grep
{
$_
eq
'script'
}
@$files
;
ok
grep
{
$_
eq File::Spec->catfile(
't'
,
'basic.t'
)}
@$files
;
ok !
grep
{
$_
eq
'Build.PL'
}
@$files
;
$mb
->test_files(
'foo'
,
'bar'
);
$files
=
$mb
->test_files;
is
@$files
, 2;
is
$files
->[0],
'foo'
;
is
$files
->[1],
'bar'
;
$dist
->remove_file(
'script'
);
$dist
->regen(
clean
=> 1 );
}
{
$dist
->add_file(
'test.foo'
,
"content\n"
);
$dist
->regen;
my
$mb
= Module::Build->new(
module_name
=>
$dist
->name,
foo_files
=> {
'test.foo'
,
'lib/test.foo'
} );
ok
$mb
;
$mb
->add_build_element(
'foo'
);
$mb
->add_build_element(
'foo'
);
is_deeply
$mb
->build_elements, [
qw(PL support pm xs pod script foo)
],
'The foo element should be in build_elements only once'
;
$mb
->dispatch(
'build'
);
ok -e File::Spec->catfile(
$mb
->blib,
'lib'
,
'test.foo'
);
$mb
->dispatch(
'realclean'
);
$dist
->remove_file(
'test.foo'
);
$dist
->regen(
clean
=> 1 );
}
{
use
vars
qw($VERSION @ISA)
;
@ISA
=
qw(Module::Build)
;
$VERSION
= 0.01;
ok(__PACKAGE__->add_property(
'foo'
));
ok(__PACKAGE__->add_property(
'bar'
,
'hey'
));
ok(__PACKAGE__->add_property(
'hash'
, {}));
eval
{ __PACKAGE__->add_property(
'module_name'
)};
like
"$@"
,
qr/already exists/
;
}
{
use
vars
qw($VERSION @ISA)
;
@ISA
=
qw(Module::Build)
;
$VERSION
= 0.01;
ok(__PACKAGE__->add_property(
'bar'
,
'yow'
));
}
{
ok
my
$mb
= MBSub->new(
module_name
=>
$dist
->name );
isa_ok
$mb
,
'Module::Build'
;
isa_ok
$mb
,
'MBSub'
;
ok
$mb
->valid_property(
'foo'
);
can_ok
$mb
,
'module_name'
;
can_ok
$mb
,
'foo'
;
ok !
$mb
->foo;
ok
$mb
->foo(1);
ok
$mb
->foo;
can_ok
$mb
,
'bar'
;
is
$mb
->bar,
'hey'
;
ok
$mb
->bar(
'you'
);
is
$mb
->bar,
'you'
;
ok
$mb
= MBSub->new(
module_name
=>
$dist
->name,
hash
=> {
foo
=>
'bar'
,
bin
=>
'foo'
}
);
can_ok
$mb
,
'hash'
;
isa_ok
$mb
->hash,
'HASH'
;
is
$mb
->hash->{foo},
'bar'
;
is
$mb
->hash->{bin},
'foo'
;
{
local
@ARGV
= (
'--hash'
,
'foo=bar'
,
'--hash'
,
'bin=foo'
,
);
ok
$mb
= MBSub->new(
module_name
=>
$dist
->name );
}
can_ok
$mb
,
'hash'
;
isa_ok
$mb
->hash,
'HASH'
;
is
$mb
->hash->{foo},
'bar'
;
is
$mb
->hash->{bin},
'foo'
;
ok
$mb
= MBSub2->new(
module_name
=>
$dist
->name );
isa_ok
$mb
,
'Module::Build'
;
isa_ok
$mb
,
'MBSub2'
;
ok
$mb
->valid_property(
'bar'
);
can_ok
$mb
,
'bar'
;
is
$mb
->bar,
'yow'
;
}
{
ok
my
$mb
= Module::Build->new(
module_name
=>
$dist
->name,
license
=>
'perl'
,
meta_add
=> {
foo
=>
'bar'
},
conflicts
=> {
'Foo::Barxx'
=> 0},
);
my
%data
;
$mb
->prepare_metadata( \
%data
);
is
$data
{foo},
'bar'
;
$mb
->meta_merge(
foo
=>
'baz'
);
$mb
->prepare_metadata( \
%data
);
is
$data
{foo},
'baz'
;
$mb
->meta_merge(
conflicts
=> {
'Foo::Fooxx'
=> 0});
$mb
->prepare_metadata( \
%data
);
is_deeply
$data
{conflicts}, {
'Foo::Barxx'
=> 0,
'Foo::Fooxx'
=> 0};
$mb
->meta_add(
conflicts
=> {
'Foo::Bazxx'
=> 0});
$mb
->prepare_metadata( \
%data
);
is_deeply
$data
{conflicts}, {
'Foo::Bazxx'
=> 0,
'Foo::Fooxx'
=> 0};
}
{
my
$ans
;
local
$ENV
{PERL_MM_USE_DEFAULT};
local
$^W = 0;
local
*{Module::Build::_readline} =
sub
{
'y'
};
ok
my
$mb
= Module::Build->new(
module_name
=>
$dist
->name,
license
=>
'perl'
,
);
eval
{
$mb
->prompt() };
like $@,
qr/called without a prompt/
,
'prompt() requires a prompt'
;
eval
{
$mb
->y_n() };
like $@,
qr/called without a prompt/
,
'y_n() requires a prompt'
;
eval
{
$mb
->y_n(
'Prompt?'
,
'invalid default'
) };
like $@,
qr/Invalid default/
,
"y_n() requires a default of 'y' or 'n'"
;
$ENV
{PERL_MM_USE_DEFAULT} = 1;
eval
{
$mb
->y_n(
'Is this a question?'
) };
print
"\n"
;
like $@,
qr/ERROR:/
,
'Do not allow default-less y_n() for unattended builds'
;
eval
{
$ans
=
$mb
->prompt(
'Is this a question?'
) };
print
"\n"
;
like $@,
qr/ERROR:/
,
'Do not allow default-less prompt() for unattended builds'
;
{
local
*{Module::Build::_is_interactive} =
sub
{ 1 };
$ENV
{PERL_MM_USE_DEFAULT} = 0;
$ans
=
$mb
->prompt(
'Is this a question?'
);
print
"\n"
;
is
$ans
,
'y'
,
"prompt() doesn't require default for interactive builds"
;
$ans
=
$mb
->y_n(
'Say yes'
);
print
"\n"
;
ok
$ans
,
"y_n() doesn't require default for interactive build"
;
*{Module::Build::_readline} =
sub
{
''
};
$ans
=
$mb
->prompt(
"Is this a question"
);
is
$ans
,
''
,
"default for prompt() without a default is ''"
;
$ans
=
$mb
->prompt(
"Is this a question"
,
'y'
);
is
$ans
,
'y'
,
" prompt() with a default"
;
$ans
=
$mb
->y_n(
"Is this a question"
,
'y'
);
ok
$ans
,
" y_n() with a default"
;
my
@ans
=
$mb
->prompt(
"Is this a question"
,
undef
);
is_deeply([
@ans
], [
undef
],
" prompt() with undef() default"
);
}
}
$dist
->remove;