Upgrade to ExtUtils::MakeMaker 6.37_02
[p5sagit/p5-mst-13.2.git] / lib / ExtUtils / t / writemakefile_args.t
1 #!/usr/bin/perl -w
2
3 # This is a test of the verification of the arguments to
4 # WriteMakefile.
5
6 BEGIN {
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
16 use strict;
17 use Test::More tests => 28;
18
19 use TieOut;
20 use MakeMaker::Test::Utils;
21 use MakeMaker::Test::Setup::BFD;
22
23 use ExtUtils::MakeMaker;
24
25 chdir 't';
26
27 perl_lib();
28
29 ok( setup_recurs(), 'setup' );
30 END {
31     ok( chdir File::Spec->updir );
32     ok( teardown_recurs(), 'teardown' );
33 }
34
35 ok( chdir 'Big-Dummy', "chdir'd to Big-Dummy" ) ||
36   diag("chdir failed: $!");
37
38 {
39     ok( my $stdout = tie *STDOUT, 'TieOut' );
40     my $warnings = '';
41     local $SIG{__WARN__} = sub {
42         $warnings .= join '', @_;
43     };
44
45     my $mm;
46
47     eval {
48         $mm = WriteMakefile(
49             NAME            => 'Big::Dummy',
50             VERSION_FROM    => 'lib/Big/Dummy.pm',
51             MAN3PODS        => ' ', # common mistake
52         );
53     };
54
55     is( $warnings, <<VERIFY );
56 WARNING: MAN3PODS takes a HASH reference not a string/number.
57          Please inform the author.
58 VERIFY
59
60     $warnings = '';
61     eval {
62         $mm = WriteMakefile(
63             NAME            => 'Big::Dummy',
64             VERSION_FROM    => 'lib/Big/Dummy.pm',
65             AUTHOR          => sub {},
66         );
67     };
68
69     is( $warnings, <<VERIFY );
70 WARNING: AUTHOR takes a string/number not a CODE reference.
71          Please inform the author.
72 VERIFY
73
74     # LIBS accepts *both* a string or an array ref.  The first cut of
75     # our verification did not take this into account.
76     $warnings = '';
77     $mm = WriteMakefile(
78         NAME            => 'Big::Dummy',
79         VERSION_FROM    => 'lib/Big/Dummy.pm',
80         LIBS            => '-lwibble -lwobble',
81     );
82
83     # We'll get warnings about the bogus libs, that's ok.
84     unlike( $warnings, qr/WARNING: .* takes/ );
85     is_deeply( $mm->{LIBS}, ['-lwibble -lwobble'] );
86
87     $warnings = '';
88     $mm = WriteMakefile(
89         NAME            => 'Big::Dummy',
90         VERSION_FROM    => 'lib/Big/Dummy.pm',
91         LIBS            => ['-lwibble', '-lwobble'],
92     );
93
94     # We'll get warnings about the bogus libs, that's ok.
95     unlike( $warnings, qr/WARNING: .* takes/ );
96     is_deeply( $mm->{LIBS}, ['-lwibble', '-lwobble'] );
97
98     $warnings = '';
99     eval {
100         $mm = WriteMakefile(
101             NAME            => 'Big::Dummy',
102             VERSION_FROM    => 'lib/Big/Dummy.pm',
103             LIBS            => { wibble => "wobble" },
104         );
105     };
106
107     # We'll get warnings about the bogus libs, that's ok.
108     like( $warnings, qr{^WARNING: LIBS takes a ARRAY reference or string/number not a HASH reference}m );
109
110
111     $warnings = '';
112     $mm = WriteMakefile(
113         NAME            => 'Big::Dummy',
114         WIBBLE          => 'something',
115         wump            => { foo => 42 },
116     );
117
118     like( $warnings, qr{^WARNING: WIBBLE is not a known parameter.\n}m );
119     like( $warnings, qr{^WARNING: wump is not a known parameter.\n}m );
120
121     is( $mm->{WIBBLE}, 'something' );
122     is_deeply( $mm->{wump}, { foo => 42 } );
123
124
125     # Test VERSION
126     $warnings = '';
127     eval {
128         $mm = WriteMakefile(
129         NAME       => 'Big::Dummy',
130         VERSION    => [1,2,3],
131         );
132     };
133     like( $warnings, qr{^WARNING: VERSION takes a version object or string/number} );
134
135     $warnings = '';
136     eval {
137         $mm = WriteMakefile(
138         NAME       => 'Big::Dummy',
139         VERSION    => 1.002_003,
140         );
141     };
142     is( $warnings, '' );
143     is( $mm->{VERSION}, '1.002003' );
144
145     $warnings = '';
146     eval {
147         $mm = WriteMakefile(
148         NAME       => 'Big::Dummy',
149         VERSION    => '1.002_003',
150         );
151     };
152     is( $warnings, '' );
153     is( $mm->{VERSION}, '1.002_003' );
154
155
156     $warnings = '';
157     eval {
158         $mm = WriteMakefile(
159         NAME       => 'Big::Dummy',
160         VERSION    => bless {}, "Some::Class",
161         );
162     };
163     like( $warnings, '/^WARNING: VERSION takes a version object or string/number not a Some::Class object/' );
164
165
166     SKIP: {
167         skip("Can't test version objects",6) unless eval { require version };
168         version->import;
169
170         my $version = version->new("1.2.3");
171         $warnings = '';
172         eval {
173             $mm = WriteMakefile(
174             NAME       => 'Big::Dummy',
175             VERSION    => $version,
176             );
177         };
178         is( $warnings, '' );
179         isa_ok( $mm->{VERSION}, 'version' );
180         is( $mm->{VERSION}, $version );
181
182         $warnings = '';
183         $version = qv('1.2.3');
184         eval {
185             $mm = WriteMakefile(
186             NAME       => 'Big::Dummy',
187             VERSION    => $version,
188             );
189         };
190         is( $warnings, '' );
191         isa_ok( $mm->{VERSION}, 'version' );
192         is( $mm->{VERSION}, $version );
193     }
194 }