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