Getopt-Kingpin
view release on metacpan or search on metacpan
t/23_command.t view on Meta::CPAN
use strict;
use Test::More 0.98;
use Test::Exception;
use Capture::Tiny ':all';
use Getopt::Kingpin;
use Getopt::Kingpin::Command;
use File::Basename;
subtest 'command (flag)' => sub {
local @ARGV;
push @ARGV, qw(post --server 127.0.0.1 --image=abc.jpg);
my $kingpin = Getopt::Kingpin->new();
my $post = $kingpin->command("post", "post image");
my $server = $post->flag("server", "")->string();
my $image = $post->flag("image", "")->file();
my $cmd = $kingpin->parse;
is $cmd, "post";
is $cmd->flags->get("server"), "127.0.0.1";
is $cmd->flags->get("image"), "abc.jpg";
is ref $post, "Getopt::Kingpin::Command";
is ref $server, "Getopt::Kingpin::Flag";
is ref $image, "Getopt::Kingpin::Flag";
is $server, "127.0.0.1";
is $image, "abc.jpg";
};
subtest 'command (arg)' => sub {
local @ARGV;
push @ARGV, qw(post 127.0.0.1 abc.jpg);
my $kingpin = Getopt::Kingpin->new();
my $post = $kingpin->command("post", "post image");
my $server = $post->arg("server", "")->string();
my $image = $post->arg("image", "")->file();
my $cmd = $kingpin->parse;
is $cmd, "post";
is $cmd->args->get("server"), "127.0.0.1";
is $cmd->args->get("image"), "abc.jpg";
is ref $post, "Getopt::Kingpin::Command";
is ref $server, "Getopt::Kingpin::Arg";
is ref $image, "Getopt::Kingpin::Arg";
is $server, "127.0.0.1";
is $image, "abc.jpg";
};
subtest 'command (flag and arg)' => sub {
local @ARGV;
push @ARGV, qw(post --server 127.0.0.1 abc.jpg);
my $kingpin = Getopt::Kingpin->new();
my $post = $kingpin->command("post", "post image");
my $server = $post->flag("server", "")->string();
my $image = $post->arg("image", "")->file();
$kingpin->parse;
is ref $post, "Getopt::Kingpin::Command";
is ref $server, "Getopt::Kingpin::Flag";
is ref $image, "Getopt::Kingpin::Arg";
is $server, "127.0.0.1";
is $image, "abc.jpg";
};
subtest 'command help' => sub {
local @ARGV;
push @ARGV, qw(--help);
my $kingpin = Getopt::Kingpin->new();
$kingpin->terminate(sub {return @_});
my $post = $kingpin->command("post", "post image");
my $server = $post->flag("server", "")->string();
my $image = $post->arg("image", "")->file();
my $expected = sprintf <<'...', basename($0);
usage: %s [<flags>] <command> [<args> ...]
Flags:
--help Show context-sensitive help.
Commands:
help [<command>...]
Show help.
post [<flags>] [<image>]
post image
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $exit, 0;
is $stdout, $expected;
};
subtest 'command help' => sub {
local @ARGV;
push @ARGV, qw(--help);
my $kingpin = Getopt::Kingpin->new();
$kingpin->terminate(sub {return @_});
my $post = $kingpin->command("post", "post image");
my $server = $post->flag("server", "")->string();
my $image = $post->arg("image", "")->file();
my $get = $kingpin->command("get", "get image");
my $expected = sprintf <<'...', basename($0);
usage: %s [<flags>] <command> [<args> ...]
Flags:
--help Show context-sensitive help.
Commands:
help [<command>...]
Show help.
post [<flags>] [<image>]
post image
get
get image
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $exit, 0;
is $stdout, $expected;
};
subtest 'command help' => sub {
local @ARGV;
push @ARGV, qw(--help);
my $kingpin = Getopt::Kingpin->new();
$kingpin->terminate(sub {return @_});
my $post = $kingpin->command("post", "post image");
my $server = $post->flag("server", "")->string();
my $get = $kingpin->command("get", "get image");
my $expected = sprintf <<'...', basename($0);
usage: %s [<flags>] <command> [<args> ...]
Flags:
--help Show context-sensitive help.
Commands:
help [<command>...]
Show help.
post [<flags>]
post image
get
get image
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $exit, 0;
is $stdout, $expected;
};
subtest 'command help 2' => sub {
local @ARGV;
push @ARGV, qw(help);
my $kingpin = Getopt::Kingpin->new();
$kingpin->terminate(sub {return @_});
my $post = $kingpin->command("post", "post image");
my $server = $post->flag("server", "")->string();
my $get = $kingpin->command("get", "get image");
my $expected = sprintf <<'...', basename($0);
usage: %s [<flags>] <command> [<args> ...]
Flags:
--help Show context-sensitive help.
Commands:
help [<command>...]
Show help.
post [<flags>]
post image
get
get image
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $exit, 0;
is $stdout, $expected;
};
subtest 'command help 3' => sub {
local @ARGV;
push @ARGV, qw(--help post);
my $kingpin = Getopt::Kingpin->new();
$kingpin->terminate(sub {return @_});
my $post = $kingpin->command("post", "post image");
my $server = $post->flag("server", "")->string();
my $get = $kingpin->command("get", "get image");
my $expected = sprintf <<'...', basename($0);
usage: %s post [<flags>]
post image
Flags:
--help Show context-sensitive help.
--server=SERVER
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $exit, 0;
is $stdout, $expected;
};
subtest 'command help 3' => sub {
local @ARGV;
push @ARGV, qw(post --help);
my $kingpin = Getopt::Kingpin->new();
$kingpin->terminate(sub {return @_});
my $post = $kingpin->command("post", "post image");
my $server = $post->flag("server", "")->string();
my $get = $kingpin->command("get", "get image");
my $expected = sprintf <<'...', basename($0);
usage: %s post [<flags>]
post image
Flags:
--help Show context-sensitive help.
--server=SERVER
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $exit, 0;
is $stdout, $expected;
};
subtest 'command help 3' => sub {
local @ARGV;
push @ARGV, qw(help post);
my $kingpin = Getopt::Kingpin->new();
$kingpin->terminate(sub {return @_});
my $post = $kingpin->command("post", "post image");
my $server = $post->flag("server", "")->string();
my $get = $kingpin->command("get", "get image");
my $expected = sprintf <<'...', basename($0);
usage: %s post [<flags>]
post image
Flags:
--help Show context-sensitive help.
--server=SERVER
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $exit, 0;
is $stdout, $expected;
};
subtest 'command help 3' => sub {
local @ARGV;
push @ARGV, qw(help post --server=SERVER);
my $kingpin = Getopt::Kingpin->new();
$kingpin->terminate(sub {return @_});
my $post = $kingpin->command("post", "post image");
my $server = $post->flag("server", "")->string();
my $get = $kingpin->command("get", "get image");
my $expected = sprintf <<'...', basename($0);
usage: %s post [<flags>]
post image
Flags:
--help Show context-sensitive help.
--server=SERVER
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $exit, 0;
is $stdout, $expected;
};
subtest 'command help 3' => sub {
local @ARGV;
push @ARGV, qw(--help post);
my $kingpin = Getopt::Kingpin->new();
$kingpin->terminate(sub {return @_});
my $post = $kingpin->command("post", "post image");
my $server = $post->flag("server", "")->string();
my $get = $kingpin->command("get", "get image");
my $expected = sprintf <<'...', basename($0);
usage: %s post [<flags>]
post image
Flags:
--help Show context-sensitive help.
--server=SERVER
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $exit, 0;
is $stdout, $expected;
};
subtest 'command help 4' => sub {
local @ARGV;
push @ARGV, qw(help get);
my $kingpin = Getopt::Kingpin->new();
$kingpin->terminate(sub {return @_});
my $post = $kingpin->command("post", "post image");
my $server = $post->flag("server", "")->string();
my $get = $kingpin->command("get", "get image");
my $expected = sprintf <<'...', basename($0);
usage: %s get
get image
Flags:
--help Show context-sensitive help.
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $exit, 0;
is $stdout, $expected;
};
subtest 'command help 5' => sub {
local @ARGV;
push @ARGV, qw(--help post);
my $kingpin = Getopt::Kingpin->new();
$kingpin->terminate(sub {return @_});
my $post = $kingpin->command("post", "");
my $server = $post->arg("server", "server address")->string();
my $get = $kingpin->command("get", "get image");
my $expected = sprintf <<'...', basename($0);
usage: %s post [<server>]
Flags:
--help Show context-sensitive help.
Args:
[<server>] server address
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $exit, 0;
is $stdout, $expected;
};
subtest 'command help 6' => sub {
local @ARGV;
push @ARGV, qw(--help);
my $kingpin = Getopt::Kingpin->new();
$kingpin->terminate(sub {return @_});
my $post = $kingpin->command("post", "post image");
my $server = $post->flag("server", "server address")->string();
my $get = $kingpin->command("get", "get image");
my $xyz = $get->command("xyz", "set xyz");
my $expected = sprintf <<'...', basename($0);
usage: %s [<flags>] <command> [<args> ...]
Flags:
--help Show context-sensitive help.
Commands:
help [<command>...]
Show help.
post [<flags>]
post image
get xyz
set xyz
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $exit, 0;
is $stdout, $expected;
};
subtest 'command help 6' => sub {
local @ARGV;
push @ARGV, qw(--help);
my $kingpin = Getopt::Kingpin->new();
$kingpin->terminate(sub {return @_});
my $post = $kingpin->command("post", "post image");
my $server = $post->flag("server", "server address")->string();
my $get = $kingpin->command("get", "get image");
my $xyz = $get->command("xyz", "set xyz");
my $abc = $get->command("abc", "set abc");
my $expected = sprintf <<'...', basename($0);
usage: %s [<flags>] <command> [<args> ...]
Flags:
--help Show context-sensitive help.
Commands:
help [<command>...]
Show help.
post [<flags>]
post image
get xyz
set xyz
get abc
set abc
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $exit, 0;
is $stdout, $expected;
};
subtest 'command help 6' => sub {
local @ARGV;
push @ARGV, qw(--help get);
my $kingpin = Getopt::Kingpin->new();
$kingpin->terminate(sub {return @_});
my $post = $kingpin->command("post", "post image");
my $server = $post->flag("server", "server address")->string();
my $get = $kingpin->command("get", "get image");
my $xyz = $get->command("xyz", "set xyz");
my $expected = sprintf <<'...', basename($0);
usage: %s get <command> [<args> ...]
get image
Flags:
--help Show context-sensitive help.
Subcommands:
get xyz
set xyz
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $exit, 0;
is $stdout, $expected;
};
subtest 'command help 7' => sub {
local @ARGV;
push @ARGV, qw(--help register);
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my $register = $kingpin->command('register', 'Register a new user.');
my $register_nick = $register->arg('nick', 'Nickname for user.')->required->string;
my $register_name = $register->arg('name', 'Name for user.')->required->string;
my $post = $kingpin->command('post', 'Post a message to a channel.');
my $postImage = $post->flag('image', 'Image to post.')->file;
my $postChannel = $post->arg('channel', 'Channel to post to.')->required->string;
my $postText = $post->arg('text', 'Text to post.')->string_list;
my $expected = sprintf <<'...', basename($0);
usage: %s register <nick> <name>
Register a new user.
Flags:
--help Show context-sensitive help.
Args:
<nick> Nickname for user.
<name> Name for user.
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $exit, 0;
is $stdout, $expected;
};
subtest 'command help 7-2' => sub {
local @ARGV;
push @ARGV, qw(register --help);
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my $register = $kingpin->command('register', 'Register a new user.');
my $register_nick = $register->arg('nick', 'Nickname for user.')->required->string;
my $register_name = $register->arg('name', 'Name for user.')->required->string;
my $post = $kingpin->command('post', 'Post a message to a channel.');
my $postImage = $post->flag('image', 'Image to post.')->file;
my $postChannel = $post->arg('channel', 'Channel to post to.')->required->string;
my $postText = $post->arg('text', 'Text to post.')->string_list;
my $expected = sprintf <<'...', basename($0);
usage: %s register <nick> <name>
Register a new user.
Flags:
--help Show context-sensitive help.
Args:
<nick> Nickname for user.
<name> Name for user.
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $exit, 0;
is $stdout, $expected;
};
subtest 'command help 7-3' => sub {
local @ARGV;
push @ARGV, qw(help register);
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my $register = $kingpin->command('register', 'Register a new user.');
my $register_nick = $register->arg('nick', 'Nickname for user.')->required->string;
my $register_name = $register->arg('name', 'Name for user.')->required->string;
my $post = $kingpin->command('post', 'Post a message to a channel.');
my $postImage = $post->flag('image', 'Image to post.')->file;
my $postChannel = $post->arg('channel', 'Channel to post to.')->required->string;
my $postText = $post->arg('text', 'Text to post.')->string_list;
my $expected = sprintf <<'...', basename($0);
usage: %s register <nick> <name>
Register a new user.
Flags:
--help Show context-sensitive help.
Args:
<nick> Nickname for user.
<name> Name for user.
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $exit, 0;
is $stdout, $expected;
};
subtest 'command help 8' => sub {
local @ARGV;
push @ARGV, qw(--help post);
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my $register = $kingpin->command('register', 'Register a new user.');
my $register_nick = $register->arg('nick', 'Nickname for user.')->required->string;
my $register_name = $register->arg('name', 'Name for user.')->required->string;
my $post = $kingpin->command('post', 'Post a message to a channel.');
my $postImage = $post->flag('image', 'Image to post.')->file;
my $postChannel = $post->arg('channel', 'Channel to post to.')->required->string;
my $postText = $post->arg('text', 'Text to post.')->string_list;
my $expected = sprintf <<'...', basename($0);
usage: %s post [<flags>] <channel> [<text>...]
Post a message to a channel.
Flags:
--help Show context-sensitive help.
--image=IMAGE Image to post.
Args:
<channel> Channel to post to.
[<text>] Text to post.
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $exit, 0;
is $stdout, $expected;
};
subtest 'command help 8-2' => sub {
local @ARGV;
push @ARGV, qw(post --help);
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my $register = $kingpin->command('register', 'Register a new user.');
my $register_nick = $register->arg('nick', 'Nickname for user.')->required->string;
my $register_name = $register->arg('name', 'Name for user.')->required->string;
my $post = $kingpin->command('post', 'Post a message to a channel.');
my $postImage = $post->flag('image', 'Image to post.')->file;
my $postChannel = $post->arg('channel', 'Channel to post to.')->required->string;
my $postText = $post->arg('text', 'Text to post.')->string_list;
my $expected = sprintf <<'...', basename($0);
usage: %s post [<flags>] <channel> [<text>...]
Post a message to a channel.
Flags:
--help Show context-sensitive help.
--image=IMAGE Image to post.
Args:
<channel> Channel to post to.
[<text>] Text to post.
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $exit, 0;
is $stdout, $expected;
};
subtest 'command help 8-3' => sub {
local @ARGV;
push @ARGV, qw(help post);
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my $register = $kingpin->command('register', 'Register a new user.');
my $register_nick = $register->arg('nick', 'Nickname for user.')->required->string;
my $register_name = $register->arg('name', 'Name for user.')->required->string;
my $post = $kingpin->command('post', 'Post a message to a channel.');
my $postImage = $post->flag('image', 'Image to post.')->file;
my $postChannel = $post->arg('channel', 'Channel to post to.')->required->string;
my $postText = $post->arg('text', 'Text to post.')->string_list;
my $expected = sprintf <<'...', basename($0);
usage: %s post [<flags>] <channel> [<text>...]
Post a message to a channel.
Flags:
--help Show context-sensitive help.
--image=IMAGE Image to post.
Args:
<channel> Channel to post to.
[<text>] Text to post.
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $exit, 0;
is $stdout, $expected;
};
subtest 'command help 9-1' => sub {
local @ARGV;
push @ARGV, qw(--verbose register NICK NAME --age 100);
my $kingpin = Getopt::Kingpin->new;
my $verbose = $kingpin->flag("verbose", "set verbose mode")->bool;
my $register = $kingpin->command('register', 'Register a new user.');
my $register_age = $register->flag('age', 'Age for user.')->int;
my $register_nick = $register->arg('nick', 'Nickname for user.')->required->string;
my $register_name = $register->arg('name', 'Name for user.')->required->string;
my $cmd = $kingpin->parse;
is $cmd, "register";
is $verbose, 1;
is $register_age, 100;
is $register_nick, "NICK";
is $register_name, "NAME";
};
subtest 'command help 9-2' => sub {
local @ARGV;
push @ARGV, qw(register NICK NAME --age 100 --verbose);
my $kingpin = Getopt::Kingpin->new;
my $verbose = $kingpin->flag("verbose", "set verbose mode")->bool;
my $register = $kingpin->command('register', 'Register a new user.');
my $register_age = $register->flag('age', 'Age for user.')->int;
my $register_nick = $register->arg('nick', 'Nickname for user.')->required->string;
my $register_name = $register->arg('name', 'Name for user.')->required->string;
my $cmd = $kingpin->parse;
is $cmd, "register";
is $verbose, 1;
is $register_age, 100;
is $register_nick, "NICK";
is $register_name, "NAME";
};
subtest 'command help 9-3 help' => sub {
local @ARGV;
push @ARGV, qw(help register);
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my $verbose = $kingpin->flag("verbose", "set verbose mode")->bool;
my $register = $kingpin->command('register', 'Register a new user.');
my $register_age = $register->flag('age', 'Age for user.')->int;
my $register_nick = $register->arg('nick', 'Nickname for user.')->required->string;
my $register_name = $register->arg('name', 'Name for user.')->required->string;
my $expected = sprintf <<'...', basename($0);
usage: %s register [<flags>] <nick> <name>
Register a new user.
Flags:
--help Show context-sensitive help.
--verbose set verbose mode
--age=AGE Age for user.
Args:
<nick> Nickname for user.
<name> Name for user.
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $exit, 0;
is $stdout, $expected;
};
subtest 'command help 9-4 help' => sub {
local @ARGV;
push @ARGV, qw(--help register);
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my $verbose = $kingpin->flag("verbose", "set verbose mode")->bool;
my $register = $kingpin->command('register', 'Register a new user.');
my $register_age = $register->flag('age', 'Age for user.')->int;
my $register_nick = $register->arg('nick', 'Nickname for user.')->required->string;
my $register_name = $register->arg('name', 'Name for user.')->required->string;
my $expected = sprintf <<'...', basename($0);
usage: %s register [<flags>] <nick> <name>
Register a new user.
Flags:
--help Show context-sensitive help.
--verbose set verbose mode
--age=AGE Age for user.
Args:
<nick> Nickname for user.
<name> Name for user.
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $exit, 0;
is $stdout, $expected;
};
subtest 'command help 9-4 help' => sub {
local @ARGV;
push @ARGV, qw(register --help);
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my $verbose = $kingpin->flag("verbose", "set verbose mode")->bool;
my $register = $kingpin->command('register', 'Register a new user.');
my $register_age = $register->flag('age', 'Age for user.')->int;
my $register_nick = $register->arg('nick', 'Nickname for user.')->required->string;
my $register_name = $register->arg('name', 'Name for user.')->required->string;
my $expected = sprintf <<'...', basename($0);
usage: %s register [<flags>] <nick> <name>
Register a new user.
Flags:
--help Show context-sensitive help.
--verbose set verbose mode
--age=AGE Age for user.
Args:
<nick> Nickname for user.
<name> Name for user.
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $exit, 0;
is $stdout, $expected;
};
subtest 'command help hash' => sub {
local @ARGV;
push @ARGV, qw(register --help);
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my $verbose = $kingpin->flag("verbose", "set verbose mode")->bool;
my $register = $kingpin->command('register', 'Register a new user.');
$register->flag('test1', 'Test 1.')->string_hash;
$register->flag('test2', 'Test 2.')->placeholder('VAL')->string_hash;
$register->flag('test3', 'Test 3.')->placeholder('K=V')->string_hash;
$register->arg('test4', 'Test 4.')->string_hash;
my $expected = sprintf <<'...', basename($0);
usage: %s register [<flags>] [<KEY=test4>]
Register a new user.
Flags:
--help Show context-sensitive help.
--verbose set verbose mode
--test1 KEY=VALUE Test 1.
--test2 KEY=VAL Test 2.
--test3 K=V Test 3.
Args:
[<KEY=test4>] Test 4.
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $exit, 0;
is $stdout, $expected;
};
done_testing;
( run in 2.021 seconds using v1.01-cache-2.11-cpan-a49fcb8fa48 )