| #!/usr/bin/perl -w |
| |
| # Things like the CPAN shell rely on the "MakeMaker Parameters" section of the |
| # Makefile to learn a module's dependencies so we'd damn well better test it. |
| |
| BEGIN { |
| unshift @INC, 't/lib'; |
| } |
| |
| use strict; |
| use warnings; |
| |
| use ExtUtils::MakeMaker; |
| use Test::More; |
| |
| my $mm = bless {}, "MM"; |
| |
| sub extract_params { |
| my $text = join "\n", @_; |
| |
| $text =~ s{^\s* \# \s+ MakeMaker\ Parameters: \s*\n}{}x; |
| $text =~ s{^#}{}gms; |
| $text =~ s{\n}{,\n}g; |
| |
| no strict 'subs'; |
| return { eval "$text" }; |
| } |
| |
| sub test_round_trip { |
| my $args = shift; |
| my $want = @_ ? shift : $args; |
| |
| my $have = extract_params($mm->_MakeMaker_Parameters_section($args)); |
| |
| local $Test::Builder::Level = $Test::Builder::Level + 1; |
| is_deeply $have, $want or diag explain $have, "\n", $want; |
| } |
| |
| is join("", $mm->_MakeMaker_Parameters_section()), <<'EXPECT', "nothing"; |
| # MakeMaker Parameters: |
| EXPECT |
| |
| test_round_trip({ NAME => "Foo" }); |
| test_round_trip({ NAME => "Foo", PREREQ_PM => { "Foo::Bar" => 0 } }); |
| test_round_trip({ NAME => "Foo", PREREQ_PM => { "Foo::Bar" => 1.23 } }); |
| |
| # Test the special case for BUILD_REQUIRES |
| { |
| my $have = { |
| NAME => "Foo", |
| PREREQ_PM => { "Foo::Bar" => 1.23 }, |
| BUILD_REQUIRES => { "Baz" => 0.12 }, |
| }; |
| |
| my $want = { |
| NAME => "Foo", |
| PREREQ_PM => { |
| "Foo::Bar" => 1.23, |
| "Baz" => 0.12, |
| }, |
| BUILD_REQUIRES => { "Baz" => 0.12 }, |
| }; |
| |
| test_round_trip( $have, $want ); |
| } |
| |
| done_testing(); |
| |