-
Notifications
You must be signed in to change notification settings - Fork 5
/
10-basic.t
139 lines (112 loc) · 4.95 KB
/
10-basic.t
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
use warnings;
use strict;
use lib qw(lib);
use Test::More;
use Applify ();
plan tests => 38;
{
my $app = eval q[use Applify; app {}] or BAIL_OUT $@;
my $script = $app->script;
isa_ok($script, 'Applify');
can_ok($script, qw/
option app documentation version
caller options
new print_help import
/);
is($script->caller->[0], 'main', 'called from main::');
isa_ok($script->_option_parser, 'Getopt::Long::Parser');
{
local $TODO = 'need to define config for Getopt::Long';
is_deeply($script->_option_parser->{'settings'}, [qw/ no_auto_help pass_through /], 'Getopt::Long has correct config');
}
eval { $script->option(undef) };
like($@, qr{^Usage:.*type =>}, 'option() require type');
eval { $script->option(str => undef) };
like($@, qr{^Usage:.*name =>}, 'option() require name');
eval { $script->option(str => foo => undef) };
like($@, qr{^Usage:.*documentation}, 'option() require documentation');
$script->option(str => foo_bar => 'Foo can something');
is_deeply($script->options, [
{
default => undef,
type => 'str',
name => 'foo_bar',
documentation => 'Foo can something',
}
], 'add foo as option');
$script->option(str => foo_2 => 'foo_2 can something else', 42);
is($script->options->[1]{'default'}, 42, 'foo_2 has default value');
$script->option(str => foo_3 => 'foo_3 can also something', 123, required => 1);
is($script->options->[2]{'default'}, 123, 'foo_3 has default value');
is($script->options->[2]{'required'}, 1, 'foo_3 is required');
is($script->_calculate_option_spec({ name => 'a_b', type => 'bool' }), 'a-b!', 'a_b!');
is($script->_calculate_option_spec({ name => 'a_b', type => 'flag' }), 'a-b!', 'a_b!');
is($script->_calculate_option_spec({ name => 'a_b', type => 'inc' }), 'a-b+', 'a_b+');
is($script->_calculate_option_spec({ name => 'a_b', type => 'str' }), 'a-b=s', 'a_b=s');
is($script->_calculate_option_spec({ name => 'a_b', type => 'int' }), 'a-b=i', 'a_b=i');
is($script->_calculate_option_spec({ name => 'a_b', type => 'num' }), 'a-b=f', 'a_b=f');
{
local $TODO = 'Add proper support for file/dir';
is($script->_calculate_option_spec({ name => 'a_b', type => 'file' }), 'a-b=s', 'a_b=s');
is($script->_calculate_option_spec({ name => 'a_b', type => 'dir' }), 'a-b=s', 'a_b=s');
}
my $application_class = $script->_generate_application_class(sub{});
like($application_class, qr{^Applify::__ANON__2__::}, 'generated application class');
can_ok($application_class, qw/
new run script
foo_bar foo_2 foo_3
/);
is_deeply([$script->_default_options], [qw/ help /], 'default options');
is((run_method($script, 'print_help'))[0], <<' HELP', 'print_help()');
Usage:
--foo-bar Foo can something
--foo-2 foo_2 can something else
* --foo-3 foo_3 can also something
--help Print this help text
HELP
eval { $script->documentation(undef) };
like($@, qr{Usage: documentation }, 'need to give documentation(...) a true value');
is($script->documentation('Applify'), $script, 'documentation(...) return $self on set');
is($script->documentation, 'Applify', 'documentation() return what was set');
eval { $script->print_version };
like($@, qr{Cannot print version}, 'cannot print version without version(...)');
eval { $script->version(undef) };
like($@, qr{Usage: version }, 'need to give version(...) a true value');
is($script->version('1.23'), $script, 'version(...) return $self');
is($script->version, '1.23', 'version() return what was set');
is_deeply([$script->_default_options], [qw/ help man version /], 'default options after documentation() and version()');
is((run_method($script, 'print_help'))[0], <<' HELP', 'print_help()');
Usage:
--foo-bar Foo can something
--foo-2 foo_2 can something else
* --foo-3 foo_3 can also something
--help Print this help text
--man Display manual for this application
--version Print application name and version
HELP
is((run_method($script, 'print_version'))[0], <<' VERSION', 'print_version(numeric)');
10-basic.t version 1.23
VERSION
$script->version('Applify');
is((run_method($script, 'print_version'))[0], <<" VERSION", 'print_version(module)');
10-basic.t version $Applify::VERSION
VERSION
}
{
my $app = do 'example/script-simple.pl';
my $script = $app->script;
isa_ok($script, 'Applify');
can_ok($app, qw/ input_file output_dir dry_run generate_exit_value /);
eval { run_method($app, 'run') };
is($@, "Required attribute missing: --dry-run\n", '--dry-run missing');
}
sub run_method {
my($thing, $method, @args) = @_;
local *STDOUT;
local *STDERR;
my $stdout = '';
my $stderr = '';
open STDOUT, '>', \$stdout;
open STDERR, '>', \$stderr;
return $stdout, $stderr, $thing->$method(@args);
}