The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use Test::More tests=>18;
use lib 'lib';
use lib 't/testlib';
#use Test::Warn;
use MyWarn;
#use Data::Dumper;
#use diagnostics;

use base 'Fry::Opt';
use MyBase;
@Fry::Opt::ISA = (qw/Fry::List MyBase/);
use Fry::Var;

my %optobj = (flag=>{qw/id flag a f type flag stop 1 tags counter/},
	var=>{qw/id var type var/,action=>\&actionsub},
	none=>{qw/id none type none noreset 1/});
my @actionsub;
sub actionsub { @actionsub = @_}

main->defaultNew(%optobj);

#&setOptions
	main->setOptions(flag=>1);
	is(main->Flag('flag'),1,'&setOptions with flag-type option');
	main->setOptions(flag=>0);
	main->setOptions(f=>1);
	is(main->Flag('flag'),1,'&setOptions with option\'s alias');

	Fry::Var->new(qw/id var value blah/);
	main->setOptions(var=>'weally');
	is(Fry::Var->get('var','value'),'weally','&setOptions with var-type option');

	main->setOptions(none=>'yep');
	is (main->get(qw/none value/),'yep','&setOptions with none-type option');
	
	#warning_like {main->setOptions(blah=>'blah')} [qr//,qr//],'&setOptions warning: invalid opt';
	warn_count(sub {main->setOptions(blah=>'blah')},'setOptions');

#&Opt
	is(main->Opt('flag'),1,'&Opt with type flag');
	is(main->Opt('var'),'weally','&Opt with type var');
	is(main->Opt('none'),'yep','&Opt with type none');
	ok(! main->Opt('blah'),'&Opt returns undef for invalid argument');
	#warning_like {main->Opt('blah')} [qr//,qr//],'&Opt warning: invalid opt skipped';
	warn_count(sub{main->Opt('blah')},'Opt');

main->_setDefaults;
main->setOptions(none=>'yepper',flag=>0);
is_deeply({main->findSetOptions},{qw/flag 0 none yepper/},'&findSetOptions');

#&resetOptions
	main->resetOptions;
	is(main->Opt('none'),'yepper','&resetOptions: noreset attribute works');
	is(main->Opt('flag'),0,'&resetOptions: stop attribute > 0 prevents reset');

	main->resetOptions({reset=>1});
	is(main->Opt('none'),'yep','&resetOptions: noreset attribute overloaded by sub\'s reset option');
	is(main->Opt('flag'),1,'&resetOptions: stop attribute > 0 overloaded');

main->preParseCmd(flag=>0,var=>'woah');
is(main->_obj('flag')->{stop},1,'stop set to 1 via counter tag and &preParseCmd');
is_deeply(\@actionsub,['main','woah'],'action executed and passed arguments correctly via &preParseCmd');
#warning_like {main->preParseCmd(blah=>'blah')} [qr//,qr//],'&preParseCmd warning: invalid opt skipped';
warn_count(sub{main->preParseCmd(blah=>'blah')},'preParseCmd');