1898184e3Ssthen#!/usr/bin/perl -w 2898184e3Ssthen 3898184e3Ssthen# This is a test checking various aspects of the optional argument 4898184e3Ssthen# MIN_PERL_VERSION to WriteMakefile. 5898184e3Ssthen 6898184e3SsthenBEGIN { 7898184e3Ssthen unshift @INC, 't/lib'; 8898184e3Ssthen} 9898184e3Ssthen 10898184e3Ssthenuse strict; 11*eac174f2Safresh1use warnings; 12898184e3Ssthenuse TieOut; 13898184e3Ssthenuse MakeMaker::Test::Utils; 14b8851fccSafresh1use Config; 15b8851fccSafresh1use ExtUtils::MM; 169f11ffb7Safresh1use Test::More 179f11ffb7Safresh1 !MM->can_run(make()) && $ENV{PERL_CORE} && $Config{'usecrosscompile'} 18b8851fccSafresh1 ? (skip_all => "cross-compiling and make not available") 199f11ffb7Safresh1 : (tests => 19); 20898184e3Ssthenuse File::Path; 21b8851fccSafresh1use File::Temp qw[tempdir]; 22898184e3Ssthen 23898184e3Ssthenuse ExtUtils::MakeMaker; 249f11ffb7Safresh1my $CM = eval { require CPAN::Meta; }; 259f11ffb7Safresh1 269f11ffb7Safresh1my $DIRNAME = 'Multiple-Authors'; 279f11ffb7Safresh1my %FILES = ( 289f11ffb7Safresh1 'Makefile.PL' => <<'END', 299f11ffb7Safresh1use ExtUtils::MakeMaker; 309f11ffb7Safresh1WriteMakefile( 319f11ffb7Safresh1 NAME => 'Multiple::Authors', 329f11ffb7Safresh1 AUTHOR => ['John Doe <jd@example.com>', 'Jane Doe <jd@example.com>'], 339f11ffb7Safresh1 VERSION_FROM => 'lib/Multiple/Authors.pm', 349f11ffb7Safresh1 PREREQ_PM => { strict => 0 }, 359f11ffb7Safresh1); 369f11ffb7Safresh1END 379f11ffb7Safresh1 389f11ffb7Safresh1 'lib/Multiple/Authors.pm' => <<'END', 399f11ffb7Safresh1package Multiple::Authors; 409f11ffb7Safresh1 419f11ffb7Safresh1$VERSION = 0.05; 429f11ffb7Safresh1 439f11ffb7Safresh1=head1 NAME 449f11ffb7Safresh1 459f11ffb7Safresh1Multiple::Authors - several authors 469f11ffb7Safresh1 479f11ffb7Safresh1=cut 489f11ffb7Safresh1 499f11ffb7Safresh11; 509f11ffb7Safresh1END 519f11ffb7Safresh1 529f11ffb7Safresh1); 53898184e3Ssthen 54898184e3Ssthen# avoid environment variables interfering with our make runs 559f11ffb7Safresh1delete @ENV{qw(PERL_JSON_BACKEND CPAN_META_JSON_BACKEND PERL_YAML_BACKEND)} if $ENV{PERL_CORE}; 569f11ffb7Safresh1delete @ENV{qw(LIB MAKEFLAGS PERL_CORE)}; 57898184e3Ssthen 58898184e3Ssthenmy $perl = which_perl(); 59898184e3Ssthenmy $make = make_run(); 60898184e3Ssthenmy $makefile = makefile_name(); 61898184e3Ssthen 629f11ffb7Safresh1chdir 't'; 639f11ffb7Safresh1perl_lib; # sets $ENV{PERL5LIB} relative to t/ 649f11ffb7Safresh1 659f11ffb7Safresh1my $tmpdir = tempdir( DIR => '../t', CLEANUP => 1 ); 669f11ffb7Safresh1use Cwd; my $cwd = getcwd; END { chdir $cwd } # so File::Temp can cleanup 67b8851fccSafresh1chdir $tmpdir; 68898184e3Ssthen 699f11ffb7Safresh1hash2files($DIRNAME, \%FILES); 70898184e3SsthenEND { 71898184e3Ssthen ok( chdir(File::Spec->updir), 'leaving dir' ); 729f11ffb7Safresh1 ok( rmtree($DIRNAME), 'teardown' ); 73898184e3Ssthen} 74898184e3Ssthen 759f11ffb7Safresh1ok( chdir $DIRNAME, "entering dir $DIRNAME" ) || 76898184e3Ssthen diag("chdir failed: $!"); 77898184e3Ssthen 78898184e3Ssthennote "argument verification"; { 79898184e3Ssthen my $stdout = tie *STDOUT, 'TieOut'; 80898184e3Ssthen ok( $stdout, 'capturing stdout' ); 81898184e3Ssthen my $warnings = ''; 82898184e3Ssthen local $SIG{__WARN__} = sub { 83898184e3Ssthen $warnings .= join '', @_; 84898184e3Ssthen }; 85898184e3Ssthen 86898184e3Ssthen eval { 87898184e3Ssthen WriteMakefile( 88898184e3Ssthen NAME => 'Multiple::Authors', 89898184e3Ssthen AUTHOR => ['John Doe <jd@example.com>', 'Jane Doe <jd@example.com>'], 90898184e3Ssthen ); 91898184e3Ssthen }; 92898184e3Ssthen is( $warnings, '', 'arrayref in AUTHOR does not trigger a warning' ); 93898184e3Ssthen is( $@, '', ' nor a hard failure' ); 94898184e3Ssthen 95898184e3Ssthen} 96898184e3Ssthen 97898184e3Ssthen 98898184e3Ssthennote "argument verification via CONFIGURE"; { 99898184e3Ssthen my $stdout = tie *STDOUT, 'TieOut'; 100898184e3Ssthen ok( $stdout, 'capturing stdout' ); 101898184e3Ssthen my $warnings = ''; 102898184e3Ssthen local $SIG{__WARN__} = sub { 103898184e3Ssthen $warnings .= join '', @_; 104898184e3Ssthen }; 105898184e3Ssthen 106898184e3Ssthen eval { 107898184e3Ssthen WriteMakefile( 108898184e3Ssthen NAME => 'Multiple::Authors', 109898184e3Ssthen CONFIGURE => sub { 110898184e3Ssthen return {AUTHOR => 'John Doe <jd@example.com>',}; 111898184e3Ssthen }, 112898184e3Ssthen ); 113898184e3Ssthen }; 114898184e3Ssthen is( $warnings, '', 'scalar in AUTHOR inside CONFIGURE does not trigger a warning' ); 115898184e3Ssthen is( $@, '', ' nor a hard failure' ); 116898184e3Ssthen 117898184e3Ssthen} 118898184e3Ssthen 119898184e3Ssthen 120898184e3Ssthennote "generated files verification"; { 121898184e3Ssthen unlink $makefile; 122898184e3Ssthen my @mpl_out = run(qq{$perl Makefile.PL}); 123898184e3Ssthen END { unlink $makefile, makefile_backup() } 124898184e3Ssthen 125898184e3Ssthen cmp_ok( $?, '==', 0, 'Makefile.PL exiting normally' ) || diag(@mpl_out); 126898184e3Ssthen ok( -e $makefile, 'Makefile present' ); 127898184e3Ssthen} 128898184e3Ssthen 129898184e3Ssthen 130898184e3Ssthennote "ppd output"; { 131898184e3Ssthen my $ppd_file = 'Multiple-Authors.ppd'; 132898184e3Ssthen my @make_out = run(qq{$make ppd}); 133898184e3Ssthen END { unlink $ppd_file } 134898184e3Ssthen 135898184e3Ssthen cmp_ok( $?, '==', 0, 'Make ppd exiting normally' ) || diag(@make_out); 136898184e3Ssthen 137898184e3Ssthen my $ppd_html = slurp($ppd_file); 138898184e3Ssthen ok( defined($ppd_html), ' .ppd file present' ); 139898184e3Ssthen 140898184e3Ssthen like( $ppd_html, qr{John Doe <jd\@example.com>, Jane Doe <jd\@example.com>}, 141898184e3Ssthen ' .ppd file content good' ); 142898184e3Ssthen} 143898184e3Ssthen 144898184e3Ssthen 1459f11ffb7Safresh1note "META.yml output"; SKIP: { 1469f11ffb7Safresh1 skip 'Failed to load CPAN::Meta', 5 unless $CM; 147898184e3Ssthen my $distdir = 'Multiple-Authors-0.05'; 148898184e3Ssthen $distdir =~ s{\.}{_}g if $Is_VMS; 149898184e3Ssthen 150898184e3Ssthen my $meta_yml = "$distdir/META.yml"; 151898184e3Ssthen my $meta_json = "$distdir/META.json"; 152898184e3Ssthen my @make_out = run(qq{$make metafile}); 1539f11ffb7Safresh1 END { rmtree $distdir if defined $distdir } 154898184e3Ssthen 155898184e3Ssthen cmp_ok( $?, '==', 0, 'Make metafile exiting normally' ) || diag(@make_out); 156898184e3Ssthen 157898184e3Ssthen for my $case ( 158898184e3Ssthen ['META.yml', $meta_yml], 159898184e3Ssthen ['META.json', $meta_json], 160898184e3Ssthen ) { 161898184e3Ssthen my ($label, $meta_name) = @$case; 162898184e3Ssthen ok( 163898184e3Ssthen my $obj = eval { 164898184e3Ssthen CPAN::Meta->load_file($meta_name, {lazy_validation => 0}) 165898184e3Ssthen }, 166898184e3Ssthen "$label validates" 167898184e3Ssthen ); 168898184e3Ssthen is_deeply( [ $obj->authors ], 169898184e3Ssthen [ 170898184e3Ssthen q{John Doe <jd@example.com>}, 171898184e3Ssthen q{Jane Doe <jd@example.com>}, 172898184e3Ssthen ], 173898184e3Ssthen "$label content good" 174898184e3Ssthen ); 175898184e3Ssthen } 176898184e3Ssthen} 177