#!/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');