| 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 => 30; |
| 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", 8) unless eval { require version }; |
| 168 | version->import; |
| 169 | |
| 170 | my $version = version->new("1.2.3"); |
| 171 | $warnings = ''; |
| 172 | ok eval { |
| 173 | $mm = WriteMakefile( |
| 174 | NAME => 'Big::Dummy', |
| 175 | VERSION => $version, |
| 176 | ); |
| 177 | } || diag $@; |
| 178 | is( $warnings, '' ); |
| 179 | isa_ok( $mm->{VERSION}, 'version' ); |
| 180 | is( $mm->{VERSION}, $version ); |
| 181 | |
| 182 | $warnings = ''; |
| 183 | $version = qv('1.2.3'); |
| 184 | ok eval { |
| 185 | $mm = WriteMakefile( |
| 186 | NAME => 'Big::Dummy', |
| 187 | VERSION => $version, |
| 188 | ); |
| 189 | } || diag $@; |
| 190 | is( $warnings, '' ); |
| 191 | isa_ok( $mm->{VERSION}, 'version' ); |
| 192 | is( $mm->{VERSION}, $version ); |
| 193 | } |
| 194 | } |