#!/usr/bin/perl -w
BEGIN {
unshift
@INC
,
't/lib'
;
}
!MM->can_run(make()) &&
$ENV
{PERL_CORE} &&
$Config
{
'usecrosscompile'
}
? (
skip_all
=>
"cross-compiling and make not available"
)
: (
tests
=> 19);
my
$DIRNAME
=
'Multiple-Authors'
;
my
%FILES
= (
'Makefile.PL'
=>
<<'END',
use ExtUtils::MakeMaker;
WriteMakefile(
NAME => 'Multiple::Authors',
AUTHOR => ['John Doe <jd@example.com>', 'Jane Doe <jd@example.com>'],
VERSION_FROM => 'lib/Multiple/Authors.pm',
PREREQ_PM => { strict => 0 },
);
END
'lib/Multiple/Authors.pm'
=>
<<'END',
package Multiple::Authors;
$VERSION = 0.05;
=head1 NAME
Multiple::Authors - several authors
=cut
1;
END
);
delete
@ENV
{
qw(PERL_JSON_BACKEND CPAN_META_JSON_BACKEND PERL_YAML_BACKEND)
}
if
$ENV
{PERL_CORE};
delete
@ENV
{
qw(LIB MAKEFLAGS PERL_CORE)
};
my
$perl
= which_perl();
my
$make
= make_run();
my
$makefile
= makefile_name();
chdir
't'
;
perl_lib;
my
$tmpdir
= tempdir(
DIR
=>
'../t'
,
CLEANUP
=> 1 );
use
Cwd;
my
$cwd
= getcwd; END {
chdir
$cwd
}
chdir
$tmpdir
;
hash2files(
$DIRNAME
, \
%FILES
);
END {
ok(
chdir
(File::Spec->updir),
'leaving dir'
);
ok( rmtree(
$DIRNAME
),
'teardown'
);
}
ok(
chdir
$DIRNAME
,
"entering dir $DIRNAME"
) ||
diag(
"chdir failed: $!"
);
note
"argument verification"
; {
my
$stdout
=
tie
*STDOUT
,
'TieOut'
;
ok(
$stdout
,
'capturing stdout'
);
my
$warnings
=
''
;
local
$SIG
{__WARN__} =
sub
{
$warnings
.=
join
''
,
@_
;
};
eval
{
WriteMakefile(
NAME
=>
'Multiple::Authors'
,
AUTHOR
=> [
'John Doe <jd@example.com>'
,
'Jane Doe <jd@example.com>'
],
);
};
is(
$warnings
,
''
,
'arrayref in AUTHOR does not trigger a warning'
);
is( $@,
''
,
' nor a hard failure'
);
}
note
"argument verification via CONFIGURE"
; {
my
$stdout
=
tie
*STDOUT
,
'TieOut'
;
ok(
$stdout
,
'capturing stdout'
);
my
$warnings
=
''
;
local
$SIG
{__WARN__} =
sub
{
$warnings
.=
join
''
,
@_
;
};
eval
{
WriteMakefile(
NAME
=>
'Multiple::Authors'
,
CONFIGURE
=>
sub
{
return
{
AUTHOR
=>
'John Doe <jd@example.com>'
,};
},
);
};
is(
$warnings
,
''
,
'scalar in AUTHOR inside CONFIGURE does not trigger a warning'
);
is( $@,
''
,
' nor a hard failure'
);
}
note
"generated files verification"
; {
unlink
$makefile
;
my
@mpl_out
= run(
qq{$perl Makefile.PL}
);
END {
unlink
$makefile
, makefile_backup() }
cmp_ok( $?,
'=='
, 0,
'Makefile.PL exiting normally'
) || diag(
@mpl_out
);
ok( -e
$makefile
,
'Makefile present'
);
}
note
"ppd output"
; {
my
$ppd_file
=
'Multiple-Authors.ppd'
;
my
@make_out
= run(
qq{$make ppd}
);
END {
unlink
$ppd_file
}
cmp_ok( $?,
'=='
, 0,
'Make ppd exiting normally'
) || diag(
@make_out
);
my
$ppd_html
= slurp(
$ppd_file
);
ok(
defined
(
$ppd_html
),
' .ppd file present'
);
like(
$ppd_html
,
qr{John Doe <jd\@example.com>, Jane Doe <jd\@example.com>}
,
' .ppd file content good'
);
}
note
"META.yml output"
; SKIP: {
skip
'Failed to load CPAN::Meta'
, 5
unless
$CM
;
my
$distdir
=
'Multiple-Authors-0.05'
;
$distdir
=~ s{\.}{_}g
if
$Is_VMS
;
my
$meta_yml
=
"$distdir/META.yml"
;
my
$meta_json
=
"$distdir/META.json"
;
my
@make_out
= run(
qq{$make metafile}
);
END { rmtree
$distdir
if
defined
$distdir
}
cmp_ok( $?,
'=='
, 0,
'Make metafile exiting normally'
) || diag(
@make_out
);
for
my
$case
(
[
'META.yml'
,
$meta_yml
],
[
'META.json'
,
$meta_json
],
) {
my
(
$label
,
$meta_name
) =
@$case
;
ok(
my
$obj
=
eval
{
CPAN::Meta->load_file(
$meta_name
, {
lazy_validation
=> 0})
},
"$label validates"
);
is_deeply( [
$obj
->authors ],
[
q{John Doe <jd@example.com>}
,
q{Jane Doe <jd@example.com>}
,
],
"$label content good"
);
}
}