The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# -*- perl -*-

#use Test::More qw/no_plan/;
use Test::More tests => 27;

use Resource::Loader;

$ENV{RMTESTING}	 = 1;
$ENV{RMVERBOSE}	 = 1;
$ENV{RMCONT}	 = 1;
$ENV{RMSTATES}	 = 'always:sometimes';

ok $m = Resource::Loader->new( testing => 0,
				verbose => 0,
				cont    => 0,
				resources => [ { name => 'never',
						 when => sub { 1 },
						 what => sub { die "should never run this" },
					       },
					       { name => 'sometimes',
						 when => sub { 1 },
						 what => sub { 1 },
					       },
					       { name => 'always',
						 when => sub { 1 },
						 what => sub { 1 },
					       },
					     ],
			      ),		"new( args )";

#--- always, while testing

$loaded = $m->load;
ok ! $loaded, 				'no $loaded';
ok $status = $m->status,		"status()";
ok $m->verbose,			       	"verbose()";
ok $m->testing,			       	"testing()";
ok $m->cont,			       	"cont()";
is $status->{always}, 'notrun',		"always skipped in testing";
is $status->{sometimes}, 'notrun',     	"sometimes skipped in testing";
is $status->{never}, 'skipped',		"never ignored in testing";

#--- sometimes, not testing

$ENV{RMCONT}	 = 1;
$ENV{RMVERBOSE}	 = 0;
$ENV{RMSTATES}	 = 'sometimes';
$ENV{RMTESTING}  = 0;

ok $loaded = $m->load,			"load()";
is_deeply $loaded, { sometimes => 1 },	'$loaded';
ok $status = $m->status,		"status()";
is $status->{always}, 'skipped',       	"always ignored because not present in RMSTATES";
is $status->{sometimes}, 'loaded',     	"sometimes run because present in RMSTATES";
is $status->{never}, 'skipped',		"never ignored because not present in RMSTATES";

#--- sometimes, testing

$ENV{RMCONT}	 = 1;
$ENV{RMVERBOSE}	 = 0;
$ENV{RMSTATES}	 = 'sometimes';
$ENV{RMTESTING}  = 1;

$loaded = $m->load;
ok ! $loaded, 				'no $loaded';
ok $status = $m->status,		"status()";
is $status->{always}, 'skipped',       	"always ignored because not present in RMSTATES";
is $status->{sometimes}, 'notrun',     	"sometimes not run. While present in RMSTATES, we're testing";
is $status->{never}, 'skipped',		"never ignored because not present in RMSTATES";

#--- RMSTATES = ''; nothing should be run

$ENV{RMTESTING}	 = 0;
$ENV{RMVERBOSE}	 = 1;
$ENV{RMCONT}	 = 0;
$ENV{RMSTATES}	 = '';

ok $m = Resource::Loader->new( testing => 1,
				verbose => 1,
				cont    => 1,
				resources => [ { name => 'never',
						 when => sub { 1 },
						 what => sub { die "should never get here" },
					       },
					       { name => 'sometimes',
						 when => sub { 1 },
						 what => sub { 1 },
					       },
					       { name => 'always',
						 when => sub { 1 },
						 what => sub { 1 },
					       },
					     ],
			      ),		"new( args )";

$loaded = $m->load;
ok ! $loaded, 				'no $loaded';
ok $status = $m->status,		"status()";
is $m->testing, 0,		       	"testing()";
is $status->{always}, 'skipped',       	"always status";
is $status->{sometimes}, 'skipped',    	"sometimes status";
is $status->{never}, 'skipped',		"never status";