view release on metacpan or search on metacpan
lib/MooseX/Getopt/Basic.pm view on Meta::CPAN
has ARGV => (is => 'rw', isa => 'ArrayRef', traits => ['NoGetopt']);
has extra_argv => (is => 'rw', isa => 'ArrayRef', traits => ['NoGetopt']);
sub process_argv {
my ($class, @params) = @_;
my $constructor_params = ( @params == 1 ? $params[0] : {@params} );
my $config_from_file;
if($class->meta->does_role('MooseX::ConfigFromFile')) {
local @ARGV = @ARGV;
# just get the configfile arg now out of @ARGV; the rest of the args
# will be fetched later
my $configfile;
my $opt_parser = Getopt::Long::Parser->new( config => [ qw( no_auto_help pass_through no_auto_version ) ] );
$opt_parser->getoptions( "configfile=s" => \$configfile );
my $cfmeta = $class->meta->find_attribute_by_name('configfile');
my $init_arg = $cfmeta->init_arg;
t/002_custom_option_type.t view on Meta::CPAN
);
has 'nums' => (
is => 'ro',
isa => 'ArrayOfInts',
default => sub { [0] }
);
}
{
local @ARGV = ();
my $app = App->new_with_options;
isa_ok($app, 'App');
is_deeply($app->nums, [0], '... nums is [0] as expected');
}
{
local @ARGV = ('--nums', 3, '--nums', 5);
my $app = App->new_with_options;
isa_ok($app, 'App');
is_deeply($app->nums, [3, 5], '... nums is [3, 5] as expected');
}
# Make sure it really used our =i@, instead of falling back
# to =s@ via the type system, and test that exceptions work
# while we're at it.
like(
exception {
local @ARGV = ('--nums', 3, '--nums', 'foo');
my $app = App->new_with_options;
},
qr/Value "foo" invalid/,
'Numeric constraint enforced',
);
done_testing;
t/003_inferred_option_type.t view on Meta::CPAN
where { scalar (grep { looks_like_number($_) } @$_) };
has 'nums' => (
is => 'ro',
isa => $array_of_ints,
default => sub { [0] }
);
}
{
local @ARGV = ();
my $app = App->new_with_options;
isa_ok($app, 'App');
is_deeply($app->nums, [0], '... nums is [0] as expected');
}
{
local @ARGV = ('--nums', 3, '--nums', 5);
my $app = App->new_with_options;
isa_ok($app, 'App');
is_deeply($app->nums, [3, 5], '... nums is [3, 5] as expected');
}
done_testing;
t/004_nogetop.t view on Meta::CPAN
has '_private_stuff_cmdline' => (
traits => ['Getopt'],
is => 'ro',
isa => 'Int',
default => 832,
cmd_flag => 'p',
);
}
{
local @ARGV = ();
my $app = App->new_with_options;
isa_ok( $app, 'App' );
ok( !$app->verbose, '... verbosity is off as expected' );
is( $app->length, 24, '... length is 24 as expected' );
is( $app->data, 'file.dat', '... data is file.dat as expected' );
is_deeply( $app->libs, [], '... libs is [] as expected' );
is_deeply( $app->details, {}, '... details is {} as expected' );
is($app->private_stuff, 713, '... private stuff is 713 as expected');
}
{
local @ARGV = (qw/--private_stuff 317/);
like exception { App->new_with_options }, qr/Unknown option: private_stuff/;
}
done_testing;
t/005_strict.t view on Meta::CPAN
);
has 'private_stuff' => (
is => 'ro',
isa => 'Int',
default => 713
);
}
{
local @ARGV = ();
my $app = App->new_with_options;
isa_ok( $app, 'App' );
ok( !$app->verbose, '... verbosity is off as expected' );
is( $app->length, 24, '... length is 24 as expected' );
is( $app->data, 'file.dat', '... data is file.dat as expected' );
is_deeply( $app->libs, [], '... libs is [] as expected' );
is_deeply( $app->details, {}, '... details is {} as expected' );
is($app->private_stuff, 713, '... private stuff is 713 as expected');
}
{
local @ARGV = (qw/--private_stuff 317/);
like exception { App->new_with_options }, qr/Unknown option: private_stuff/;
}
{
local @ARGV = (qw/--length 100/);
like exception { App->new_with_options }, qr/Unknown option: length/;
}
done_testing;
t/006_metaclass_traits.t view on Meta::CPAN
foreach my $attr_name (qw(data cow horse _private_stuff_cmdline)) {
my $attr = App->meta->get_attribute($attr_name);
isa_ok($attr, 'Moose::Meta::Attribute');
does_ok($attr, 'MooseX::Getopt::Meta::Attribute::Trait');
can_ok($attr, 'cmd_flag');
can_ok($attr, 'cmd_aliases');
}
{
local @ARGV = ();
my $app = App->new_with_options;
isa_ok($app, 'App');
ok(!$app->verbose, '... verbosity is off as expected');
is($app->length, 24, '... length is 24 as expected');
is($app->data, 'file.dat', '... data is file.dat as expected');
is_deeply($app->libs, [], '... libs is [] as expected');
is_deeply($app->details, {}, '... details is {} as expected');
}
{
local @ARGV = ('--verbose', '--length', 50);
my $app = App->new_with_options;
isa_ok($app, 'App');
ok($app->verbose, '... verbosity is turned on as expected');
is($app->length, 50, '... length is 50 as expected');
is($app->data, 'file.dat', '... data is file.dat as expected');
is_deeply($app->libs, [], '... libs is [] as expected');
is_deeply($app->details, {}, '... details is {} as expected');
}
{
local @ARGV = ('--verbose', '-f', 'foo.txt');
my $app = App->new_with_options;
isa_ok($app, 'App');
ok($app->verbose, '... verbosity is turned on as expected');
is($app->length, 24, '... length is 24 as expected');
is($app->data, 'foo.txt', '... data is foo.txt as expected');
is_deeply($app->libs, [], '... libs is [] as expected');
is_deeply($app->details, {}, '... details is {} as expected');
}
{
local @ARGV = ('--verbose', '--libs', 'libs/', '--libs', 'includes/lib');
my $app = App->new_with_options;
isa_ok($app, 'App');
ok($app->verbose, '... verbosity is turned on as expected');
is($app->length, 24, '... length is 24 as expected');
is($app->data, 'file.dat', '... data is foo.txt as expected');
is_deeply($app->libs,
['libs/', 'includes/lib'],
'... libs is [libs/, includes/lib] as expected');
is_deeply($app->details, {}, '... details is {} as expected');
}
{
local @ARGV = ('--details', 'os=mac', '--details', 'name=foo');
my $app = App->new_with_options;
isa_ok($app, 'App');
ok(!$app->verbose, '... verbosity is turned on as expected');
is($app->length, 24, '... length is 24 as expected');
is($app->data, 'file.dat', '... data is foo.txt as expected');
is_deeply($app->libs, [], '... libs is [] as expected');
is_deeply($app->details,
{ os => 'mac', name => 'foo' },
'... details is { os => mac, name => foo } as expected');
}
{
# Test negation on booleans too ...
local @ARGV = ('--noverbose');
my $app = App->new_with_options;
isa_ok($app, 'App');
ok(!$app->verbose, '... verbosity is turned off as expected');
is($app->length, 24, '... length is 24 as expected');
is($app->data, 'file.dat', '... file is file.dat as expected');
is_deeply($app->libs, [], '... libs is [] as expected');
is_deeply($app->details, {}, '... details is {} as expected');
}
# Test cmd_alias without cmd_flag
{
local @ARGV = ('--cow', '42');
my $app = App->new_with_options;
isa_ok($app, 'App');
is($app->cow, 42, 'cmd_alias, but not using it');
}
{
local @ARGV = ('--moocow', '88');
my $app = App->new_with_options;
isa_ok($app, 'App');
is($app->cow, 88, 'cmd_alias, using long one');
}
{
local @ARGV = ('-c', '99');
my $app = App->new_with_options;
isa_ok($app, 'App');
is($app->cow, 99, 'cmd_alias, using short one');
}
# Test cmd_alias + cmd_flag
{
local @ARGV = ('--horsey', '123');
my $app = App->new_with_options;
isa_ok($app, 'App');
is($app->horse, 123, 'cmd_alias+cmd_flag, using flag');
}
{
local @ARGV = ('-x', '321');
my $app = App->new_with_options;
isa_ok($app, 'App');
is($app->horse, 321, 'cmd_alias+cmd_flag, using alias');
}
# Test _foo + cmd_flag
{
local @ARGV = ('-p', '666');
my $app = App->new_with_options;
isa_ok($app, 'App');
is($app->_private_stuff_cmdline, 666, '_foo + cmd_flag');
}
# Test ARGV support
{
my @args = ('-p', 12345, '-c', 99, '-');
local @ARGV = @args;
my $app = App->new_with_options;
isa_ok($app, 'App');
is_deeply($app->ARGV, \@args, 'ARGV accessor');
is_deeply(\@ARGV, \@args, '@ARGV unmangled');
is_deeply($app->extra_argv, ['-'], 'extra_argv accessor');
}
done_testing;
t/007_nogetopt_trait.t view on Meta::CPAN
has '_private_stuff_cmdline' => (
traits => ['Getopt'],
is => 'ro',
isa => 'Int',
default => 832,
cmd_flag => 'p',
);
}
{
local @ARGV = ();
my $app = App->new_with_options;
isa_ok( $app, 'App' );
ok( !$app->verbose, '... verbosity is off as expected' );
is( $app->length, 24, '... length is 24 as expected' );
is( $app->data, 'file.dat', '... data is file.dat as expected' );
is_deeply( $app->libs, [], '... libs is [] as expected' );
is_deeply( $app->details, {}, '... details is {} as expected' );
is($app->private_stuff, 713, '... private stuff is 713 as expected');
}
{
local @ARGV = (qw/--private_stuff 317/);
like exception { App->new_with_options }, qr/Unknown option: private_stuff/;
}
done_testing;
t/008_configfromfile.t view on Meta::CPAN
use Moose;
extends 'App';
sub _get_default_configfile { '/notused/default' }
}
# No config specified
{
local @ARGV = qw( --required_from_argv 1 );
like exception { App->new_with_options },
($Getopt::Long::Descriptive::VERSION >= 0.091
? qr/Mandatory parameter 'required_from_config' missing/
: qr/Required option missing: required_from_config/);
{
my $app = App::DefaultConfigFile->new_with_options;
isa_ok( $app, 'App::DefaultConfigFile' );
app_ok( $app );
t/010_dashes.t view on Meta::CPAN
package App;
use Moose;
with 'MooseX::Getopt::Dashes';
has 'some_thingy' => ( is => 'ro', isa => 'Str', default => 'foo' );
has 'another_thingy' => ( is => 'ro', isa => 'Str', default => 'foo', cmd_flag => 'another_thingy', traits => [ 'Getopt' ], );
}
{
local @ARGV = (qw/--some-thingy bar/);
ok ! exception { is( App->new_with_options->some_thingy, 'bar') }, 'Dash in option name';
}
{
local @ARGV = (qw/--some_thingy bar/);
like exception { App->new_with_options }, qr/Unknown option: some_thingy/;
}
{
local @ARGV = (qw/--another_thingy bar/);
ok ! exception { is( App->new_with_options->another_thingy, 'bar' ) }, 'Underscore in option name';
}
{
local @ARGV = (qw/--another-thingy bar/);
like exception { App->new_with_options }, qr/Unknown option: another-thingy/;
}
done_testing;
t/102_basic_basic.t view on Meta::CPAN
foreach my $attr_name (qw(data cow horse _private_stuff_cmdline)) {
my $attr = App->meta->get_attribute($attr_name);
isa_ok($attr, 'Moose::Meta::Attribute');
does_ok($attr, 'MooseX::Getopt::Meta::Attribute::Trait');
can_ok($attr, 'cmd_flag');
can_ok($attr, 'cmd_aliases');
}
{
local @ARGV = ();
my $app = App->new_with_options;
isa_ok($app, 'App');
ok(!$app->verbose, '... verbosity is off as expected');
is($app->length, 24, '... length is 24 as expected');
is($app->data, 'file.dat', '... data is file.dat as expected');
is_deeply($app->libs, [], '... libs is [] as expected');
is_deeply($app->details, {}, '... details is {} as expected');
}
{
local @ARGV = ('--verbose', '--length', 50);
my $app = App->new_with_options;
isa_ok($app, 'App');
ok($app->verbose, '... verbosity is turned on as expected');
is($app->length, 50, '... length is 50 as expected');
is($app->data, 'file.dat', '... data is file.dat as expected');
is_deeply($app->libs, [], '... libs is [] as expected');
is_deeply($app->details, {}, '... details is {} as expected');
}
{
local @ARGV = ('--verbose', '-f', 'foo.txt');
my $app = App->new_with_options;
isa_ok($app, 'App');
ok($app->verbose, '... verbosity is turned on as expected');
is($app->length, 24, '... length is 24 as expected');
is($app->data, 'foo.txt', '... data is foo.txt as expected');
is_deeply($app->libs, [], '... libs is [] as expected');
is_deeply($app->details, {}, '... details is {} as expected');
}
{
local @ARGV = ('--verbose', '--libs', 'libs/', '--libs', 'includes/lib');
my $app = App->new_with_options;
isa_ok($app, 'App');
ok($app->verbose, '... verbosity is turned on as expected');
is($app->length, 24, '... length is 24 as expected');
is($app->data, 'file.dat', '... data is foo.txt as expected');
is_deeply($app->libs,
['libs/', 'includes/lib'],
'... libs is [libs/, includes/lib] as expected');
is_deeply($app->details, {}, '... details is {} as expected');
}
{
local @ARGV = ('--details', 'os=mac', '--details', 'name=foo');
my $app = App->new_with_options;
isa_ok($app, 'App');
ok(!$app->verbose, '... verbosity is turned on as expected');
is($app->length, 24, '... length is 24 as expected');
is($app->data, 'file.dat', '... data is foo.txt as expected');
is_deeply($app->libs, [], '... libs is [] as expected');
is_deeply($app->details,
{ os => 'mac', name => 'foo' },
'... details is { os => mac, name => foo } as expected');
}
{
# Test negation on booleans too ...
local @ARGV = ('--noverbose');
my $app = App->new_with_options;
isa_ok($app, 'App');
ok(!$app->verbose, '... verbosity is turned off as expected');
is($app->length, 24, '... length is 24 as expected');
is($app->data, 'file.dat', '... file is file.dat as expected');
is_deeply($app->libs, [], '... libs is [] as expected');
is_deeply($app->details, {}, '... details is {} as expected');
}
# Test cmd_alias without cmd_flag
{
local @ARGV = ('--cow', '42');
my $app = App->new_with_options;
isa_ok($app, 'App');
is($app->cow, 42, 'cmd_alias, but not using it');
}
{
local @ARGV = ('--moocow', '88');
my $app = App->new_with_options;
isa_ok($app, 'App');
is($app->cow, 88, 'cmd_alias, using long one');
}
{
local @ARGV = ('-c', '99');
my $app = App->new_with_options;
isa_ok($app, 'App');
is($app->cow, 99, 'cmd_alias, using short one');
}
# Test cmd_alias + cmd_flag
{
local @ARGV = ('--horsey', '123');
my $app = App->new_with_options;
isa_ok($app, 'App');
is($app->horse, 123, 'cmd_alias+cmd_flag, using flag');
}
{
local @ARGV = ('-x', '321');
my $app = App->new_with_options;
isa_ok($app, 'App');
is($app->horse, 321, 'cmd_alias+cmd_flag, using alias');
}
# Test _foo + cmd_flag
{
local @ARGV = ('-p', '666');
my $app = App->new_with_options;
isa_ok($app, 'App');
is($app->_private_stuff_cmdline, 666, '_foo + cmd_flag');
}
# Test ARGV support
{
my @args = ('-p', 12345, '-c', 99, '-');
local @ARGV = @args;
my $app = App->new_with_options;
isa_ok($app, 'App');
is_deeply($app->ARGV, \@args, 'ARGV accessor');
is_deeply(\@ARGV, \@args, '@ARGV unmangled');
is_deeply($app->extra_argv, ['-'], 'extra_argv accessor');
}
done_testing;
t/103_uc_bug.t view on Meta::CPAN
isa => 'Str',
);
has 'otherparam' => (
is => 'rw',
isa => 'Str',
);
}
{
local @ARGV = ('--TrackingNumber','1Z1234567812345670','--otherparam','foo');
my $app = App->new_with_options;
isa_ok($app, 'App');
is($app->TrackingNumber, '1Z1234567812345670', '... TrackingNumber is as expected');
is($app->otherparam, 'foo', '... otherparam is as expected');
}
done_testing;
t/104_override_usage.t view on Meta::CPAN
has foo => ( isa => 'Int', is => 'ro', documentation => 'A foo
with newline and some 123456789 123456789 123456789 characters' );
}
my $usage = qr/^\Qusage: 104_override_usage.t [-?h] [long options...]\E
\s+.*--help.+Prints this usage information\..*
\s+--foo (INT)?\s+A foo.+characters/ms;
{
local @ARGV = ('--foo', '1');
my $i = trap { MyScript->new_with_options };
is($i->foo, 1, 'attr is set');
is($trap->stdout, '', 'nothing printed when option is accepted');
}
{
local @ARGV = ('--help');
trap { MyScript->new_with_options };
like($trap->stdout, qr/\A$usage\Z/, 'usage is printed on --help');
}
{
local @ARGV = ('-q'); # Does not exist
trap { MyScript->new_with_options };
like($trap->die, qr/\AUnknown option: q\n$usage\Z/, 'usage is printed on unknown option');
}
{
find_meta('MyScript')->add_before_method_modifier(
print_usage_text => sub {
print "--- DOCUMENTATION ---\n";
},
);
local @ARGV = ('--help');
trap { MyScript->new_with_options };
like(
$trap->stdout,
qr/^--- DOCUMENTATION ---\n$usage\Z/,
'additional text included before normal usage string',
);
}
{
find_meta('MyScript')->add_after_method_modifier(
print_usage_text => sub {
print "--- DOCUMENTATION ---\n";
},
);
local @ARGV = ('--help');
trap { MyScript->new_with_options };
like(
$trap->stdout,
qr/$usage\n--- DOCUMENTATION ---\n/,
'additional text included before normal usage string',
);
}
{
package MyScript2;
t/106_no_ignore_case.t view on Meta::CPAN
);
ok((! $obj->BigD), "BigD was not set for argv -d on $role");
ok($obj->SmallD, "SmallD was set for argv -d on $role");
}
ok($meta->name->new_with_options({ argv => ['-d'], no_ignore_case => 1})
->SmallD,
"SmallD was set for argv -d on $role");
{
local @ARGV = ('-d');
ok($meta->name->new_with_options()->SmallD,
"SmallD was set for ARGV on $role");
}
ok($meta->name->new_with_options({ argv => ['-D'], no_ignore_case => 1})
->BigD,
"BigD was set for argv -d on $role");
{
my $obj = $meta->name->new_with_options(
t/107_union_bug.t view on Meta::CPAN
my $example = example->new({
results => '1234,5678,9012',
other => 'test',
});
isa_ok($example, 'example');
is_deeply($example->results, [qw(1234 5678 9012)], 'result as expected');
}
# With MooseX::Getopt
{
local @ARGV = ('--results','1234,5678,9012','--other','test');
my $example = example->new_with_options;
isa_ok($example, 'example');
is($example->other,'test');
is_deeply($example->results, [qw(1234 5678 9012)], 'result as expected');
}
done_testing;
t/109_help_flag.t view on Meta::CPAN
#usage: test1.t [-?] [long options...]
# -? --usage --help Prints this usage information.
my $obj = MyClass->new_with_options;
ok($obj->meta->has_attribute('usage'), 'class has usage attribute');
isa_ok($obj->usage, 'Getopt::Long::Descriptive::Usage');
my $usage_text = $obj->usage->text;
foreach my $args ( ['--help'], ['--usage'], ['--?'], ['-?'], ['-h'] )
{
local @ARGV = @$args;
note "Setting \@ARGV to @$args";
trap { MyClass->new_with_options() };
is($trap->leaveby, 'exit', 'bailed with an exit code');
is($trap->exit, 0, '...of 0');
is(
$trap->stdout,
$usage_text,
'Usage information printed to STDOUT',
t/111_gld_pass_through.t view on Meta::CPAN
use Moose;
with 'MooseX::Getopt::GLD' => { getopt_conf => [ 'pass_through' ] };;
has 'bar' => (
is => 'ro',
isa => 'Int',
);
}
local @ARGV = ('--foo=10', '--bar=42');
{
my $foo = Engine::Foo->new_with_options();
isa_ok($foo, 'Engine::Foo');
is($foo->foo, 10, '... got the right value (10)');
}
{
my $bar = Engine::Bar->new_with_options();
isa_ok($bar, 'Engine::Bar');
view all matches for this distributionview release on metacpan - search on metacpan