Data-Object-Cli

 view release on metacpan or  search on metacpan

t/Data_Object_Cli.t  view on Meta::CPAN


  package Todo::Admin;

  use parent 'Data::Object::Cli';

  our $name = 'todo <action>';

  sub auto {
    {
      add_user => '_handle_add_user',
      del_user => '_handle_del_user'
    }
  }

  sub subs {
    {
      add_user => 'Add a new user to the system',
      del_user => 'Remove a user to the system'
    }
  }

  my $admin = run Todo::Admin;

  __DATA__

  Usage: {name}

  Commands:

  {commands}

  Options:

  {options}

=cut

package main;

my $test = testauto(__FILE__);

my $subs = $test->standard;

$subs->synopsis(fun($tryable) {
  ok my $result = $tryable->result;
  ok $result->isa('Command');

  ok $result->args;
  ok $result->opts;
  ok $result->data;
  ok $result->vars;

  my $returned = $result->main;

  like $returned, qr/usage:/;

  $result
});

$subs->example(-1, 'auto', 'method', fun($tryable) {
  local @ARGV;

  $ARGV[0] = 'init';

  ok my $result = $tryable->result;
  ok my $returned = $result->main;
  is $returned, 1234567890;

  $result->auto
});

$subs->example(-1, 'exit', 'method', fun($tryable) {
  ok !(my $result = trap { $tryable->result });
  is $trap->exit, 0;

  $result
});

$subs->example(-2, 'exit', 'method', fun($tryable) {
  ok !(my $result = trap { $tryable->result });
  is $trap->exit, 1;

  $result
});

$subs->example(-1, 'fail', 'method', fun($tryable) {
  ok !(my $result = trap { $tryable->result });
  is $trap->exit, 1;

  $result
});

$subs->example(-1, 'handle', 'method', fun($tryable) {
  ok my $result = $tryable->result;
  like $result, qr/usage:/;

  $result
});

$subs->example(-1, 'help', 'method', fun($tryable) {
  ok my $result = $tryable->result;
  is $result->name, __FILE__;
  ok !$result->info;

  $result->help
});

$subs->example(-2, 'help', 'method', fun($tryable) {
  ok my $result = $tryable->result;
  is $result->name, 'todolist';
  ok !$result->info;

  $result->help
});

$subs->example(-3, 'help', 'method', fun($tryable) {
  ok my $result = $tryable->result;
  is $result->name, 'todolist';
  ok !$result->info;

  $result->help



( run in 1.696 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )