sub action {
my ($self, $cmd, $pkg) = @_;
- $cmd = $self->cmd if !defined $cmd
- and defined $self and $self->isa(__PACKAGE__);
- return unless defined $cmd;
+ if (not defined $cmd) {
+ return unless defined $self and ref $self and $self->isa(__PACKAGE__);
+ $cmd = $self->cmd;
+ }
unless (defined $pkg) {
return __PACKAGE__ . '::Each' unless defined $commands{$cmd};
return $commands{$cmd}
use strict;
use warnings;
-use Test::More tests => 20;
+use Test::More tests => 30;
use App::Rgit;
$res = eval { App::Rgit::Test::Foo->App::Rgit::Command::new(cmd => 'version') };
is($@, '', 'App::Rgit::Test::Foo->App::Rgit::Command::new(cmd => "version"): does not croak');
isa_ok($res, 'App::Rgit::Test::Foo', 'App::Rgit::Test::Foo->App::Rgit::Command::new(cmd => "version"): returns valid object');
+
+$res = eval { App::Rgit::Command->action('version') };
+is($@, '', 'App::Rgit::Command->action("version"): does not croak');
+is($res, 'App::Rgit::Command::Once', 'App::Rgit::Command->action("version"): returns valid object');
+
+$res = eval { App::Rgit::Command->new(cmd => 'version')->action() };
+is($@, '', 'App::Rgit::Command->action(): does not croak');
+is($res, 'App::Rgit::Command::Once', 'App::Rgit::Command->action(): returns valid object');
+
+$res = eval { App::Rgit::Command->action() };
+is($@, '', 'App::Rgit::Command->action(): no cmd: does not croak');
+is($res, undef, 'App::Rgit::Command->action(); no cmd: returns undef');
+
+$res = eval { App::Rgit::Command::action() };
+is($@, '', 'undef->App::Rgit::Command::action(): no cmd: does not croak');
+is($res, undef, 'undef->App::Rgit::Command::action(); no cmd: returns undef');
+
+$res = bless { }, 'App::Rgit::Test::Monkey';
+$res = eval { $res->App::Rgit::Command::action() };
+is($@, '', 'App::Rgit::Test::Monkey->App::Rgit::Command::action(): no cmd: does not croak');
+is($res, undef, 'App::Rgit::Test::Monkey->App::Rgit::Command::action(); no cmd: returns undef');