ea192372e150e8d1ec1c9218371b0f7331a0ac8e
[gitmo/MooseX-Runnable.git] / t / arg-parser.t
1 use strict;
2 use warnings;
3
4 use MooseX::Runnable::Util::ArgParser;
5
6 use Test::TableDriven (
7     class_name => {
8         'Foo' => 'Foo',
9         '-Ilib Foo' => 'Foo' ,
10         '-I/foo/bar/lib -Ilib -IFoo module with lots of args' => 'module' ,
11         '-- Foo' => 'Foo',
12         '-Ilib -- Foo' => 'Foo',
13         '-Ilib -MFoo::Bar -- Foo::Baz' => 'Foo::Baz',
14         '-MFoo Bar' => 'Bar',
15         '+Plugin1 --args --go --here -- Foo' => 'Foo',
16         '+P --args --arehere +Q --more --args -- Foo' => 'Foo',
17         '-Ilib +P --args --arehere +Q --more --args -Ilib -- Foo' => 'Foo',
18         '+P --args -- Foo -- Bar', 'Foo',
19     },
20
21     modules => {
22         'Foo' => [],
23         'Foo -MFoo' => [],
24         '-MFoo' => ['Foo'],
25         '-MFoo Foo' => ['Foo'],
26         '-MFoo Foo' => ['Foo'],
27         '-MFoo -MFoo Foo' => ['Foo', 'Foo'],
28         '-MFoo -MBar -MBaz::Quux -Ilib OH::HAI' => ['Foo','Bar','Baz::Quux'],
29         '+End -MFoo -MBar -- OH::HAI' => [],
30         '-Ilib +End -MFoo -- OH::HAI' => [],
31         '-Ilib -MFoo OH::HAI' => ['Foo'],
32         '-Ilib -MFoo +End -MBar -- OH::HAI' => ['Foo'],
33     },
34
35     include_paths => {
36         'Foo' => [],
37         'Foo -Ilib' => [],
38         '-Ilib Foo' => ['lib'],
39         '-MFoo Foo' => [],
40         '-MFoo -MBar -MBaz::Quux -Ilib OH::HAI' => ['lib'],
41         '+End -MFoo -MBar -- OH::HAI' => [],
42         '-Ilib +End -MFoo -- OH::HAI' => ['lib'],
43         '-Ilib -MFoo OH::HAI' => ['lib'],
44         '-Ilib -MFoo +End -IBar -- OH::HAI' => ['lib'],
45         '-Ilib -MFoo -I../../../../lib +End -IBar -- OH::HAI' =>
46               ['lib', '../../../../lib'],
47
48     },
49
50     plugins => {
51         'Foo' => {},
52         '-Ilib Foo' => {},
53         '-Ilib -MFoo -- Bar' => {},
54         '+One --arg +Two --arg2 -- End' => { One => ['--arg'], Two => ['--arg2'] },
55         '+Debug +PAR +Foo::Bar -- Baz' => { Debug => [], PAR => [], 'Foo::Bar' => [] },
56     },
57
58     is_help => {
59         '--help'             => 1,
60         '-h'                 => 1,
61         '-?'                 => 1,
62         '--?'                => 0,
63         '--h'                => 0,
64         '+Foo --help'        => 0,
65         'Foo'                => 0,
66         '-Ilib -MFoo --help' => 1,
67         '-- Foo --help'      => 0,
68         'Foo --help'         => 0,
69         'Foo -?'             => 0,
70         'Foo -h'             => 0,
71     },
72
73     app_args => {
74         'Foo'                   => [],
75         '-Ilib Foo'             => [],
76         '-Ilib -MFoo Bar'       => [],
77         'Foo Bar'               => ['Bar'],
78         'Foo Bar Baz'           => ['Bar', 'Baz'],
79         '-- Foo Bar Baz'        => ['Bar', 'Baz'],
80         '-Ilib Foo -Ilib'       => ['-Ilib'],
81         '-MFoo Foo -MFoo'       => ['-MFoo'],
82         '-MFoo -MFoo Foo -MFoo' => ['-MFoo'],
83         '-- Foo --help'         => ['--help'],
84     },
85 );
86
87 sub class_name {
88     my ($argv) = @_;
89     my $p = MooseX::Runnable::Util::ArgParser->new( argv => [split / /, $argv] );
90     return $p->class_name;
91 }
92
93 sub modules {
94     my ($argv) = @_;
95     my $p = MooseX::Runnable::Util::ArgParser->new( argv => [split / /, $argv] );
96     return $p->modules;
97 }
98
99 sub include_paths {
100     my ($argv) = @_;
101     my $p = MooseX::Runnable::Util::ArgParser->new( argv => [split / /, $argv] );
102     return [ map { $_->stringify } $p->include_paths ];
103 }
104
105 sub plugins {
106     my ($argv) = @_;
107     my $p = MooseX::Runnable::Util::ArgParser->new( argv => [split / /, $argv] );
108     return $p->plugins;
109 }
110
111 sub is_help {
112     my ($argv) = @_;
113     my $p = MooseX::Runnable::Util::ArgParser->new( argv => [split / /, $argv] );
114     return $p->is_help ? 1 : 0;
115 }
116
117 sub app_args {
118     my ($argv) = @_;
119     my $p = MooseX::Runnable::Util::ArgParser->new( argv => [split / /, $argv] );
120     return $p->app_args;
121 }
122
123 runtests;