Fry-Shell
view release on metacpan or search on metacpan
t/fry_shell.t view on Meta::CPAN
#use Fry::Error::Carp;
#Fry::Error::Carp->setup;
#$Fry::Error::Carp::SHIFT = 8;
#FAKE SHELL
require MyBase;
my $o = {%MyBase::coreHash};
#{qw/lib Fry::Lib cmd Fry::Cmd var Fry::Var opt Fry::Opt sub Fry::Sub obj Fry::Obj type Fry::Type/};
bless $o,__PACKAGE__;
#$Fry::Error::GlobalLevel = 0;
#under &new
$o->_initCoreClasses({});
can_ok('Fry::Shell',qw/lib cmd var opt sub/,);
print "\t&_initCoreClasses: defined core classes\n";
eval { $o->_initCoreClasses({qw/lib yoyo/}); };
ok($@,'&_initCoreClasses die: invalid class');
#main subs
$o->setFlag(quit=>1);
$o->shell;
is($once,1,'&shell: &once called once w/ quit Flag set');
#General checks
my $loaded_modules = [qw#Fry/Base.pm Fry/Cmd.pm Fry/Error.pm Fry/Lib.pm Fry/List.pm Fry/Opt.pm Fry/Shell.pm Fry/Var.pm#];
sub check_modules { for (@$loaded_modules) { (exists $INC{$_})? 1: return 0 }; return 1 }
#ok(&check_modules,'expected Fry modules in %INC');
#Fry::ShellI
#Fry::List wrappers-should can errors die?
#warning_like {$o->unloadGeneral('dodo','args') } qr//,"&unloadGeneral warning: invalid core class";
#warn_count(sub {$o->unloadGeneral('dodo','args')},'unloadGeneral');
#td: List,listAll
#misc
Fry::Var->defaultNew(plugin_config=>'Fry::Config::Default');
$o->loadFile('t/testlib/shell.conf');
is($o->Var('top_secret'),'nothing','&loadFile: set a variable correctly');
#warnings_like { $o->loadFile('blah')} qr//,'&loadFile warning: invalid file';
warn_count(sub{$o->loadFile('blah')},'loadFile');
Fry::Var->unloadObj('top_secret');
#warnings_like {$o->loadPlugins('wawa')} qr//,'&loadPlugins warning: invalid module';
warn_count(sub {$o->loadPlugins('wawa')},'loadPlugins');
#REAL SHELL
$o = main->new;
*once = *Fry::Shell::once;
#general checks
is_deeply([sort $o->List('var')],[sort (qw/shell_class/, keys %{Fry::Lib::Default->_default_data->{vars} },
keys %{main->_default_data->{vars}})],'core vars loaded');
is_deeply([sort $o->List('opt')],[sort (keys %{main->_default_data->{opts}})],'core options loaded');
is_deeply($o->Var('loaded_libs'),[qw/Fry::Shell Fry::Sub Fry::Lib::Default/],'libs loaded in right order in &loadLib');
is_deeply([@CmdClass::ISA],[qw/Fry::ShellI Fry::Lib::Default/],'cmdclass ISA set in &loadLib');
#parse*
$o->saveArray(qw/one cow fart equals thirty human farts/);
my $menuinput = "scp -ra 2-5,7";
my @results = $o->sub->parseMenu($menuinput);
my $input = "-m=yeah yo man";
is_deeply([$o->parseLine("-m $menuinput")],\@results,'&parseLine strips options and menu flag works');
#options
my $menuinput = "scp -ra 2-5,7";
#&parseCmd + parsecmd opt
$o->setVar(parsecmd=>'m');
is_deeply([$o->_parseCmd($menuinput)],\@results,'aliased parsecmd opt switched parse modes correctly');
$o->setVar(parsecmd=>'menu');
is_deeply([$o->_parseCmd($menuinput)],\@results,'unaliased parsecmd opt switched parse modes correctly');
$o->setVar(parsecmd=>'blah');
is_deeply([$o->_parseCmd($menuinput)],[$o->sub->parseNormal($menuinput)],'default parsecmd called on invalid parsecmd');
$o->setVar(parsecmd=>'m');
#&once
$o->lib->loadLib('Fry::Lib::SampleLib');
$o->once("cmd1 |cmd2");
is_deeply(\@Fry::Lib::SampleLib::called_cmds,[qw/cmd1 cmd2/],'piping via &once');
@Fry::Lib::SampleLib::called_cmds=();
$Fry::Lib::SampleLib::called_tests= 0;
#td: strange cmds exeing out of order
eval { $o->once('blah') };
#ok (! $@,'invalid cmd doesn\'t fail via &once');
eval {$o->once('') };
#ok (! $@,'empty cmd doesn\'t fail via &once');
$o->setFlag(skipcmd=>1);
$o->setFlag(skiparg=>1);
$o->once('cmd1');
is_deeply(\@Fry::Lib::SampleLib::called_cmds,[],'option skipcmd worked');
is($Fry::Lib::SampleLib::called_tests,0,'option skiparg worked');
$o->setFlag(skipcmd=>0);
$o->setFlag(skiparg=>0);
#*parseLine = sub { die "now" } ;
#$o->once('cmd1');
#is($warn,1,'&once warning:');
#warnings_like {$o->once('cmd1')} qr//,'&once warning: die converted to warning';
( run in 1.593 second using v1.01-cache-2.11-cpan-39bf76dae61 )