1#!/usr/bin/perl -w
2
3# This is a test of the verification of the arguments to
4# 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 => 16;
18
19use TieOut;
20use MakeMaker::Test::Utils;
21use MakeMaker::Test::Setup::BFD;
22
23use ExtUtils::MakeMaker;
24
25chdir 't';
26
27perl_lib();
28
29ok( setup_recurs(), 'setup' );
30END {
31    ok( chdir File::Spec->updir );
32    ok( teardown_recurs(), 'teardown' );
33}
34
35ok( 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 );
56WARNING: MAN3PODS takes a hash reference not a string/number.
57         Please inform the author.
58VERIFY
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 );
70WARNING: AUTHOR takes a string/number not a code reference.
71         Please inform the author.
72VERIFY
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