The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use 5.006;
use strict;
use warnings;
use Capture::Tiny qw/capture/;
use File::Spec::Functions qw/catfile/;
use Test::Deep;
use Test::More 0.92;

use App::mymeta_requires;

# Everything listed in t/data/MYMETA.json file
# We should never have X::Configure::Requires because those would
# have to be satisfied before MYMETA is created
my %all_reqs = map { $_ => 1 } qw(
  X::Runtime::Requires
  X::Runtime::Recommends
  X::Runtime::Suggests
  X::Build::Requires
  X::Test::Requires
  X::Develop::Requires
);

my @cases = (
  {
    options =>  [],
    remove =>   [ qw/X::Develop::Requires/ ],
  },
  {
    options =>  [ qw/--develop/ ],
    remove =>   [ ],
  },
  {
    options =>  [ qw/--no-suggests/ ],
    remove =>   [ qw/X::Runtime::Suggests X::Develop::Requires/ ],
  },
  {
    options =>  [ qw/--no-recommends/ ],
    remove =>   [ qw/X::Runtime::Recommends X::Develop::Requires/ ],
  },
  {
    options =>  [ qw/--no-build --develop/ ],
    remove =>   [ qw/X::Build::Requires/ ],
  },
);

for my $c ( @cases ) {
  my @options = @{$c->{options}};
  my $label = @options ? join(" ", @options) : "(default)";
  local @ARGV = ('--file', catfile(qw/t data MYMETA.json/), @options);
  my $app = App::mymeta_requires->new;
  my %expected = %all_reqs;
  delete $expected{$_} for @{ $c->{remove} };
  my $output = capture { $app->run };
  cmp_deeply( [split "\n", $output], bag(sort keys %expected), $label );
}

done_testing;
#
# This file is part of App-mymeta_requires
#
# This software is Copyright (c) 2011 by David Golden.
#
# This is free software, licensed under:
#
#   The Apache License, Version 2.0, January 2004
#