xref: /openbsd-src/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/several_authors.t (revision eac174f2741a08d8deb8aae59a7f778ef9b5d770)
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 &lt;jd\@example.com&gt;, Jane Doe &lt;jd\@example.com&gt;},
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