ExtUtils::MakeMaker 6.55_02
[p5sagit/p5-mst-13.2.git] / lib / ExtUtils / t / min_perl_version.t
CommitLineData
bf87a6a1 1#!/usr/bin/perl -w
2
3# This is a test checking various aspects of the optional argument
4# MIN_PERL_VERSION to WriteMakefile.
5
6BEGIN {
7 if( $ENV{PERL_CORE} ) {
8 chdir 't' if -d 't';
9 @INC = ('../lib', 'lib');
10 }
11 else {
12 unshift @INC, 't/lib';
13 }
14}
15
16use strict;
17use Test::More tests => 33;
18
19use TieOut;
20use MakeMaker::Test::Utils;
21use MakeMaker::Test::Setup::MPV;
22use File::Path;
23
24use ExtUtils::MakeMaker;
25
26# avoid environment variables interfering with our make runs
27delete @ENV{qw(LIB MAKEFLAGS)};
28
29my $perl = which_perl();
30my $make = make_run();
31my $makefile = makefile_name();
32
33chdir 't';
34
35perl_lib();
36
37ok( setup_recurs(), 'setup' );
38END {
39 ok( chdir(File::Spec->updir), 'leaving dir' );
40 ok( teardown_recurs(), 'teardown' );
41}
42
43ok( chdir 'Min-PerlVers', 'entering dir Min-PerlVers' ) ||
44 diag("chdir failed: $!");
45
46{
47 # ----- argument verification -----
48
49 my $stdout = tie *STDOUT, 'TieOut';
50 ok( $stdout, 'capturing stdout' );
51 my $warnings = '';
52 local $SIG{__WARN__} = sub {
53 $warnings .= join '', @_;
54 };
55
56 eval {
57 WriteMakefile(
58 NAME => 'Min::PerlVers',
59 MIN_PERL_VERSION => '5',
60 );
61 };
62 is( $warnings, '', 'MIN_PERL_VERSION=5 does not trigger a warning' );
63 is( $@, '', ' nor a hard failure' );
64
65
66 $warnings = '';
67 eval {
68 WriteMakefile(
69 NAME => 'Min::PerlVers',
70 MIN_PERL_VERSION => '5.4.4',
71 );
72 };
73 is( $warnings, '', 'MIN_PERL_VERSION=X.Y.Z does not trigger a warning' );
74 is( $@, '', ' nor a hard failure' );
75
76
77 $warnings = '';
78 eval {
79 WriteMakefile(
80 NAME => 'Min::PerlVers',
81 MIN_PERL_VERSION => '999999',
82 );
83 };
84 ok( '' ne $warnings, 'MIN_PERL_VERSION=999999 triggers a warning' );
85 is( $warnings,
86 "Warning: Perl version 999999 or higher required. We run $].\n",
87 ' with expected message text' );
88 is( $@, '', ' and without a hard failure' );
89
90 $warnings = '';
91 eval {
92 WriteMakefile(
93 NAME => 'Min::PerlVers',
94 MIN_PERL_VERSION => '999999',
95 PREREQ_FATAL => 1,
96 );
97 };
98 is( $warnings, '', 'MIN_PERL_VERSION=999999 and PREREQ_FATAL: no warning' );
99 is( $@, <<"END", ' correct exception' );
100MakeMaker FATAL: perl version too low for this distribution.
101Required is 999999. We run $].
102END
103
104 $warnings = '';
105 eval {
106 WriteMakefile(
107 NAME => 'Min::PerlVers',
108 MIN_PERL_VERSION => 'foobar',
109 );
110 };
111 ok( '' ne $warnings, 'MIN_PERL_VERSION=foobar triggers a warning' );
112 is( $warnings, <<'END', ' with expected message text' );
113Warning: MIN_PERL_VERSION is not in a recognized format.
114Recommended is a quoted numerical value like '5.005' or '5.008001'.
115END
116
117 is( $@, '', ' and without a hard failure' );
118}
119
120
121# ----- PREREQ_PRINT output -----
122{
123 my $prereq_out = run(qq{$perl Makefile.PL "PREREQ_PRINT=1"});
124 is( $?, 0, 'PREREQ_PRINT exiting normally' );
125 my $prereq_out_sane = $prereq_out =~ /^\s*\$PREREQ_PM\s*=/;
126 ok( $prereq_out_sane, ' and talking like we expect' ) ||
127 diag($prereq_out);
128
129 SKIP: {
130 skip 'not going to evaluate rubbish', 3 if !$prereq_out_sane;
131
132 package _Prereq::Print::WithMPV; ## no critic
b6d6132c 133 our($PREREQ_PM, $BUILD_REQUIRES, $MIN_PERL_VERSION, $ERR);
bf87a6a1 134 $ERR = '';
135 eval {
136 eval $prereq_out; ## no critic
137 $ERR = $@;
138 };
139 ::is( $@ . $ERR, '', 'prereqs evaluable' );
140 ::is_deeply( $PREREQ_PM, { strict => 0 }, ' and looking correct' );
141 ::is( $MIN_PERL_VERSION, '5.005', 'min version also correct' );
142 }
143}
144
145
146# ----- PRINT_PREREQ output -----
147{
148 my $prereq_out = run(qq{$perl Makefile.PL "PRINT_PREREQ=1"});
149 is( $?, 0, 'PRINT_PREREQ exiting normally' );
150 ok( $prereq_out !~ /^warning/i, ' and not complaining loudly' );
151 like( $prereq_out,
152 qr/^perl\(perl\) \s* >= 5\.005 \s+ perl\(strict\) \s* >= \s* 0 \s*$/x,
153 'dump has prereqs and perl version' );
154}
155
156
157# ----- generated files verification -----
158{
159 unlink $makefile;
160 my @mpl_out = run(qq{$perl Makefile.PL});
161 END { unlink $makefile, makefile_backup() }
162
163 cmp_ok( $?, '==', 0, 'Makefile.PL exiting normally' ) || diag(@mpl_out);
164 ok( -e $makefile, 'Makefile present' );
165}
166
167
168# ----- ppd output -----
169{
170 my $ppd_file = 'Min-PerlVers.ppd';
171 my @make_out = run(qq{$make ppd});
172 END { unlink $ppd_file }
173
174 cmp_ok( $?, '==', 0, 'Make ppd exiting normally' ) || diag(@make_out);
175
176 my $ppd_html = slurp($ppd_file);
177 ok( defined($ppd_html), ' .ppd file present' );
178
179 like( $ppd_html, qr{^\s*<PERLCORE VERSION="5,005,0,0" />}m,
180 ' .ppd file content good' );
181}
182
183
184# ----- META.yml output -----
185{
186 my $distdir = 'Min-PerlVers-0.05';
a65cb92d 187 $distdir =~ s{\.}{_}g if $Is_VMS;
188
bf87a6a1 189 my $meta_yml = "$distdir/META.yml";
190 my @make_out = run(qq{$make metafile});
191 END { rmtree $distdir }
192
193 cmp_ok( $?, '==', 0, 'Make metafile exiting normally' ) || diag(@make_out);
194 my $meta = slurp($meta_yml);
195 ok( defined($meta), ' META.yml present' );
196
197 like( $meta, qr{\nrequires:[^\S\n]*\n\s+perl:\s+5\.005\n\s+strict:\s+0\n},
198 ' META.yml content good');
199}
200
201__END__