#!perl
use strict;
BEGIN{ if (not $] < 5.006) { require warnings; warnings->import } }
select(STDERR); $|=1;
select(STDOUT); $|=1;
use Test::More;
use t::Frontend;
use t::Helper;
use IO::CaptureOutput qw/capture/;
my @good_cases = (
{
label => "empty input",
option => "edit_report",
input => "",
output => {
default => "no",
}
},
{
label => "action (by itself)",
option => "edit_report",
input => "yes",
output => {
default => "yes",
},
},
{
label => "grade (by itself)",
option => "edit_report",
input => "fail",
output => {
"fail" => "yes",
},
},
{
label => "default:action",
option => "edit_report",
input => "default:no",
output => {
default => "no",
},
},
{
label => "grade:action",
option => "edit_report",
input => "fail:yes",
output => {
"fail" => "yes",
},
},
{
label => "grade:action action",
option => "edit_report",
input => "fail:yes no",
output => {
"fail" => "yes",
default => "no",
},
},
{
label => "grade:action action grade:action",
option => "edit_report",
input => "fail:yes no fail:no",
output => {
"fail" => "no",
default => "no",
},
},
{
label => "grade:action action grade2:action",
option => "edit_report",
input => "fail:yes no na:no",
output => {
"fail" => "yes",
"na" => "no",
default => "no",
},
},
{
label => "grade/grade2:action",
option => "edit_report",
input => "fail/na:ask/yes",
output => {
"fail" => "ask/yes",
"na" => "ask/yes",
},
},
{
label => "grade/grade2",
option => "edit_report",
input => "fail/na",
output => {
"fail" => "yes",
"na" => "yes",
},
},
);
my @bad_cases = (
{
label => "bad grade",
option => "edit_report",
input => "failed",
output => undef,
msg =>
"/ignoring invalid grade:action 'failed' for 'edit_report'/",
},
{
label => "bad action",
option => "edit_report",
input => "fail:run-away",
output => undef,
msg =>
"/ignoring invalid action 'run-away' in 'fail:run-away' for 'edit_report'/",
},
);
plan tests => 1 + 2 * ( @good_cases + @bad_cases );
#--------------------------------------------------------------------------#
# Begin tests
#--------------------------------------------------------------------------#
require_ok( "CPAN::Reporter::Config" );
for my $case ( @good_cases, @bad_cases ) {
my ($got, $stdout, $stderr);
capture sub {
$got = CPAN::Reporter::Config::_validate_grade_action_pair(
$case->{option}, $case->{input}
);
}, \$stdout, \$stderr;
is_deeply( $got, $case->{output}, $case->{label} );
if ( $case->{msg} ) {
like( $stdout, $case->{msg}, $case->{label} );
}
else {
is( $stdout, '', "No warnings seen" );
}
}