use strict;
use warnings;
use utf8;
use Test::More;
use Test::Module::Build::Pluggable;
use Module::Build::Pluggable::CPANfile;
use version;
use Capture::Tiny ':all';
use File::Spec;

if ( $^O eq 'MSWin32' ) {
    plan skip_all => 'Skip test on Windows';
}

require Module::Build;
my $support_test_requries = 
    ( version->parse($Module::Build::VERSION) >= version->parse('0.4004') ) ? 1 : 0;

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';
suggests 'JSON' => '2.53';
on 'test' => sub {
   requires 'Test::More'     => '0.98';
   requires 'Test::Requires' => '0.06';
};
...
$test->write_file('MANIFEST', <<'...');
Build.PL
MANIFEST
...

my $stderr = capture_stderr { $test->run_build_pl() };
like $stderr, qr/not support 'suggests'/;
my $meta = $test->read_file(File::Spec->catfile('_build','prereqs'));
ok($meta);
my $prereqs = eval $meta;

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

SKIP : {
    skip "You have Module::Build < 0.4004",1 if !$support_test_requries;
    is_deeply( $prereqs->{test_requires}, {
        'Test::More'     => '0.98',
        'Test::Requires' => '0.06',
    });
}

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

done_testing();