fix a bug found via $work_app
[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         '-Ilib +Debug -- PlanFinder' => 'PlanFinder',
20     },
21
22     modules => {
23         'Foo' => [],
24         'Foo -MFoo' => [],
25         '-MFoo' => ['Foo'],
26         '-MFoo Foo' => ['Foo'],
27         '-MFoo Foo' => ['Foo'],
28         '-MFoo -MFoo Foo' => ['Foo', 'Foo'],
29         '-MFoo -MBar -MBaz::Quux -Ilib OH::HAI' => ['Foo','Bar','Baz::Quux'],
30         '+End -MFoo -MBar -- OH::HAI' => [],
31         '-Ilib +End -MFoo -- OH::HAI' => [],
32         '-Ilib -MFoo OH::HAI' => ['Foo'],
33         '-Ilib -MFoo +End -MBar -- OH::HAI' => ['Foo'],
34         '-Ilib +Debug -- PlanFinder' => [],
35     },
36
37     include_paths => {
38         'Foo' => [],
39         'Foo -Ilib' => [],
40         '-Ilib Foo' => ['lib'],
41         '-MFoo Foo' => [],
42         '-MFoo -MBar -MBaz::Quux -Ilib OH::HAI' => ['lib'],
43         '+End -MFoo -MBar -- OH::HAI' => [],
44         '-Ilib +End -MFoo -- OH::HAI' => ['lib'],
45         '-Ilib -MFoo OH::HAI' => ['lib'],
46         '-Ilib -MFoo +End -IBar -- OH::HAI' => ['lib'],
47         '-Ilib -MFoo -I../../../../lib +End -IBar -- OH::HAI' =>
48               ['lib', '../../../../lib'],
49         '-Ilib +Debug -- PlanFinder' => ['lib'],
50     },
51
52     plugins => {
53         'Foo' => {},
54         '-Ilib Foo' => {},
55         '-Ilib -MFoo -- Bar' => {},
56         '+One --arg +Two --arg2 -- End' => { One => ['--arg'], Two => ['--arg2'] },
57         '+Debug +PAR +Foo::Bar -- Baz' => { Debug => [], PAR => [], 'Foo::Bar' => [] },
58         '-Ilib +Debug -- PlanFinder' => { Debug => [] },
59     },
60
61     is_help => {
62         '--help'                     => 1,
63         '-h'                         => 1,
64         '-?'                         => 1,
65         '--?'                        => 0,
66         '--h'                        => 0,
67         '+Foo --help'                => 0,
68         'Foo'                        => 0,
69         '-Ilib -MFoo --help'         => 1,
70         '-- Foo --help'              => 0,
71         'Foo --help'                 => 0,
72         'Foo -?'                     => 0,
73         'Foo -h'                     => 0,
74         '-Ilib +Debug -- PlanFinder' => 0,
75     },
76
77     app_args => {
78         'Foo'                        => [],
79         '-Ilib Foo'                  => [],
80         '-Ilib -MFoo Bar'            => [],
81         'Foo Bar'                    => ['Bar'],
82         'Foo Bar Baz'                => ['Bar', 'Baz'],
83         '-- Foo Bar Baz'             => ['Bar', 'Baz'],
84         '-Ilib Foo -Ilib'            => ['-Ilib'],
85         '-MFoo Foo -MFoo'            => ['-MFoo'],
86         '-MFoo -MFoo Foo -MFoo'      => ['-MFoo'],
87         '-- Foo --help'              => ['--help'],
88         '-Ilib +Debug -- PlanFinder' => [],
89     },
90 );
91
92 sub class_name {
93     my ($argv) = @_;
94     my $p = MooseX::Runnable::Util::ArgParser->new( argv => [split / /, $argv] );
95     return $p->class_name;
96 }
97
98 sub modules {
99     my ($argv) = @_;
100     my $p = MooseX::Runnable::Util::ArgParser->new( argv => [split / /, $argv] );
101     return $p->modules;
102 }
103
104 sub include_paths {
105     my ($argv) = @_;
106     my $p = MooseX::Runnable::Util::ArgParser->new( argv => [split / /, $argv] );
107     return [ map { $_->stringify } $p->include_paths ];
108 }
109
110 sub plugins {
111     my ($argv) = @_;
112     my $p = MooseX::Runnable::Util::ArgParser->new( argv => [split / /, $argv] );
113     return $p->plugins;
114 }
115
116 sub is_help {
117     my ($argv) = @_;
118     my $p = MooseX::Runnable::Util::ArgParser->new( argv => [split / /, $argv] );
119     return $p->is_help ? 1 : 0;
120 }
121
122 sub app_args {
123     my ($argv) = @_;
124     my $p = MooseX::Runnable::Util::ArgParser->new( argv => [split / /, $argv] );
125     return $p->app_args;
126 }
127
128 runtests;