view release on metacpan or search on metacpan
t/01_string.t view on Meta::CPAN
use strict;
use Test::More 0.98;
use Getopt::Kingpin;
subtest 'string normal' => sub {
local @ARGV;
push @ARGV, qw(--name kingpin);
my $kingpin = Getopt::Kingpin->new;
$kingpin->flag('name', 'set name')->string();
$kingpin->parse;
is $kingpin->flags->get('name'), 'kingpin';
};
subtest 'string normal 2 options' => sub {
local @ARGV;
push @ARGV, qw(--name kingpin --xyz abcde);
my $k = Getopt::Kingpin->new;
$k->flag('name', 'option 1')->string;
$k->flag('xyz', 'option 2')->string;
$k->parse;
is $k->flags->get('name'), 'kingpin';
is $k->flags->get('xyz'), 'abcde';
t/02_string_with_overload.t view on Meta::CPAN
use strict;
use Test::More 0.98;
use Getopt::Kingpin;
subtest 'string normal with overload' => sub {
local @ARGV;
push @ARGV, qw(--name kingpin);
my $kingpin = Getopt::Kingpin->new;
my $name = $kingpin->flag('name', 'set name')->string();
$kingpin->parse;
is $name, 'kingpin';
};
use strict;
use Test::More 0.98;
use Test::Exception;
use Capture::Tiny ':all';
use Getopt::Kingpin;
subtest 'int normal with overload' => sub {
local @ARGV;
push @ARGV, qw(--x 0);
my $kingpin = Getopt::Kingpin->new;
my $x = $kingpin->flag('x', 'set x')->int();
$kingpin->parse;
is $x, 0;
ok $x == 0;
};
subtest 'int error with overload' => sub {
local @ARGV;
push @ARGV, qw(--x ZERO);
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my $x = $kingpin->flag('x', 'set x')->int();
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
like $stderr, qr/int parse error/, 'int parse error';
t/04_required.t view on Meta::CPAN
use strict;
use Test::More 0.98;
use Capture::Tiny ':all';
use Getopt::Kingpin;
subtest 'required' => sub {
local @ARGV;
push @ARGV, qw();
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
$kingpin->flag('name', 'set name')->required->string();
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
like $stderr, qr/error: required flag --name not provided, try --help/, 'required error';
is $exit, 1;
};
subtest 'required and not required' => sub {
local @ARGV;
push @ARGV, qw(--name abc --x 3);
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my $name = $kingpin->flag('name', 'set name')->required->string();
my $x = $kingpin->flag('x', 'set x')->int();
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
t/05_short_option.t view on Meta::CPAN
use strict;
use Test::More 0.98;
use Test::Exception;
use Capture::Tiny ':all';
use Getopt::Kingpin;
subtest 'short option' => sub {
local @ARGV;
push @ARGV, qw(-n kingpin);
my $kingpin = Getopt::Kingpin->new;
my $name = $kingpin->flag('name', 'set name')->short('n')->required->string();
$kingpin->parse;
is $name, 'kingpin';
};
subtest 'short and long option' => sub {
local @ARGV;
push @ARGV, qw(-n kingpin --xxxx 3);
my $kingpin = Getopt::Kingpin->new;
my $name = $kingpin->flag('name', 'set name')->short('n')->required->string();
my $xxxx = $kingpin->flag('xxxx', 'set xxxx')->required->string();
$kingpin->parse;
is $name, 'kingpin';
is $xxxx, 3;
};
subtest 'unknown short flag' => sub {
local @ARGV;
push @ARGV, qw(-h);
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
like $stderr, qr/error: unknown short flag '-h', try --help/;
is $exit, 1;
};
subtest 'POSIX-style short flag combining 1' => sub {
local @ARGV;
push @ARGV, qw();
my $kingpin = Getopt::Kingpin->new;
my $x = $kingpin->flag("long_x", "")->short("x")->bool();
my $y = $kingpin->flag("long_y", "")->short("y")->bool();
$kingpin->parse;
is $x, 0;
is $y, 0;
};
subtest 'POSIX-style short flag combining 2' => sub {
local @ARGV;
push @ARGV, qw(-xy);
my $kingpin = Getopt::Kingpin->new;
my $x = $kingpin->flag("long_x", "")->short("x")->bool();
my $y = $kingpin->flag("long_y", "")->short("y")->bool();
$kingpin->parse;
is $x, 1;
is $y, 1;
};
subtest 'Short-flag+parameter combining 1' => sub {
local @ARGV;
push @ARGV, qw(-x 12);
my $kingpin = Getopt::Kingpin->new;
my $x = $kingpin->flag("long_x", "")->short("x")->int();
$kingpin->parse;
is $x, 12;
};
subtest 'Short-flag+parameter combining 2' => sub {
local @ARGV;
push @ARGV, qw(-x12);
my $kingpin = Getopt::Kingpin->new;
my $x = $kingpin->flag("long_x", "")->short("x")->int();
$kingpin->parse;
is $x, 12;
};
subtest 'Short-flag+parameter combining 3' => sub {
local @ARGV;
push @ARGV, qw(-yx12);
my $kingpin = Getopt::Kingpin->new;
my $x = $kingpin->flag("long_x", "")->short("x")->int();
my $y = $kingpin->flag("long_y", "")->short("y")->bool();
$kingpin->parse;
is $x, 12;
is $y, 1;
};
subtest 'Short-flag+parameter combining 4 error' => sub {
local @ARGV;
push @ARGV, qw(-x12y);
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my $x = $kingpin->flag("long_x", "")->short("x")->int();
my $y = $kingpin->flag("long_y", "")->short("y")->bool();
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
t/06_default.t view on Meta::CPAN
use strict;
use Test::More 0.98;
use Test::Exception;
use Getopt::Kingpin;
subtest 'default' => sub {
local @ARGV;
push @ARGV, qw();
my $kingpin = Getopt::Kingpin->new;
my $name = $kingpin->flag('name', 'set name')->default("default name")->string();
my $xxxx = $kingpin->flag('xxxx', 'set xxxx')->string();
$kingpin->parse;
is $name, 'default name';
is $xxxx, '';
};
subtest 'default (list)' => sub {
local @ARGV;
push @ARGV, qw();
my $kingpin = Getopt::Kingpin->new;
my $name = $kingpin->flag('name', 'set name')->default(["default name", "default name 2"])->string_list();
my $xxxx = $kingpin->flag('xxxx', 'set xxxx')->string_list();
$kingpin->parse;
is_deeply $name->value, ['default name', 'default name 2'];
is_deeply $xxxx->value, [];
};
subtest 'default (hash)' => sub {
local @ARGV;
push @ARGV, qw();
my $kingpin = Getopt::Kingpin->new;
my $name = $kingpin->flag('name', 'set name')->default({"foo"=>"a","bar"=>"b"})->string_hash();
my $xxxx = $kingpin->flag('xxxx', 'set xxxx')->string_hash();
$kingpin->parse;
is_deeply $name->value, {"foo"=>"a","bar"=>"b"};
is_deeply $xxxx->value, {};
};
subtest 'default arg' => sub {
local @ARGV;
push @ARGV, qw();
my $kingpin = Getopt::Kingpin->new;
my $name = $kingpin->arg('name', 'set name')->default("default name")->string();
my $xxxx = $kingpin->arg('xxxx', 'set xxxx')->string();
$kingpin->parse;
is $name, 'default name';
is $xxxx, '';
};
subtest 'default arg (list)' => sub {
local @ARGV;
push @ARGV, qw();
my $kingpin = Getopt::Kingpin->new;
my $name = $kingpin->arg('name', 'set name')->default(["default name", "default name 2"])->string_list();
my $xxxx = $kingpin->arg('xxxx', 'set xxxx')->string_list();
$kingpin->parse;
is_deeply $name->value, ['default name', 'default name 2'];
is_deeply $xxxx->value, [];
};
subtest 'default arg (hash)' => sub {
local @ARGV;
push @ARGV, qw();
my $kingpin = Getopt::Kingpin->new;
my $name = $kingpin->arg('name', 'set name')->default({"foo"=>"a","bar"=>"b"})->string_hash();
my $xxxx = $kingpin->arg('xxxx', 'set xxxx')->string_hash();
$kingpin->parse;
is_deeply $name->value, {"foo"=>"a","bar"=>"b"};
is_deeply $xxxx->value, {};
};
subtest 'coderef default' => sub {
local @ARGV;
push @ARGV, qw();
my $kingpin = Getopt::Kingpin->new;
my $name = $kingpin->flag('name', 'set name')->default(sub { "default name" })->string();
my $xxxx = $kingpin->flag('xxxx', 'set xxxx')->string();
$kingpin->parse;
is $name, 'default name';
is $xxxx, '';
};
subtest 'coderef default (list)' => sub {
local @ARGV;
push @ARGV, qw();
my $kingpin = Getopt::Kingpin->new;
my $name = $kingpin->flag('name', 'set name')->default(sub { ["default name", "default name 2"] })->string_list();
my $xxxx = $kingpin->flag('xxxx', 'set xxxx')->string_list();
$kingpin->parse;
is_deeply $name->value, ['default name', 'default name 2'];
is_deeply $xxxx->value, [];
};
subtest 'coderef default (hash)' => sub {
local @ARGV;
push @ARGV, qw();
my $kingpin = Getopt::Kingpin->new;
my $name = $kingpin->flag('name', 'set name')->default(sub {{"foo"=>"a","bar"=>"b"}})->string_hash();
my $xxxx = $kingpin->flag('xxxx', 'set xxxx')->string_hash();
$kingpin->parse;
is_deeply $name->value, {"foo"=>"a","bar"=>"b"};
is_deeply $xxxx->value, {};
};
subtest 'coderef default arg' => sub {
local @ARGV;
push @ARGV, qw();
my $kingpin = Getopt::Kingpin->new;
my $name = $kingpin->arg('name', 'set name')->default(sub { "default name" })->string();
my $xxxx = $kingpin->arg('xxxx', 'set xxxx')->string();
$kingpin->parse;
is $name, 'default name';
is $xxxx, '';
};
subtest 'coderef default arg (list)' => sub {
local @ARGV;
push @ARGV, qw();
my $kingpin = Getopt::Kingpin->new;
my $name = $kingpin->arg('name', 'set name')->default(sub { ["default name", "default name 2"] })->string_list();
my $xxxx = $kingpin->arg('xxxx', 'set xxxx')->string_list();
$kingpin->parse;
is_deeply $name->value, ['default name', 'default name 2'];
is_deeply $xxxx->value, [];
};
subtest 'coderef default arg (hash)' => sub {
local @ARGV;
push @ARGV, qw();
my $kingpin = Getopt::Kingpin->new;
my $name = $kingpin->arg('name', 'set name')->default(sub {{"foo"=>"a","bar"=>"b"}})->string_hash();
my $xxxx = $kingpin->arg('xxxx', 'set xxxx')->string_hash();
$kingpin->parse;
is_deeply $name->value, {"foo"=>"a","bar"=>"b"};
is_deeply $xxxx->value, {};
};
# Package for overloaded defaults
sub ov (&) {
package Local::Overloaded;
use overload '&{}' => sub { $_[0][0] };
bless [ @_ ];
}
subtest 'overloaded object default' => sub {
local @ARGV;
push @ARGV, qw();
my $kingpin = Getopt::Kingpin->new;
my $name = $kingpin->flag('name', 'set name')->default(ov { "default name" })->string();
my $xxxx = $kingpin->flag('xxxx', 'set xxxx')->string();
$kingpin->parse;
is $name, 'default name';
is $xxxx, '';
};
subtest 'overloaded object default (list)' => sub {
local @ARGV;
push @ARGV, qw();
my $kingpin = Getopt::Kingpin->new;
my $name = $kingpin->flag('name', 'set name')->default(ov { ["default name", "default name 2"] })->string_list();
my $xxxx = $kingpin->flag('xxxx', 'set xxxx')->string_list();
$kingpin->parse;
is_deeply $name->value, ['default name', 'default name 2'];
is_deeply $xxxx->value, [];
};
subtest 'overloaded object default (hash)' => sub {
local @ARGV;
push @ARGV, qw();
my $kingpin = Getopt::Kingpin->new;
my $name = $kingpin->flag('name', 'set name')->default(ov {{"foo"=>"a","bar"=>"b"}})->string_hash();
my $xxxx = $kingpin->flag('xxxx', 'set xxxx')->string_hash();
$kingpin->parse;
is_deeply $name->value, {"foo"=>"a","bar"=>"b"};
is_deeply $xxxx->value, {};
};
subtest 'overloaded object default arg' => sub {
local @ARGV;
push @ARGV, qw();
my $kingpin = Getopt::Kingpin->new;
my $name = $kingpin->arg('name', 'set name')->default(ov { "default name" })->string();
my $xxxx = $kingpin->arg('xxxx', 'set xxxx')->string();
$kingpin->parse;
is $name, 'default name';
is $xxxx, '';
};
subtest 'overloaded object default arg (list)' => sub {
local @ARGV;
push @ARGV, qw();
my $kingpin = Getopt::Kingpin->new;
my $name = $kingpin->arg('name', 'set name')->default(ov { ["default name", "default name 2"] })->string_list();
my $xxxx = $kingpin->arg('xxxx', 'set xxxx')->string_list();
$kingpin->parse;
is_deeply $name->value, ['default name', 'default name 2'];
is_deeply $xxxx->value, [];
};
subtest 'overloaded object default arg (hash)' => sub {
local @ARGV;
push @ARGV, qw();
my $kingpin = Getopt::Kingpin->new;
my $name = $kingpin->arg('name', 'set name')->default(ov {{"foo"=>"a","bar"=>"b"}})->string_hash();
my $xxxx = $kingpin->arg('xxxx', 'set xxxx')->string_hash();
$kingpin->parse;
is_deeply $name->value, {"foo"=>"a","bar"=>"b"};
is_deeply $xxxx->value, {};
};
subtest 'non-overloaded object default' => sub {
local @ARGV;
push @ARGV, qw();
my $kingpin = Getopt::Kingpin->new;
my $name = $kingpin->arg('name', 'set name')->default(bless({'x'=>3}, 'Local::SomePackage'));
my $xxxx = $kingpin->arg('xxxx', 'set xxxx');
$kingpin->parse;
is_deeply $name->value, bless({'x'=>3}, 'Local::SomePackage');
is_deeply $xxxx->value, undef;
t/07_override_default_from_envvar.t view on Meta::CPAN
use strict;
use Test::More 0.98;
use Test::Exception;
use Capture::Tiny ':all';
use Getopt::Kingpin;
subtest 'default' => sub {
local @ARGV;
push @ARGV, qw();
$ENV{KINGPIN_TEST_NAME} = "name from env var";
my $kingpin = Getopt::Kingpin->new;
my $name = $kingpin->flag('name', 'set name')->default("default name")->override_default_from_envar("KINGPIN_TEST_NAME")->string();
$kingpin->parse;
is $name, 'name from env var';
delete $ENV{KINGPIN_TEST_NAME};
};
subtest 'default arg' => sub {
local @ARGV;
push @ARGV, qw();
$ENV{KINGPIN_TEST_NAME} = "name from env var";
my $kingpin = Getopt::Kingpin->new;
my $name = $kingpin->arg('name', 'set name')->default("default name")->override_default_from_envar("KINGPIN_TEST_NAME")->string();
$kingpin->parse;
is $name, 'name from env var';
delete $ENV{KINGPIN_TEST_NAME};
};
subtest 'default arg (no env var)' => sub {
local @ARGV;
push @ARGV, qw();
my $kingpin = Getopt::Kingpin->new;
my $name = $kingpin->arg('name', 'set name')->default("default name")->override_default_from_envar("KINGPIN_TEST_NAME")->string();
$kingpin->parse;
is $name, 'default name';
};
subtest 'default with error' => sub {
local @ARGV;
push @ARGV, qw();
$ENV{KINGPIN_TEST_ID} = "xxx";
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my $name = $kingpin->flag('id', 'set id')->default("default id")->override_default_from_envar("KINGPIN_TEST_ID")->int();
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
like $stderr, qr/int parse error/, 'int parse error';
is $exit, 1;
delete $ENV{KINGPIN_TEST_NAME};
};
subtest 'default with error (no env var)' => sub {
local @ARGV;
push @ARGV, qw();
$ENV{KINGPIN_TEST_ID} = "xxx";
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my $name = $kingpin->flag('id', 'set id')->default("default id")->int();
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
like $stderr, qr/int parse error/, 'int parse error';
is $exit, 1;
delete $ENV{KINGPIN_TEST_NAME};
};
subtest 'default with error (no env var, list)' => sub {
local @ARGV;
push @ARGV, qw();
$ENV{KINGPIN_TEST_ID} = "xxx";
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my $name = $kingpin->flag('id', 'set id')->default(["default id"])->int_list();
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
like $stderr, qr/int parse error/, 'int parse error';
is $exit, 1;
delete $ENV{KINGPIN_TEST_NAME};
};
subtest 'default arg with error' => sub {
local @ARGV;
push @ARGV, qw();
$ENV{KINGPIN_TEST_ID} = "xxx";
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my $name = $kingpin->arg('id', 'set id')->default("default id")->override_default_from_envar("KINGPIN_TEST_ID")->int();
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
like $stderr, qr/int parse error/, 'int parse error';
is $exit, 1;
delete $ENV{KINGPIN_TEST_NAME};
};
subtest 'default arg with error (no env var)' => sub {
local @ARGV;
push @ARGV, qw();
$ENV{KINGPIN_TEST_ID} = "xxx";
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my $name = $kingpin->arg('id', 'set id')->default("default id")->int();
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
like $stderr, qr/int parse error/, 'int parse error';
is $exit, 1;
delete $ENV{KINGPIN_TEST_NAME};
};
subtest 'default arg with error (no env var)' => sub {
local @ARGV;
push @ARGV, qw();
$ENV{KINGPIN_TEST_ID} = "xxx";
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my $name = $kingpin->arg('id', 'set id')->default(["default id"])->int_list();
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
t/08_with_equal.t view on Meta::CPAN
use strict;
use Test::More 0.98;
use Test::Exception;
use Getopt::Kingpin;
subtest 'with equal' => sub {
local @ARGV;
push @ARGV, qw(--name=kingpin);
my $kingpin = Getopt::Kingpin->new;
my $name = $kingpin->flag('name', 'set name')->string();
$kingpin->parse;
is $name, 'kingpin';
};
use strict;
use Test::More 0.98;
use Test::Exception;
use Getopt::Kingpin;
subtest 'get' => sub {
local @ARGV;
push @ARGV, qw(--name=kingpin);
my $kingpin = Getopt::Kingpin->new;
$kingpin->flag('name', 'set name')->string();
$kingpin->parse;
my $name = $kingpin->flags->get('name');
is ref $name, 'Getopt::Kingpin::Flag';
is $name, 'kingpin';
};
subtest 'args get' => sub {
local @ARGV;
push @ARGV, qw(kingpin);
my $kingpin = Getopt::Kingpin->new;
$kingpin->arg('name', 'set name')->string();
$kingpin->parse;
my $name = $kingpin->args->get_by_index(0);
is ref $name, 'Getopt::Kingpin::Arg';
is $name, 'kingpin';
t/10_bool.t view on Meta::CPAN
use strict;
use Test::More 0.98;
use Capture::Tiny ':all';
use Getopt::Kingpin;
subtest 'bool' => sub {
local @ARGV;
push @ARGV, qw(--verbose);
my $kingpin = Getopt::Kingpin->new;
my $x = $kingpin->flag('verbose', 'set verbose mode')->bool();
$kingpin->parse;
ok $x;
is $x, 1;
};
subtest 'bool negative' => sub {
local @ARGV;
push @ARGV, qw(--no-verbose);
my $kingpin = Getopt::Kingpin->new;
my $x = $kingpin->flag('verbose', 'set verbose mode')->bool();
$kingpin->parse;
ok not $x;
is $x, 0;
};
subtest 'bool default' => sub {
local @ARGV;
push @ARGV, qw();
my $kingpin = Getopt::Kingpin->new;
my $x = $kingpin->flag('verbose', 'set verbose mode')->default(1)->bool();
$kingpin->parse;
ok $x;
is $x, 1;
};
subtest 'bool default 2' => sub {
local @ARGV;
push @ARGV, qw();
my $kingpin = Getopt::Kingpin->new;
my $x = $kingpin->flag('verbose', 'set verbose mode')->default(0)->bool();
$kingpin->parse;
ok not $x;
is $x, 0;
};
subtest 'bool required' => sub {
local @ARGV;
push @ARGV, qw(--verbose);
my $kingpin = Getopt::Kingpin->new;
my $x = $kingpin->flag('verbose', 'set verbose mode')->required()->bool();
$kingpin->parse;
ok $x;
is $x, 1;
};
subtest 'bool required 2' => sub {
local @ARGV;
push @ARGV, qw(--no-verbose);
my $kingpin = Getopt::Kingpin->new;
my $x = $kingpin->flag('verbose', 'set verbose mode')->required()->bool();
$kingpin->parse;
ok not $x;
is $x, 0;
};
subtest 'bool required 3' => sub {
local @ARGV;
push @ARGV, qw();
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my $x = $kingpin->flag('verbose', 'set verbose mode')->required()->bool();
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
t/11_invalid_flag.t view on Meta::CPAN
use strict;
use Test::More 0.98;
use Capture::Tiny ':all';
use Getopt::Kingpin;
subtest 'invalid flag' => sub {
local @ARGV;
push @ARGV, qw(--verbose);
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
like $stderr, qr/error: unknown long flag '--verbose', try --help/, 'invalid flag';
is $exit, 1;
};
subtest 'invalid flag 2' => sub {
local @ARGV;
push @ARGV, qw(-v);
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
like $stderr, qr/error: unknown short flag '-v', try --help/, 'invalid flag';
use strict;
use Test::More 0.98;
use Test::Exception;
use Capture::Tiny ':all';
use Getopt::Kingpin;
subtest 'arg' => sub {
local @ARGV;
push @ARGV, qw(--name=kingpin arg1 arg2);
my $kingpin = Getopt::Kingpin->new;
my $name = $kingpin->flag('name', 'set name')->string();
my $arg1 = $kingpin->arg('arg1', 'set arg1')->string();
my $arg2 = $kingpin->arg('arg2', 'set arg2')->string();
$kingpin->parse;
is $name, 'kingpin';
is $arg1, 'arg1';
is $arg2, 'arg2';
};
subtest 'arg required' => sub {
local @ARGV;
push @ARGV, qw(--name=kingpin arg1);
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my $name = $kingpin->flag('name', 'set name')->string();
my $arg1 = $kingpin->arg('arg1', 'set arg1')->string();
my $arg2 = $kingpin->arg('arg2', 'set arg2')->required->string();
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
like $stderr, qr/required arg 'arg2' not provided/, 'required error';
is $exit, 1;
};
subtest 'arg required 2' => sub {
local @ARGV;
push @ARGV, qw(--name=kingpin);
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my $name = $kingpin->flag('name', 'set name')->string();
my $arg1 = $kingpin->arg('arg1', 'set arg1')->string();
my $arg2 = $kingpin->arg('arg2', 'set arg2')->required->string();
# requiredãã¤ãã¦ããæåã¯ãå
¨ã¦requiredã®æ±ã
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
like $stderr, qr/required arg 'arg2' not provided/, 'required error';
is $exit, 1;
};
subtest 'arg required 3' => sub {
local @ARGV;
push @ARGV, qw(--name=kingpin arg1 arg2);
my $kingpin = Getopt::Kingpin->new;
my $name = $kingpin->flag('name', 'set name')->string();
my $arg1 = $kingpin->arg('arg1', 'set arg1')->string();
my $arg2 = $kingpin->arg('arg2', 'set arg2')->required->string();
# requiredãã¤ãã¦ããæåã¯ãå
¨ã¦requiredã®æ±ã
lives_ok {
$kingpin->parse;
};
is $arg1, 'arg1';
is $arg2, 'arg2';
};
subtest 'arg num' => sub {
local @ARGV;
push @ARGV, qw(--name=kingpin arg1);
my $kingpin = Getopt::Kingpin->new;
my $name = $kingpin->flag('name', 'set name')->string();
my $arg1 = $kingpin->arg('arg1', 'set arg1')->string();
$kingpin->parse;
is $arg1, 'arg1';
};
subtest 'arg get' => sub {
local @ARGV;
push @ARGV, qw(arg1);
my $kingpin = Getopt::Kingpin->new;
my $arg1 = $kingpin->arg('arg1', 'set arg1')->string();
$kingpin->parse;
is $kingpin->args->get_by_index(0), 'arg1';
};
t/13_value.t view on Meta::CPAN
use strict;
use Test::More 0.98;
use Test::Exception;
use Capture::Tiny ':all';
use Getopt::Kingpin;
subtest 'default type' => sub {
local @ARGV;
push @ARGV, qw(--name=kingpin hello);
my $kingpin = Getopt::Kingpin->new;
my $name = $kingpin->flag('name', 'set name');
my $word = $kingpin->arg('word', 'set word');
$kingpin->parse;
is $name, 'kingpin';
is $word, 'hello';
};
subtest 'validate value' => sub {
local @ARGV;
push @ARGV, qw(--num 10);
my $kingpin = Getopt::Kingpin->new;
my $num = $kingpin->flag('num', 'set number')->int();
$kingpin->parse;
is $num, 10;
};
subtest 'validate value parse error' => sub {
local @ARGV;
push @ARGV, qw(--num ten);
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my $num = $kingpin->flag('num', 'set number')->int();
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
t/14_help.t view on Meta::CPAN
use strict;
use Test::More 0.98;
use Test::Exception;
use Capture::Tiny ':all';
use Getopt::Kingpin;
use File::Basename;
subtest 'help' => sub {
local @ARGV;
push @ARGV, qw(--help);
my $kingpin = Getopt::Kingpin->new();
$kingpin->terminate(sub {return @_});
my $verbose = $kingpin->flag('verbose', 'Verbose mode.')->short('v')->bool();
my $name = $kingpin->arg('name', 'Name of user.')->required()->string();
my $expected = sprintf <<'...', basename($0);
usage: %s [<flags>] <name>
t/14_help.t view on Meta::CPAN
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse
};
is $exit, 0;
is $stdout, $expected;
};
subtest 'help short' => sub {
local @ARGV;
push @ARGV, qw(-h);
my $kingpin = Getopt::Kingpin->new();
$kingpin->terminate(sub {return @_});
$kingpin->flags->get("help")->short('h');
my $verbose = $kingpin->flag('verbose', 'Verbose mode.')->short('v')->bool();
my $name = $kingpin->arg('name', 'Name of user.')->required()->string();
my $expected = sprintf <<'...', basename($0);
usage: %s [<flags>] <name>
t/14_help.t view on Meta::CPAN
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $exit, 0;
is $stdout, $expected;
};
subtest 'help max_length_of_flag' => sub {
local @ARGV;
push @ARGV, qw(-h);
my $kingpin = Getopt::Kingpin->new();
$kingpin->terminate(sub {return @_});
$kingpin->flags->get("help")->short('h');
my $verbose = $kingpin->flag('verbose', 'Verbose mode.')->short('v')->bool();
my $ip = $kingpin->flag('ip', 'IP address.')->string();
my $expected = sprintf <<'...', basename($0);
usage: %s [<flags>]
t/14_help.t view on Meta::CPAN
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $exit, 0;
is $stdout, $expected;
};
subtest 'help max_length_of_flag 2' => sub {
local @ARGV;
push @ARGV, qw(-h);
my $kingpin = Getopt::Kingpin->new();
$kingpin->terminate(sub {return @_});
$kingpin->flags->get("help")->short('h');
my $verbose = $kingpin->flag('verbose', 'Verbose mode.')->short('v')->bool();
my $ip = $kingpin->flag('ipaddress', 'IP address.')->string();
my $expected = sprintf <<'...', basename($0);
usage: %s [<flags>]
t/14_help.t view on Meta::CPAN
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $exit, 0;
is $stdout, $expected;
};
subtest 'help max_length_of_arg' => sub {
local @ARGV;
push @ARGV, qw(-h);
my $kingpin = Getopt::Kingpin->new();
$kingpin->terminate(sub {return @_});
$kingpin->flags->get("help")->short('h');
my $verbose = $kingpin->flag('verbose', 'Verbose mode.')->short('v')->bool();
my $ip = $kingpin->flag('ip', 'IP address.')->bool();
my $name = $kingpin->arg('name', 'Name of user.')->required()->string();
my $name = $kingpin->arg('age', 'Age of user.')->required()->int();
t/14_help.t view on Meta::CPAN
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $exit, 0;
is $stdout, $expected;
};
subtest 'help max_length_of_arg 2' => sub {
local @ARGV;
push @ARGV, qw(-h);
my $kingpin = Getopt::Kingpin->new();
$kingpin->terminate(sub {return @_});
$kingpin->flags->get("help")->short('h');
my $verbose = $kingpin->flag('verbose', 'Verbose mode.')->short('v')->bool();
my $ip = $kingpin->flag('ip', 'IP address.')->string();
my $name = $kingpin->arg('age', 'Age of user.')->required()->int();
my $name = $kingpin->arg('name', 'Name of user.')->required()->string();
t/14_help.t view on Meta::CPAN
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $exit, 0;
is $stdout, $expected;
};
subtest 'help required' => sub {
local @ARGV;
push @ARGV, qw(-h);
my $kingpin = Getopt::Kingpin->new();
$kingpin->terminate(sub {return @_});
$kingpin->flags->get("help")->short('h');
my $verbose = $kingpin->flag('verbose', 'Verbose mode.')->short('v')->bool();
my $ip = $kingpin->flag('ip', 'IP address.')->string();
my $name = $kingpin->arg('age', 'Age of user.')->required()->int();
my $name = $kingpin->arg('name', 'Name of user.')->string();
t/14_help.t view on Meta::CPAN
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $exit, 0;
is $stdout, $expected;
};
subtest 'app info' => sub {
local @ARGV;
push @ARGV, qw(--help);
my $kingpin = Getopt::Kingpin->new("app_name", "app_description");
$kingpin->terminate(sub {return @_});
my $expected = sprintf <<'...';
usage: app_name [<flags>]
app_description
t/14_help.t view on Meta::CPAN
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $exit, 0;
is $stdout, $expected;
};
subtest 'place holder' => sub {
local @ARGV;
push @ARGV, qw(--help);
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
$kingpin->flag("name", "Set name.")->string();
my $expected = sprintf <<'...', basename($0);
usage: %s [<flags>]
Flags:
t/14_help.t view on Meta::CPAN
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $stdout, $expected;
};
subtest 'default' => sub {
local @ARGV;
push @ARGV, qw(--help);
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my $name = $kingpin->flag('name', 'Set name.')->default("default name")->string();
my $expected = sprintf <<'...', basename($0);
usage: %s [<flags>]
Flags:
t/14_help.t view on Meta::CPAN
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $stdout, $expected;
};
subtest 'default2' => sub {
local @ARGV;
push @ARGV, qw(--help);
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my $name = $kingpin->flag('name', 'Set name.')->default("")->string();
my $id1 = $kingpin->flag('id1', 'Set id1.')->default(1)->int();
my $id2 = $kingpin->flag('id2', 'Set id2.')->default(0)->int();
my $expected = sprintf <<'...', basename($0);
usage: %s [<flags>]
t/14_help.t view on Meta::CPAN
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $stdout, $expected;
};
subtest 'default3' => sub {
local @ARGV;
push @ARGV, qw(--help);
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my $name = $kingpin->flag('name', 'Set name.')->default(sub{ "default name" })->string();
my $expected = sprintf <<'...', basename($0);
usage: %s [<flags>]
Flags:
t/14_help.t view on Meta::CPAN
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $stdout, $expected;
};
subtest 'default4' => sub {
{ package Local::Overloaded; use overload '&{}' => sub { $_[0][0] } };
local @ARGV;
push @ARGV, qw(--help);
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my $name = $kingpin->flag('name', 'Set name.')->default(bless [sub{ "default name" }], 'Local::Overloaded')->string();
my $expected = sprintf <<'...', basename($0);
usage: %s [<flags>]
Flags:
t/14_help.t view on Meta::CPAN
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $stdout, $expected;
};
subtest 'default5' => sub {
require Path::Tiny;
local @ARGV;
push @ARGV, qw(--help);
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my $name = $kingpin->flag('input', 'Set input.')->default(Path::Tiny::path('Build.PL'))->file();
my $expected = sprintf <<'...', basename($0);
usage: %s [<flags>]
Flags:
t/14_help.t view on Meta::CPAN
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $stdout, $expected;
};
subtest 'place holder' => sub {
local @ARGV;
push @ARGV, qw(--help);
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my $name = $kingpin->flag('name', 'Set name.')->placeholder("place_holder_name")->string();
my $expected = sprintf <<'...', basename($0);
usage: %s [<flags>]
Flags:
t/14_help.t view on Meta::CPAN
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $stdout, $expected;
};
subtest 'place holder' => sub {
local @ARGV;
push @ARGV, qw(--help);
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my $name = $kingpin->flag('name', 'Set name.')->placeholder("place_holder_name")->string();
my $id1 = $kingpin->flag('id1', 'Set id1.')->placeholder("1")->int();
my $id2 = $kingpin->flag('id2', 'Set id2.')->placeholder("0")->int();
my $expected = sprintf <<'...', basename($0);
usage: %s [<flags>]
t/14_help.t view on Meta::CPAN
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $stdout, $expected;
};
subtest 'place holder with default' => sub {
local @ARGV;
push @ARGV, qw(--help);
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my $name = $kingpin->flag('name', 'Set name.')->placeholder("place_holder_name")->default("default name")->string();
my $expected = sprintf <<'...', basename($0);
usage: %s [<flags>]
Flags:
t/14_help.t view on Meta::CPAN
...
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $stdout, $expected;
};
subtest 'flag with hidden flag' => sub {
local @ARGV;
push @ARGV, qw(--help);
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my $name = $kingpin->flag('name', 'Set name.')->hidden->string();
my $expected = sprintf <<'...', basename($0);
usage: %s [<flags>]
t/15_flags.t view on Meta::CPAN
use strict;
use Test::More 0.98;
use Test::Exception;
use Capture::Tiny ':all';
use Getopt::Kingpin;
use File::Basename;
subtest 'flag error' => sub {
local @ARGV;
push @ARGV, qw();
my $kingpin = Getopt::Kingpin->new();
my $verbose = $kingpin->flag('verbose', 'Verbose mode.')->short('v')->bool();
throws_ok {
my $verbose = $kingpin->flag('verbose', 'Verbose mode.')->bool();
} qr/flag verbose is already exists/;
};
subtest 'flags ordered help' => sub {
local @ARGV;
push @ARGV, qw(--help);
my $kingpin = Getopt::Kingpin->new();
$kingpin->terminate(sub {return @_});
my $verbose3 = $kingpin->flag('verbose3', 'Verbose mode.')->bool();
my $verbose1 = $kingpin->flag('verbose1', 'Verbose mode.')->bool();
my $verbose2 = $kingpin->flag('verbose2', 'Verbose mode.')->bool();
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
t/16_type.t view on Meta::CPAN
use strict;
use Test::More 0.98;
use Test::Exception;
use Getopt::Kingpin;
subtest 'type error' => sub {
local @ARGV;
push @ARGV, qw(--verbose);
my $kingpin = Getopt::Kingpin->new();
my $verbose = $kingpin->flag('verbose', 'Verbose mode.')->short('v')->bool();
$verbose->type("__type_error__");
throws_ok {
$kingpin->parse;
} qr/type error '__type_error__'/;
};
subtest 'type error 2' => sub {
local @ARGV;
my $kingpin = Getopt::Kingpin->new();
throws_ok {
$kingpin->flag('verbose', 'Verbose mode.')->short('v')->type_error();
} qr/type error 'TypeError'/;
};
done_testing;
t/17_version.t view on Meta::CPAN
use strict;
use Test::More 0.98;
use Capture::Tiny ':all';
use Getopt::Kingpin;
use File::Basename;
subtest 'version' => sub {
local @ARGV;
push @ARGV, qw(--version);
my $kingpin = Getopt::Kingpin->new();
$kingpin->terminate(sub {return @_});
$kingpin->version("v1.2.3");
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is $stderr, "v1.2.3\n";
is $exit, 0;
};
subtest 'version help' => sub {
local @ARGV;
push @ARGV, qw(--help);
my $kingpin = Getopt::Kingpin->new();
$kingpin->terminate(sub {return @_});
$kingpin->version("v1.2.3");
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
t/18_file.t view on Meta::CPAN
use strict;
use Test::More 0.98;
use Test::Exception;
use Capture::Tiny ':all';
use Getopt::Kingpin;
subtest 'file' => sub {
local @ARGV;
push @ARGV, qw(kingpin Build.PL);
my $kingpin = Getopt::Kingpin->new();
my $name = $kingpin->arg("name", "")->string();
my $path = $kingpin->arg("path", "")->file();
$kingpin->parse;
my $x = $name->value;
t/18_file.t view on Meta::CPAN
my $y = $path->value;
is $path, "Build.PL";
is ref $path, "Getopt::Kingpin::Arg";
is $y, "Build.PL";
is ref $y, "Path::Tiny";
};
subtest 'existing_file' => sub {
local @ARGV;
push @ARGV, qw(kingpin Build.PL);
my $kingpin = Getopt::Kingpin->new();
my $name = $kingpin->arg("name", "")->string();
my $path = $kingpin->arg("path", "")->existing_file();
$kingpin->parse;
my $x = $name->value;
t/18_file.t view on Meta::CPAN
my $y = $path->value;
is $path, "Build.PL";
is ref $path, "Getopt::Kingpin::Arg";
is $y, "Build.PL";
is ref $y, "Path::Tiny";
};
subtest 'existing_file is dir' => sub {
local @ARGV;
push @ARGV, qw(lib);
my $kingpin = Getopt::Kingpin->new();
$kingpin->terminate(sub {return @_});
my $path = $kingpin->arg("path", "")->existing_file();
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
like $stderr, qr/error: 'lib' is a directory, try --help/;
is $exit, 1;
};
subtest 'existing_file error' => sub {
local @ARGV;
push @ARGV, qw(kingpin Build.PL NOT_FOUND_FILE);
my $kingpin = Getopt::Kingpin->new();
$kingpin->terminate(sub {return @_});
my $name = $kingpin->arg("name", "")->string();
my $path = $kingpin->arg("path", "")->file();
my $not_found = $kingpin->arg("not_found", "")->existing_file();
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
like $stderr, qr/error: path 'NOT_FOUND_FILE' does not exist, try --help/;
is $exit, 1;
};
subtest 'file with default' => sub {
local @ARGV;
my $kingpin = Getopt::Kingpin->new();
my $path = $kingpin->flag("path", "")->default("Build.PL")->file();
$kingpin->parse;
is $path, "Build.PL";
is ref $path->value, "Path::Tiny";
};
subtest 'file with blessed default' => sub {
local @ARGV;
require Path::Tiny;
my $kingpin = Getopt::Kingpin->new();
my $path = $kingpin->flag("path", "")->default(Path::Tiny::path("Build.PL"))->file();
$kingpin->parse;
is $path, "Build.PL";
is ref $path->value, "Path::Tiny";
};
t/19_dash.t view on Meta::CPAN
use strict;
use Test::More 0.98;
use Getopt::Kingpin;
subtest 'double dash' => sub {
local @ARGV;
push @ARGV, qw(--name kingpin -- path);
my $kingpin = Getopt::Kingpin->new();
my $name = $kingpin->flag("name", "")->string();
my $path = $kingpin->arg("path", "")->file();
$kingpin->parse;
my $x = $name->value;
is $name, "kingpin";
is $path, "path";
};
subtest 'double dash 2' => sub {
local @ARGV;
push @ARGV, qw(--name kingpin -- --path);
my $kingpin = Getopt::Kingpin->new();
my $name = $kingpin->flag("name", "")->string();
my $path = $kingpin->arg("path", "")->file();
$kingpin->parse;
my $x = $name->value;
is $name, "kingpin";
is $path, "--path";
};
subtest 'double dash 3' => sub {
local @ARGV;
push @ARGV, qw(-n kingpin -- -v);
my $kingpin = Getopt::Kingpin->new();
my $name = $kingpin->flag("name", "")->short("n")->string();
my $verbose = $kingpin->flag("verbose", "")->short("v")->bool();
my $path = $kingpin->arg("path", "")->file();
$kingpin->parse;
my $x = $name->value;
t/20_flag_keys.t view on Meta::CPAN
use strict;
use Test::More 0.98;
use Getopt::Kingpin;
subtest 'double dash' => sub {
local @ARGV;
push @ARGV, qw(--name kingpin -- path);
my $kingpin = Getopt::Kingpin->new();
$kingpin->flag("bbb", "")->string();
$kingpin->flag("ccc", "")->string();
$kingpin->flag("aaa", "")->string();
$kingpin->flag("eee", "")->string();
$kingpin->flag("ddd", "")->string();
my @keys = $kingpin->flags->keys;
use strict;
use Test::More 0.98;
use Test::Exception;
use Capture::Tiny ':all';
use Getopt::Kingpin;
subtest 'existing_dir' => sub {
local @ARGV;
push @ARGV, qw(lib);
my $kingpin = Getopt::Kingpin->new();
my $path = $kingpin->arg("path", "")->existing_dir();
$kingpin->parse;
my $x = $path->value;
is $path, "lib";
is ref $path, "Getopt::Kingpin::Arg";
is $x, "lib";
is ref $x, "Path::Tiny";
is $x->is_dir, 1;
};
subtest 'existing_dir is file' => sub {
local @ARGV;
push @ARGV, qw(Build.PL);
my $kingpin = Getopt::Kingpin->new();
$kingpin->terminate(sub {return @_});
my $path = $kingpin->arg("path", "")->existing_dir();
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
like $stderr, qr/error: 'Build.PL' is a file, try --help/;
is $exit, 1;
};
subtest 'existing_dir error' => sub {
local @ARGV;
push @ARGV, qw(NOT_FOUND_DIR);
my $kingpin = Getopt::Kingpin->new();
$kingpin->terminate(sub {return @_});
my $path = $kingpin->arg("path", "")->existing_dir();
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
like $stderr, qr/error: path 'NOT_FOUND_DIR' does not exist, try --help/;
is $exit, 1;
};
subtest 'existing_dir with default' => sub {
local @ARGV;
my $kingpin = Getopt::Kingpin->new();
my $path = $kingpin->arg("path", "")->default("lib")->existing_dir();
$kingpin->parse;
is $path, "lib";
is ref $path->value, "Path::Tiny";
is $path->value->is_dir, 1;
};
subtest 'existing_dir with envar' => sub {
local @ARGV;
$ENV{KINGPIN_TEST_PATH} = "lib";
my $kingpin = Getopt::Kingpin->new();
my $path = $kingpin->arg("path", "")->override_default_from_envar("KINGPIN_TEST_PATH")->existing_dir();
$kingpin->parse;
is $path, "lib";
is ref $path->value, "Path::Tiny";
is $path->value->is_dir, 1;
t/22_file_or_dir.t view on Meta::CPAN
use strict;
use Test::More 0.98;
use Test::Exception;
use Capture::Tiny ':all';
use Getopt::Kingpin;
subtest 'existing_file_or_dir file' => sub {
local @ARGV;
push @ARGV, qw(Build.PL);
my $kingpin = Getopt::Kingpin->new();
my $path = $kingpin->arg("path", "")->existing_file_or_dir();
$kingpin->parse;
my $x = $path->value;
is $path, "Build.PL";
is ref $path, "Getopt::Kingpin::Arg";
is $x, "Build.PL";
is ref $x, "Path::Tiny";
ok $x->is_file;
};
subtest 'existing_file_or_dir dir' => sub {
local @ARGV;
push @ARGV, qw(lib);
my $kingpin = Getopt::Kingpin->new();
my $path = $kingpin->arg("path", "")->existing_file_or_dir();
$kingpin->parse;
my $x = $path->value;
is $path, "lib";
is ref $path, "Getopt::Kingpin::Arg";
is $x, "lib";
is ref $x, "Path::Tiny";
ok $x->is_dir;
};
subtest 'existing_file_or_dir not found' => sub {
local @ARGV;
push @ARGV, qw(NOT_FOUND);
my $kingpin = Getopt::Kingpin->new();
$kingpin->terminate(sub {return @_});
my $path = $kingpin->arg("path", "")->existing_file_or_dir();
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
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";
t/23_command.t view on Meta::CPAN
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";
t/23_command.t view on Meta::CPAN
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> ...]
t/23_command.t view on Meta::CPAN
...
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);
t/23_command.t view on Meta::CPAN
...
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> ...]
t/23_command.t view on Meta::CPAN
...
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> ...]
t/23_command.t view on Meta::CPAN
...
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>]
t/23_command.t view on Meta::CPAN
...
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>]
t/23_command.t view on Meta::CPAN
...
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>]
t/23_command.t view on Meta::CPAN
...
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>]
t/23_command.t view on Meta::CPAN
...
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>]
t/23_command.t view on Meta::CPAN
...
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
t/23_command.t view on Meta::CPAN
...
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>]
t/23_command.t view on Meta::CPAN
...
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);
t/23_command.t view on Meta::CPAN
...
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");
t/23_command.t view on Meta::CPAN
...
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);
t/23_command.t view on Meta::CPAN
...
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.');
t/23_command.t view on Meta::CPAN
...
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.');
t/23_command.t view on Meta::CPAN
...
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.');
t/23_command.t view on Meta::CPAN
...
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.');
t/23_command.t view on Meta::CPAN
...
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.');
t/23_command.t view on Meta::CPAN
...
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.');
t/23_command.t view on Meta::CPAN
...
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;
t/23_command.t view on Meta::CPAN
...
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;
t/23_command.t view on Meta::CPAN
...
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;
t/23_command.t view on Meta::CPAN
...
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;
t/24_user_type.t view on Meta::CPAN
use strict;
use Test::More 0.98;
use Test::Exception;
use Getopt::Kingpin;
use Getopt::Kingpin::Command;
subtest 'foo' => sub {
local @ARGV;
push @ARGV, qw(foo);
my $kingpin = Getopt::Kingpin->new();
my $foo = $kingpin->arg("foo", "set foo")->foo();
$kingpin->parse;
is ref $foo, "Getopt::Kingpin::Arg";
is $foo, "foo";
is $foo->value, "foo";
};
subtest 'digest_md5' => sub {
local @ARGV;
push @ARGV, qw(md5);
my $kingpin = Getopt::Kingpin->new();
my $md5 = $kingpin->arg("md5", "set keyword")->digest_md5();
$kingpin->parse;
is ref $md5, "Getopt::Kingpin::Arg";
is $md5, "1bc29b36f623ba82aaf6724fd3b16718";
is $md5->value, "1bc29b36f623ba82aaf6724fd3b16718";
t/25_parse.t view on Meta::CPAN
use strict;
use Test::More 0.98;
use Test::Exception;
use Getopt::Kingpin;
use Getopt::Kingpin::Command;
subtest 'parse() return' => 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 ref $cmd, "Getopt::Kingpin::Command";
t/25_parse.t view on Meta::CPAN
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 'parse() with empty arrayref will ignore @ARGV' => sub {
local @ARGV;
push @ARGV, qw(post --server 127.0.0.1 --image=abc.jpg);
my $kingpin = Getopt::Kingpin->new();
my $cmd = $kingpin->parse([]);
is ref $cmd, 'Getopt::Kingpin';
};
done_testing;
t/26_repeatable.t view on Meta::CPAN
use strict;
use Test::More 0.98;
use Test::Exception;
use Capture::Tiny ':all';
use Getopt::Kingpin;
subtest 'repeatable flag error' => sub {
local @ARGV;
push @ARGV, qw(--xxx a --xxx b --xxx c);
my $kingpin = Getopt::Kingpin->new();
$kingpin->terminate(sub {return @_});
my $args = $kingpin->flag("xxx", "xxx yyy")->string();
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
like $stderr, qr/error: flag 'xxx' cannot be repeated, try --help/;
is $exit, 1;
};
subtest 'repeatable flag (is_cumulative)' => sub {
local @ARGV;
push @ARGV, qw(--xxx a --xxx b --xxx c);
my $kingpin = Getopt::Kingpin->new();
my $args = $kingpin->flag("xxx", "xxx yyy")->string_list();
#$args->is_cumulative(1);
my $cmd = $kingpin->parse;
is_deeply $args->value, ['a', 'b', 'c'];
};
subtest 'repeatable flag (is_cumulative no-flags)' => sub {
local @ARGV;
push @ARGV, qw();
my $kingpin = Getopt::Kingpin->new();
my $args = $kingpin->flag("xxx", "xxx yyy")->string_list();
#$args->is_cumulative(1);
my $cmd = $kingpin->parse;
is_deeply $args->value, [];
};
subtest 'repeatable flag 2 (is_cumulative)' => sub {
local @ARGV;
push @ARGV, qw(--xxx a --xxx b --xxx c);
my $kingpin = Getopt::Kingpin->new();
my $args = $kingpin->flag("xxx", "xxx yyy")->file_list();
#$args->is_cumulative(1);
my $cmd = $kingpin->parse;
is ref $args->value->[0], "Path::Tiny";
is ref $args->value->[1], "Path::Tiny";
is ref $args->value->[2], "Path::Tiny";
is $args->value->[0], 'a';
is $args->value->[1], 'b';
is $args->value->[2], 'c';
};
subtest 'repeatable arg error' => sub {
local @ARGV;
push @ARGV, qw(a b c);
my $kingpin = Getopt::Kingpin->new();
$kingpin->terminate(sub {return @_});
my $args = $kingpin->arg("xxx", "xxx yyy")->string();
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
like $stderr, qr/error: unexpected b, try --help/;
is $exit, 1;
};
subtest 'repeatable arg (is_cumulative)' => sub {
local @ARGV;
push @ARGV, qw(a b c);
my $kingpin = Getopt::Kingpin->new();
my $args = $kingpin->arg("xxx", "xxx yyy")->string_list();
my $cmd = $kingpin->parse;
is_deeply $args->value, ['a', 'b', 'c'];
};
subtest 'repeatable arg (is_cumulative no-args)' => sub {
local @ARGV;
push @ARGV, qw();
my $kingpin = Getopt::Kingpin->new();
my $args = $kingpin->arg("xxx", "xxx yyy")->string_list();
my $cmd = $kingpin->parse;
is_deeply $args->value, [];
};
subtest 'repeatable arg 2 (is_cumulative)' => sub {
local @ARGV;
push @ARGV, qw(a b c);
my $kingpin = Getopt::Kingpin->new();
my $args = $kingpin->arg("xxx", "xxx yyy")->file_list();
my $cmd = $kingpin->parse;
is ref $args->value->[0], "Path::Tiny";
is ref $args->value->[1], "Path::Tiny";
is ref $args->value->[2], "Path::Tiny";
is $args->value->[0], 'a';
is $args->value->[1], 'b';
is $args->value->[2], 'c';
};
subtest 'not repeatable and repeatable arg' => sub {
local @ARGV;
push @ARGV, qw(a b c);
my $kingpin = Getopt::Kingpin->new();
my $args1 = $kingpin->arg("xxx", "xxx yyy")->file();
my $args2 = $kingpin->arg("yyy", "xxx yyy")->file_list();
my $cmd = $kingpin->parse;
is ref $args1->value, "Path::Tiny";
is ref $args2->value->[0], "Path::Tiny";
is ref $args2->value->[1], "Path::Tiny";
is $args1->value, 'a';
is $args2->value->[0], 'b';
is $args2->value->[1], 'c';
};
subtest 'not repeatable and repeatable arg (required)' => sub {
local @ARGV;
push @ARGV, qw(a b c);
my $kingpin = Getopt::Kingpin->new();
my $args1 = $kingpin->arg("xxx", "xxx yyy")->required->file();
my $args2 = $kingpin->arg("yyy", "xxx yyy")->file_list();
my $cmd = $kingpin->parse;
is ref $args1->value, "Path::Tiny";
is ref $args2->value->[0], "Path::Tiny";
is ref $args2->value->[1], "Path::Tiny";
is $args1->value, 'a';
is $args2->value->[0], 'b';
is $args2->value->[1], 'c';
};
subtest 'not repeatable and repeatable arg 2 (required)' => sub {
local @ARGV;
push @ARGV, qw(a b c);
my $kingpin = Getopt::Kingpin->new();
my $args1 = $kingpin->arg("xxx", "xxx yyy")->required->file();
my $args2 = $kingpin->arg("yyy", "xxx yyy")->required->file_list();
my $cmd = $kingpin->parse;
is ref $args1->value, "Path::Tiny";
is ref $args2->value->[0], "Path::Tiny";
use strict;
use warnings;
use utf8;
use Test::More;
use Getopt::Kingpin;
subtest 'run' => sub {
local @ARGV;
push @ARGV, qw();
my $kingpin = Getopt::Kingpin->new({
name => 'run.pl',
});
is $kingpin->name, 'run.pl';
is $kingpin->description, '';
};
subtest 'run' => sub {
local @ARGV;
push @ARGV, qw();
my $kingpin = Getopt::Kingpin->new(
name => 'run.pl',
description => 'run.pl description',
);
is $kingpin->name, 'run.pl';
is $kingpin->description, 'run.pl description';
};
use strict;
use Test::More 0.98;
use Test::Exception;
use Capture::Tiny ':all';
use Getopt::Kingpin;
subtest 'num normal' => sub {
local @ARGV;
push @ARGV, qw(--x 0);
my $kingpin = Getopt::Kingpin->new;
my $x = $kingpin->flag('x', 'set x')->num();
$kingpin->parse;
is $x->value, 0;
ok $x == 0;
};
subtest 'num scientific notation 1' => sub {
local @ARGV;
push @ARGV, qw(--x 1e3);
my $kingpin = Getopt::Kingpin->new;
my $x = $kingpin->flag('x', 'set x')->num();
$kingpin->parse;
is $x->value + 0, 1000; # + 0 to force == instead of eq check
ok $x == 1000;
};
subtest 'num scientific notation 2' => sub {
local @ARGV;
push @ARGV, qw(--x -1.5e6);
my $kingpin = Getopt::Kingpin->new;
my $x = $kingpin->flag('x', 'set x')->num();
$kingpin->parse;
is $x->value + 0, -1_500_000;
ok $x == -1_500_000;
};
subtest 'num error' => sub {
local @ARGV;
push @ARGV, qw(--x ZERO);
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
my $x = $kingpin->flag('x', 'set x')->num();
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
like $stderr, qr/num parse error/, 'num parse error';
t/29_hash.t view on Meta::CPAN
use strict;
use Test::More 0.98;
use Test::Exception;
use Capture::Tiny ':all';
use Getopt::Kingpin;
subtest 'repeatable flag error' => sub {
local @ARGV;
push @ARGV, qw(--xxx a --xxx b --xxx c);
my $kingpin = Getopt::Kingpin->new();
$kingpin->terminate(sub {return @_});
my $args = $kingpin->flag("xxx", "xxx yyy")->string();
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
like $stderr, qr/error: flag 'xxx' cannot be repeated, try --help/;
is $exit, 1;
};
subtest 'repeatable flag (is_hash)' => sub {
local @ARGV;
push @ARGV, qw(--xxx a=a --xxx b= --xxx c);
my $kingpin = Getopt::Kingpin->new();
my $args = $kingpin->flag("xxx", "xxx yyy")->string_hash();
my $cmd = $kingpin->parse;
is_deeply $args->value, { a=>'a', b=>'', c=>undef };
};
subtest 'repeatable flag 2 (is_hash)' => sub {
local @ARGV;
push @ARGV, qw(--xxx a=a --xxx b=b --xxx c=c);
my $kingpin = Getopt::Kingpin->new();
my $args = $kingpin->flag("xxx", "xxx yyy")->file_hash();
my $cmd = $kingpin->parse;
is ref $args->value->{'a'}, "Path::Tiny";
is ref $args->value->{'b'}, "Path::Tiny";
is ref $args->value->{'c'}, "Path::Tiny";
is $args->value->{'a'}, 'a';
is $args->value->{'b'}, 'b';
is $args->value->{'c'}, 'c';
};
subtest 'repeatable flag 3 (is_hash)' => sub {
local @ARGV;
push @ARGV, qw(--xxx a=21 --xxx b=22 --xxx c=XYZ);
my $kingpin = Getopt::Kingpin->new();
$kingpin->terminate(sub {return @_});
my $args = $kingpin->flag("xxx", "xxx yyy")->int_hash();
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
is ref($args->value), 'HASH';
is $args->value->{'a'}, 21;
is $args->value->{'b'}, 22;
is $args->value->{'c'}, undef;
like $stderr, qr/int parse error/;
is $exit, 1;
};
subtest 'repeatable arg (is_hash)' => sub {
local @ARGV;
push @ARGV, qw(a=a b= c);
my $kingpin = Getopt::Kingpin->new();
my $args = $kingpin->arg("xxx", "xxx yyy")->string_hash();
my $cmd = $kingpin->parse;
is_deeply $args->value, { a=>'a', b=>'', c=>undef };
};
subtest 'repeatable arg 2 (is_hash)' => sub {
local @ARGV;
push @ARGV, qw(a=a b=b c=c);
my $kingpin = Getopt::Kingpin->new();
my $args = $kingpin->arg("xxx", "xxx yyy")->file_hash();
my $cmd = $kingpin->parse;
is ref $args->value->{'a'}, "Path::Tiny";
is ref $args->value->{'b'}, "Path::Tiny";
is ref $args->value->{'c'}, "Path::Tiny";
is $args->value->{'a'}, 'a';
is $args->value->{'b'}, 'b';
is $args->value->{'c'}, 'c';
};
subtest 'repeatable flag (is_hash) with default' => sub {
local @ARGV;
push @ARGV, qw();
my $kingpin = Getopt::Kingpin->new();
my $args = $kingpin->flag("xxx", "xxx yyy")->default({a=>'a',b=>'',c=>undef})->string_hash();
my $cmd = $kingpin->parse;
is_deeply $args->value, { a=>'a', b=>'', c=>undef };
};
subtest 'repeatable flag (is_hash) with no default and no flag on command line' => sub {
local @ARGV;
push @ARGV, qw();
my $kingpin = Getopt::Kingpin->new();
my $args = $kingpin->flag("xxx", "xxx yyy")->string_hash();
my $cmd = $kingpin->parse;
is_deeply $args->value, {};
};
subtest 'repeatable flag (is_hash) with bad default' => sub {
local @ARGV;
push @ARGV, qw();
my $kingpin = Getopt::Kingpin->new();
$kingpin->terminate(sub {return @_});
my $args = $kingpin->flag("xxx", "xxx yyy")->default({'a'=>'xyz'})->int_hash();
my ($stdout, $stderr, $ret, $exit) = capture {
$kingpin->parse;
};
t/30_hidden.t view on Meta::CPAN
use strict;
use Test::More 0.98;
use Getopt::Kingpin;
use Capture::Tiny ':all';
use File::Basename;
subtest 'hidden' => sub {
# from : t/20_flag_keys.t
local @ARGV;
push @ARGV, qw(--name kingpin -- path);
my $kingpin = Getopt::Kingpin->new();
$kingpin->flag("hidden1", "")->hidden->string();
$kingpin->flag("bbb", "")->string();
$kingpin->flag("hidden2", "")->hidden->string();
$kingpin->flag("ccc", "")->string();
$kingpin->flag("hidden3", "")->hidden->string();
$kingpin->flag("aaa", "")->string();
$kingpin->flag("hidden4", "")->hidden->string();
t/30_hidden.t view on Meta::CPAN
is $keys[1], "bbb";
is $keys[2], "ccc";
is $keys[3], "aaa";
is $keys[4], "eee";
is $keys[5], "ddd";
};
subtest 'hidden + command help 7-2' => sub {
# from : t/23_command.t
local @ARGV;
push @ARGV, qw(register --help);
my $kingpin = Getopt::Kingpin->new;
$kingpin->terminate(sub {return @_});
$kingpin->flag("hidden1", "")->hidden->string();
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;