#!/usr/bin/perl -w
blib_load(
'Module::Build'
);
blib_load(
'Module::Build::ConfigData'
);
if
( Module::Build::ConfigData->feature(
'manpage_support'
) ) {
plan
tests
=> 33;
}
else
{
plan
skip_all
=>
'manpage_support feature is not enabled'
;
}
my
$cwd
= Cwd::cwd;
my
$tmp
= MBTest->tmpdir;
my
$dist
= DistGen->new(
dir
=>
$tmp
);
$dist
->add_file(
'bin/nopod.pl'
,
<<'---' );
#!perl -w
print "sample script without pod to test manifypods action\n";
---
$dist
->add_file(
'bin/haspod.pl'
,
<<'---' );
#!perl -w
print "Hello, world";
__END__
=head1 NAME
haspod.pl - sample script with pod to test manifypods action
=cut
---
$dist
->add_file(
'lib/Simple/NoPod.pm'
,
<<'---' );
package Simple::NoPod;
1;
---
$dist
->add_file(
'lib/Simple/AllPod.pod'
,
<<'---' );
=head1 NAME
Simple::AllPod - Pure POD
=head1 AUTHOR
Simple Man <simple@example.com>
=cut
---
for
([
1
=>
".pod"
], [
2
=>
".pm"
], [
3
=>
".pl"
], [
4
=>
""
]) {
$dist
->add_file(
"docs/myapp$_->[0]$_->[1]"
,
<<"---" );
=head1 NAME
myapp$_->[0] - Pure POD
=head1 AUTHOR
Simple Man <simple\@example.com>
=cut
1;
---
}
$dist
->regen;
$dist
->chdir_in;
my
$destdir
= catdir(
$cwd
,
't'
,
'install_test'
. $$);
my
$mb
= Module::Build->new(
module_name
=>
$dist
->name,
install_base
=>
$destdir
,
bindoc_dirs
=> [
'bin'
,
'docs'
],
scripts
=> [ File::Spec->catfile(
'bin'
,
'nopod.pl'
),
File::Spec->catfile(
'bin'
,
'haspod.pl'
) ],
installdirs
=>
'site'
,
config
=> {
installsiteman1dir
=> catdir(
$tmp
,
'site'
,
'man'
,
'man1'
),
installsiteman3dir
=> catdir(
$tmp
,
'site'
,
'man'
,
'man3'
),
}
);
$mb
->add_to_cleanup(
$destdir
);
is(
ref
$mb
->{properties}->{bindoc_dirs},
'ARRAY'
,
'bindoc_dirs'
);
is(
ref
$mb
->{properties}->{libdoc_dirs},
'ARRAY'
,
'libdoc_dirs'
);
my
%man
= (
sep
=>
$mb
->manpage_separator,
dir1
=>
'man1'
,
dir3
=>
'man3'
,
ext1
=>
$mb
->config(
'man1ext'
),
ext3
=>
$mb
->config(
'man3ext'
),
);
my
%distro
= (
'bin/nopod.pl'
=>
''
,
'bin/haspod.pl'
=>
"haspod.pl.$man{ext1}"
,
'lib/Simple.pm'
=>
"Simple.$man{ext3}"
,
'lib/Simple/NoPod.pm'
=>
''
,
'lib/Simple/AllPod.pod'
=>
"Simple$man{sep}AllPod.$man{ext3}"
,
'docs/myapp1.pod'
=>
"myapp1.pod.$man{ext1}"
,
'docs/myapp2.pm'
=>
"myapp2.pm.$man{ext1}"
,
'docs/myapp3.pl'
=>
"myapp3.pl.$man{ext1}"
,
'docs/myapp4'
=>
"myapp4.$man{ext1}"
,
);
%distro
=
map
{
$mb
->localize_file_path(
$_
),
$distro
{
$_
}}
keys
%distro
;
my
$lib_path
=
$mb
->localize_dir_path(
'lib'
);
$lib_path
=~ s/\]//
if
$^O eq
'VMS'
;
$mb
->dispatch(
'build'
);
eval
{
$mb
->dispatch(
'docs'
)};
is $@,
''
;
while
(
my
(
$from
,
$v
) =
each
%distro
) {
if
(!
$v
) {
ok !
$mb
->contains_pod(
$from
),
"$from should not contain POD"
;
next
;
}
my
$to
= File::Spec->catfile(
'blib'
, (
$from
=~ /^[\.\/\[]
*lib
/ ?
'libdoc'
:
'bindoc'
),
$v
);
ok
$mb
->contains_pod(
$from
),
"$from should contain POD"
;
ok -e
$to
,
"Created $to manpage"
;
}
$mb
->dispatch(
'install'
);
while
(
my
(
$from
,
$v
) =
each
%distro
) {
next
unless
$v
;
my
$to
= File::Spec->catfile
(
$destdir
,
'man'
,
$man
{(
$from
=~ /^\Q
$lib_path
\E/ ?
'dir3'
:
'dir1'
)},
$v
);
ok -e
$to
,
"Created $to manpage"
;
}
$mb
->dispatch(
'realclean'
);
$dist
->regen(
clean
=> 1 );
my
$mb2
= Module::Build->new(
module_name
=>
$dist
->name,
libdoc_dirs
=> [
qw( foo bar baz )
],
);
is(
$mb2
->{properties}->{libdoc_dirs}->[0],
'foo'
,
'override libdoc_dirs'
);
ok
$mb2
->get_action_docs(
'build'
);
ok !
eval
{
$mb2
->get_action_docs(
'foo'
)};
foreach
(
'testcover'
,
'disttest'
) {
my
$docs
=
$mb2
->get_action_docs(
$_
);
like
$docs
,
qr/=item $_/
;
unlike
$docs
,
qr/\n=/
,
$docs
;
}