The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use utf8;
use Test::More;
use Test::Module::Build::Pluggable;
use Module::Build::Pluggable::CPANfile;
use JSON;

my $test = Test::Module::Build::Pluggable->new();
$test->write_file('Build.PL', <<'...');
use strict;
use Module::Build::Pluggable (
    'CPANfile',
);

my $builder = Module::Build::Pluggable->new(
    dist_name => 'Eg',
    dist_version => 0.01,
    dist_abstract => 'test',
    dynamic_config => 0,
    module_name => 'Eg',
    requires => {},
    provides => {},
    author => 1,
    dist_author => 'test',
);
$builder->create_build_script();
...

$test->write_file('cpanfile', <<'...');
requires 'LWP::UserAgent' => '6.02';
requires 'HTTP::Message'  => '6.04'; 
on 'test' => sub {
   requires 'Test::More'     => '0.98';
   requires 'Test::Requires' => '0.06';
};
...

$test->run_build_pl();
my $meta = $test->read_file('MYMETA.json');
ok($meta);
my $spec = decode_json($meta);

is_deeply( $spec->{prereqs}{build}, {
    requires => {
        'Test::More'     => '0.98',
        'Test::Requires' => '0.06',
        'Module::Build::Pluggable::CPANfile' => $Module::Build::Pluggable::CPANfile::VERSION,
    }
});

is_deeply( $spec->{prereqs}{configure}, {
    requires => {
        'Module::Build::Pluggable::CPANfile' => $Module::Build::Pluggable::CPANfile::VERSION,
    }
});

is_deeply( $spec->{prereqs}{runtime}, {
    requires => {
        'LWP::UserAgent' => '6.02',
        'HTTP::Message'  => '6.04', 
    }
});

done_testing();