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