App-Easer
view release on metacpan or search on metacpan
t/V1/70-nested-children.t view on Meta::CPAN
use Test::More;
use File::Basename 'dirname';
use lib dirname(__FILE__);
use LocalTester;
my $app = {
configuration => {
'auto-leaves' => 1,
},
commands => {
MAIN => {
help => 'example command',
description => 'An example command',
options => [
{
getopt => 'foo|f!',
environment => 'GALOOK_FOO',
},
{
getopt => 'bar|b=s',
environment => 'GALOOK_BAR',
default => 'buzz',
},
],
'default-child' => {index => 1},
children => [
{
help => 'sub-command foo',
description => 'first-level sub-command foo',
supports => ['foo', 'Foo'],
options => [
{
getopt => 'hey|h=s',
},
],
execute => sub {
print {*STDOUT} 'foo on out';
print {*STDERR} 'foo on err';
return 'Foo';
},
},
'my-name-is-bar',
],
},
'my-name-is-bar' => {
supports => ['bar'],
help => 'sub-command bar',
description => 'first-level sub-command bar',
options => [],
execute => sub ($main, $conf, $args) {
print {*STDOUT} 'bar on out';
print {*STDERR} 'bar on err';
return 'Bar';
},
},
},
};
subtest 'foo' => sub {
test_run($app, ['foo'], {}, 'foo')->no_exceptions->result_is('Foo')
->stdout_like(qr{foo on out})->stderr_like(qr{foo on err});
};
subtest 'help foo' => sub {
test_run($app, ['help', 'foo'], {}, undef)->no_exceptions->stdout_like(
qr{(?mxs:
sub-command \s+ foo .*?
first-level \s+ sub-command \s+ foo .*?
hey
)}, 'output of help command'
);
};
subtest 'bar' => sub {
test_run($app, ['bar'], {}, 'bar')->no_exceptions->result_is('Bar')
->stdout_like(qr{bar on out})->stderr_like(qr{bar on err});
};
subtest 'help bar' => sub {
test_run($app, ['help', 'bar'], {}, undef)->no_exceptions->stdout_like(
qr{(?mxs:
sub-command \s+ bar .*?
first-level \s+ sub-command \s+ bar .*?
has \s+ no \s+ options
)}, 'output of help command'
);
};
subtest 'bar help (help is ignored)' => sub {
test_run($app, [qw< bar help >], {}, undef)
->no_exceptions->stdout_like(qr{bar on out})
->stderr_like(qr{bar on err});
};
subtest 'bar as default' => sub {
test_run($app, [], {}, 'bar')->no_exceptions->result_is('Bar')
->stdout_like(qr{bar on out})->stderr_like(qr{bar on err});
};
$app->{commands}{MAIN}{'default-child'}{index} = 0;
subtest 'foo as default' => sub {
test_run($app, [], {}, 'foo')->no_exceptions->result_is('Foo')
->stdout_like(qr{foo on out})->stderr_like(qr{foo on err});
};
done_testing();
( run in 0.919 second using v1.01-cache-2.11-cpan-c966e8aa7e8 )