gli 2.11.0 → 2.20.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.circleci/config.yml +28 -0
- data/.gitignore +3 -3
- data/.tool-versions +1 -0
- data/Gemfile +0 -2
- data/README.rdoc +29 -19
- data/Rakefile +15 -37
- data/bin/ci +29 -0
- data/bin/gli +24 -54
- data/bin/rake +29 -0
- data/bin/setup +5 -0
- data/exe/gli +68 -0
- data/gli.gemspec +20 -24
- data/gli.rdoc +9 -9
- data/lib/gli/app.rb +31 -8
- data/lib/gli/app_support.rb +15 -3
- data/lib/gli/command.rb +24 -2
- data/lib/gli/command_finder.rb +42 -25
- data/lib/gli/command_support.rb +7 -6
- data/lib/gli/commands/doc.rb +9 -3
- data/lib/gli/commands/help.rb +2 -1
- data/lib/gli/commands/help_modules/arg_name_formatter.rb +2 -2
- data/lib/gli/commands/help_modules/command_help_format.rb +19 -1
- data/lib/gli/commands/help_modules/full_synopsis_formatter.rb +3 -2
- data/lib/gli/commands/help_modules/global_help_format.rb +1 -1
- data/lib/gli/commands/help_modules/options_formatter.rb +4 -6
- data/lib/gli/commands/initconfig.rb +3 -6
- data/lib/gli/commands/rdoc_document_listener.rb +2 -1
- data/lib/gli/commands/scaffold.rb +71 -142
- data/lib/gli/dsl.rb +2 -1
- data/lib/gli/flag.rb +23 -2
- data/lib/gli/gli_option_parser.rb +66 -15
- data/lib/gli/option_parser_factory.rb +9 -2
- data/lib/gli/options.rb +2 -2
- data/lib/gli/switch.rb +4 -0
- data/lib/gli/terminal.rb +6 -2
- data/lib/gli/version.rb +1 -1
- data/lib/gli.rb +1 -0
- data/object-model.dot +29 -0
- data/object-model.png +0 -0
- data/test/apps/todo/Gemfile +1 -1
- data/test/apps/todo/bin/todo +12 -6
- data/test/apps/todo/lib/todo/commands/create.rb +42 -41
- data/test/apps/todo/lib/todo/commands/list.rb +48 -36
- data/test/apps/todo/lib/todo/commands/ls.rb +25 -24
- data/test/apps/todo/lib/todo/commands/make.rb +42 -39
- data/test/apps/todo/todo.gemspec +1 -2
- data/test/apps/todo_legacy/todo.gemspec +1 -2
- data/test/apps/todo_plugins/commands/third.rb +2 -0
- data/test/integration/gli_cli_test.rb +69 -0
- data/test/integration/gli_powered_app_test.rb +52 -0
- data/test/integration/scaffold_test.rb +30 -0
- data/test/integration/test_helper.rb +52 -0
- data/test/unit/command_finder_test.rb +54 -0
- data/test/{tc_command.rb → unit/command_test.rb} +20 -7
- data/test/unit/compound_command_test.rb +17 -0
- data/test/{tc_doc.rb → unit/doc_test.rb} +38 -51
- data/test/{tc_flag.rb → unit/flag_test.rb} +19 -25
- data/test/{tc_gli.rb → unit/gli_test.rb} +78 -50
- data/test/{tc_help.rb → unit/help_test.rb} +54 -113
- data/test/{tc_options.rb → unit/options_test.rb} +4 -4
- data/test/unit/subcommand_parsing_test.rb +263 -0
- data/test/unit/subcommands_test.rb +245 -0
- data/test/{config.yaml → unit/support/gli_test_config.yml} +1 -0
- data/test/unit/switch_test.rb +49 -0
- data/test/{tc_terminal.rb → unit/terminal_test.rb} +28 -3
- data/test/unit/test_helper.rb +13 -0
- data/test/unit/verbatim_wrapper_test.rb +24 -0
- metadata +85 -141
- data/.ruby-gemset +0 -1
- data/.ruby-version +0 -1
- data/.travis.yml +0 -12
- data/ObjectModel.graffle +0 -1191
- data/bin/report_on_rake_results +0 -10
- data/bin/test_all_rubies.sh +0 -6
- data/features/gli_executable.feature +0 -90
- data/features/gli_init.feature +0 -232
- data/features/step_definitions/gli_executable_steps.rb +0 -18
- data/features/step_definitions/gli_init_steps.rb +0 -11
- data/features/step_definitions/todo_steps.rb +0 -100
- data/features/support/env.rb +0 -55
- data/features/todo.feature +0 -546
- data/features/todo_legacy.feature +0 -128
- data/test/option_test_helper.rb +0 -13
- data/test/tc_compound_command.rb +0 -22
- data/test/tc_subcommand_parsing.rb +0 -104
- data/test/tc_subcommands.rb +0 -259
- data/test/tc_switch.rb +0 -55
- data/test/tc_verbatim_wrapper.rb +0 -36
- data/test/test_helper.rb +0 -20
- /data/test/{init_simplecov.rb → unit/init_simplecov.rb} +0 -0
- /data/test/{fake_std_out.rb → unit/support/fake_std_out.rb} +0 -0
@@ -0,0 +1,54 @@
|
|
1
|
+
require_relative "test_helper"
|
2
|
+
|
3
|
+
class CommandFinderTest < MiniTest::Test
|
4
|
+
include TestHelper
|
5
|
+
|
6
|
+
def setup
|
7
|
+
@app = CLIApp.new
|
8
|
+
[:status, :deployable, :some_command, :some_similar_command].each do |command|
|
9
|
+
@app.commands[command] = GLI::Command.new(:names => command)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def teardown
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_unknown_command_name
|
17
|
+
assert_raises(GLI::UnknownCommand) do
|
18
|
+
GLI::CommandFinder.new(@app.commands, :default_command => :status).find_command(:unfindable_command)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_no_command_name_without_default
|
23
|
+
assert_raises(GLI::UnknownCommand) do
|
24
|
+
GLI::CommandFinder.new(@app.commands).find_command(nil)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_no_command_name_with_default
|
29
|
+
actual = GLI::CommandFinder.new(@app.commands, :default_command => :status).find_command(nil)
|
30
|
+
expected = @app.commands[:status]
|
31
|
+
|
32
|
+
assert_equal(actual, expected)
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_ambigous_command
|
36
|
+
assert_raises(GLI::AmbiguousCommand) do
|
37
|
+
GLI::CommandFinder.new(@app.commands, :default_command => :status).find_command(:some)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_partial_name_with_autocorrect_enabled
|
42
|
+
actual = GLI::CommandFinder.new(@app.commands, :default_command => :status).find_command(:deploy)
|
43
|
+
expected = @app.commands[:deployable]
|
44
|
+
|
45
|
+
assert_equal(actual, expected)
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_partial_name_with_autocorrect_disabled
|
49
|
+
assert_raises(GLI::UnknownCommand) do
|
50
|
+
GLI::CommandFinder.new(@app.commands, :default_command => :status, :autocomplete => false)
|
51
|
+
.find_command(:deploy)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
require_relative "test_helper"
|
2
|
+
require_relative "support/fake_std_out"
|
3
3
|
|
4
|
-
class
|
4
|
+
class CommandTest < MiniTest::Test
|
5
5
|
include TestHelper
|
6
6
|
def setup
|
7
7
|
@fake_stdout = FakeStdOut.new
|
@@ -40,8 +40,6 @@ class TC_testCommand < Clean::Test::TestCase
|
|
40
40
|
|
41
41
|
def test_basic_command
|
42
42
|
[false,true].each do |openstruct|
|
43
|
-
end
|
44
|
-
[true].each do |openstruct|
|
45
43
|
create_app(openstruct)
|
46
44
|
openstruct_message = openstruct ? ", with use_openstruct" : ""
|
47
45
|
args_args = [%w(-g basic -v -c foo bar baz quux), %w(-g basic -v --configure=foo bar baz quux)]
|
@@ -61,6 +59,12 @@ class TC_testCommand < Clean::Test::TestCase
|
|
61
59
|
end
|
62
60
|
end
|
63
61
|
|
62
|
+
def test_openstruct_with_nested_commands
|
63
|
+
create_app(true)
|
64
|
+
@app.run(["top","nested"])
|
65
|
+
assert(!@error_called,"Error block should not have been called: #{@exception_caught.inspect}")
|
66
|
+
end
|
67
|
+
|
64
68
|
def test_around_filter
|
65
69
|
@around_block_called = false
|
66
70
|
@app.around do |global_options, command, options, arguments, code|
|
@@ -432,7 +436,7 @@ class TC_testCommand < Clean::Test::TestCase
|
|
432
436
|
private
|
433
437
|
|
434
438
|
def assert_contained(output,regexp)
|
435
|
-
|
439
|
+
refute_nil output.contained?(regexp),
|
436
440
|
"Expected output to contain #{regexp.inspect}, output was:\n#{output}"
|
437
441
|
end
|
438
442
|
|
@@ -459,9 +463,10 @@ class TC_testCommand < Clean::Test::TestCase
|
|
459
463
|
@pre_called = false
|
460
464
|
@post_called = false
|
461
465
|
@error_called = false
|
466
|
+
@exception_caught = nil
|
462
467
|
@app.pre { |g,c,o,a| @pre_called = true }
|
463
468
|
@app.post { |g,c,o,a| @post_called = true }
|
464
|
-
@app.on_error { |
|
469
|
+
@app.on_error { |exception| @error_called = true; @exception_caught = exception }
|
465
470
|
@glob = nil
|
466
471
|
@verbose = nil
|
467
472
|
@glob_verbose = nil
|
@@ -503,6 +508,14 @@ class TC_testCommand < Clean::Test::TestCase
|
|
503
508
|
@app.command [:test_wrap] do |c|
|
504
509
|
c.action {}
|
505
510
|
end
|
511
|
+
|
512
|
+
@app.desc "A top-level command"
|
513
|
+
@app.command [:top] do |c|
|
514
|
+
c.desc "A nested command"
|
515
|
+
c.command [:nested] do |nested|
|
516
|
+
nested.action {}
|
517
|
+
end
|
518
|
+
end
|
506
519
|
end
|
507
520
|
|
508
521
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require_relative "test_helper"
|
2
|
+
|
3
|
+
class CompoundCommandFinderTest < MiniTest::Test
|
4
|
+
include TestHelper
|
5
|
+
|
6
|
+
def test_exception_for_missing_commands
|
7
|
+
@name = "new"
|
8
|
+
@unknown_name = "create"
|
9
|
+
@existing_command = OpenStruct.new(:name => @name)
|
10
|
+
@base = OpenStruct.new( :commands => { @name => @existing_command })
|
11
|
+
|
12
|
+
@code = lambda { GLI::Commands::CompoundCommand.new(@base,{:foo => [@name,@unknown_name]}) }
|
13
|
+
|
14
|
+
ex = assert_raises(RuntimeError,&@code)
|
15
|
+
assert_match /#{Regexp.escape(@unknown_name)}/,ex.message
|
16
|
+
end
|
17
|
+
end
|
@@ -1,5 +1,4 @@
|
|
1
|
-
|
2
|
-
require 'pp'
|
1
|
+
require_relative "test_helper"
|
3
2
|
|
4
3
|
class String
|
5
4
|
def blank?
|
@@ -19,7 +18,7 @@ class Object
|
|
19
18
|
end
|
20
19
|
end
|
21
20
|
|
22
|
-
class
|
21
|
+
class DocTest < MiniTest::Test
|
23
22
|
include TestHelper
|
24
23
|
|
25
24
|
class TestApp
|
@@ -112,42 +111,30 @@ class TC_testDoc < Clean::Test::TestCase
|
|
112
111
|
@@counter = -1 # we pre-increment so this makes 0 first
|
113
112
|
end
|
114
113
|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
lines_expected = @string.split(/\n/)
|
127
|
-
lines_got = @listener.to_s.split(/\n/)
|
128
|
-
lines_expected.zip(lines_got).each_with_index do |(expected,got),index|
|
129
|
-
assert_equal expected,got,"At index #{index}"
|
130
|
-
end
|
131
|
-
}
|
114
|
+
def test_app_without_docs_gets_callbacks_for_each_element
|
115
|
+
setup_test_app
|
116
|
+
construct_expected_output
|
117
|
+
@documenter = GLI::Commands::Doc.new(@app)
|
118
|
+
@listener = TestListener.new
|
119
|
+
@documenter.document(@listener)
|
120
|
+
lines_expected = @string.split(/\n/)
|
121
|
+
lines_got = @listener.to_s.split(/\n/)
|
122
|
+
lines_expected.zip(lines_got).each_with_index do |(expected,got),index|
|
123
|
+
assert_equal expected,got,"At index #{index}"
|
124
|
+
end
|
132
125
|
end
|
133
126
|
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
lines_expected = @string.split(/\n/)
|
146
|
-
lines_got = TestListener.last.to_s.split(/\n/)
|
147
|
-
lines_expected.zip(lines_got).each_with_index do |(expected,got),index|
|
148
|
-
assert_equal expected,got,"At index #{index}"
|
149
|
-
end
|
150
|
-
}
|
127
|
+
def test_doc_command_works_as_GLI_command
|
128
|
+
setup_test_app
|
129
|
+
construct_expected_output
|
130
|
+
@documenter = GLI::Commands::Doc.new(@app)
|
131
|
+
@listener = TestListener.new
|
132
|
+
@documenter.execute({},{:format => "DocTest::TestListener"},[])
|
133
|
+
lines_expected = @string.split(/\n/)
|
134
|
+
lines_got = TestListener.last.to_s.split(/\n/)
|
135
|
+
lines_expected.zip(lines_got).each_with_index do |(expected,got),index|
|
136
|
+
assert_equal expected,got,"At index #{index}"
|
137
|
+
end
|
151
138
|
end
|
152
139
|
|
153
140
|
private
|
@@ -158,36 +145,36 @@ private
|
|
158
145
|
@@counter
|
159
146
|
end
|
160
147
|
|
161
|
-
def
|
148
|
+
def setup_test_app
|
162
149
|
@app = TestApp.new
|
163
150
|
@app.instance_eval do
|
164
151
|
program_desc "program desc"
|
165
152
|
program_long_desc "program long desc"
|
166
153
|
version "1.3.4"
|
167
154
|
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
155
|
+
DocTest.flag_with_everything_specified(self)
|
156
|
+
DocTest.flag_with_everything_omitted(self)
|
157
|
+
DocTest.switch_with_everything_specified(self)
|
158
|
+
DocTest.switch_with_everything_omitted(self)
|
172
159
|
|
173
160
|
desc "command desc"
|
174
161
|
long_desc "command long desc"
|
175
162
|
arg_name "cmd_arg_name"
|
176
163
|
command [:command1,:com1] do |c|
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
164
|
+
DocTest.flag_with_everything_specified(c)
|
165
|
+
DocTest.flag_with_everything_omitted(c)
|
166
|
+
DocTest.switch_with_everything_specified(c)
|
167
|
+
DocTest.switch_with_everything_omitted(c)
|
181
168
|
|
182
169
|
c.desc "subcommand desc"
|
183
170
|
c.long_desc "subcommand long desc"
|
184
171
|
c.arg_name "subcmd_arg_name"
|
185
172
|
c.action { |g,o,a| }
|
186
173
|
c.command [:sub,:subcommand] do |sub|
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
174
|
+
DocTest.flag_with_everything_specified(sub,:subflag)
|
175
|
+
DocTest.flag_with_everything_omitted(sub,:subflag2)
|
176
|
+
DocTest.switch_with_everything_specified(sub,:subswitch)
|
177
|
+
DocTest.switch_with_everything_omitted(sub,:subswitch2)
|
191
178
|
sub.action { |g,o,a| }
|
192
179
|
end
|
193
180
|
c.command [:default] do |sub|
|
@@ -227,7 +214,7 @@ private
|
|
227
214
|
def self.switch_with_everything_omitted(on,name=[:S,:switch2])
|
228
215
|
on.switch name
|
229
216
|
end
|
230
|
-
def
|
217
|
+
def construct_expected_output
|
231
218
|
# Oh yeah. Creating a string representing the structure of the calls.
|
232
219
|
@string =<<EOS
|
233
220
|
BEGIN
|
@@ -1,39 +1,36 @@
|
|
1
|
-
|
1
|
+
require_relative "test_helper"
|
2
2
|
|
3
|
-
class
|
3
|
+
class FlagTest < MiniTest::Test
|
4
4
|
include TestHelper
|
5
5
|
|
6
6
|
def test_basics_simple
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
7
|
+
setup_for_flag_with_names(:f)
|
8
|
+
assert_attributes_set
|
9
|
+
assert_equal(:f,@cli_option.name)
|
10
|
+
assert_nil @cli_option.aliases
|
11
11
|
end
|
12
12
|
|
13
13
|
def test_basics_kinda_complex
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
14
|
+
setup_for_flag_with_names([:f])
|
15
|
+
assert_attributes_set
|
16
|
+
assert_equal(:f,@cli_option.name)
|
17
|
+
assert_nil @cli_option.aliases
|
18
18
|
end
|
19
19
|
|
20
20
|
def test_basics_complex
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
assert_equal ["-f VAL","--file VAL","--filename VAL",/foobar/,Float],@flag.arguments_for_option_parser
|
27
|
-
}
|
21
|
+
setup_for_flag_with_names([:f,:file,:filename])
|
22
|
+
assert_attributes_set
|
23
|
+
assert_equal(:f,@cli_option.name)
|
24
|
+
assert_equal [:file,:filename], @cli_option.aliases
|
25
|
+
assert_equal ["-f VAL","--file VAL","--filename VAL",/foobar/,Float],@flag.arguments_for_option_parser
|
28
26
|
end
|
29
27
|
|
30
28
|
def test_flag_can_mask_its_value
|
31
|
-
|
32
|
-
|
29
|
+
setup_for_flag_with_names(:password, :mask => true)
|
30
|
+
assert_attributes_set(:safe_default_value => "********")
|
33
31
|
end
|
34
32
|
|
35
|
-
def
|
36
|
-
lambda do
|
33
|
+
def setup_for_flag_with_names(names,options = {})
|
37
34
|
@options = {
|
38
35
|
:desc => 'Filename',
|
39
36
|
:long_desc => 'The Filename',
|
@@ -45,11 +42,9 @@ class TC_testFlag < Clean::Test::TestCase
|
|
45
42
|
}.merge(options)
|
46
43
|
@flag = GLI::Flag.new(names,@options)
|
47
44
|
@cli_option = @flag
|
48
|
-
end
|
49
45
|
end
|
50
46
|
|
51
|
-
def
|
52
|
-
lambda {
|
47
|
+
def assert_attributes_set(override={})
|
53
48
|
expected = @options.merge(override)
|
54
49
|
assert_equal(expected[:desc],@flag.description)
|
55
50
|
assert_equal(expected[:long_desc],@flag.long_description)
|
@@ -57,6 +52,5 @@ class TC_testFlag < Clean::Test::TestCase
|
|
57
52
|
assert_equal(expected[:safe_default_value],@flag.safe_default_value)
|
58
53
|
assert_equal(expected[:must_match],@flag.must_match)
|
59
54
|
assert_equal(expected[:type],@flag.type)
|
60
|
-
}
|
61
55
|
end
|
62
56
|
end
|
@@ -1,18 +1,7 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
# and compatibility
|
4
|
-
unless File.respond_to? :realpath
|
5
|
-
class File
|
6
|
-
def self.realpath path
|
7
|
-
return realpath(File.readlink(path)) if symlink?(path)
|
8
|
-
path
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
1
|
+
require_relative "test_helper"
|
2
|
+
require_relative "support/fake_std_out"
|
12
3
|
|
13
|
-
|
14
|
-
|
15
|
-
class TC_testGLI < Clean::Test::TestCase
|
4
|
+
class GLITest < MiniTest::Test
|
16
5
|
include TestHelper
|
17
6
|
|
18
7
|
def setup
|
@@ -24,7 +13,7 @@ class TC_testGLI < Clean::Test::TestCase
|
|
24
13
|
$stderr = @fake_stderr
|
25
14
|
@app = CLIApp.new
|
26
15
|
|
27
|
-
@config_file = File.expand_path(File.dirname(File.realpath(__FILE__)) + '/new_config.
|
16
|
+
@config_file = File.expand_path(File.dirname(File.realpath(__FILE__)) + '/support/new_config.yml')
|
28
17
|
@gli_debug = ENV['GLI_DEBUG']
|
29
18
|
@app.error_device=@fake_stderr
|
30
19
|
ENV.delete('GLI_DEBUG')
|
@@ -141,10 +130,12 @@ class TC_testGLI < Clean::Test::TestCase
|
|
141
130
|
def test_init_from_config
|
142
131
|
failure = nil
|
143
132
|
@app.reset
|
144
|
-
@app.config_file(File.expand_path(File.dirname(File.realpath(__FILE__)) + '/
|
133
|
+
@app.config_file(File.expand_path(File.dirname(File.realpath(__FILE__)) + '/support/gli_test_config.yml'))
|
145
134
|
@app.flag :f
|
146
135
|
@app.switch :s
|
147
136
|
@app.flag :g
|
137
|
+
@app.default_value true
|
138
|
+
@app.switch :t
|
148
139
|
called = false
|
149
140
|
@app.command :command do |c|
|
150
141
|
c.flag :f
|
@@ -159,6 +150,7 @@ class TC_testGLI < Clean::Test::TestCase
|
|
159
150
|
assert !o[:f]
|
160
151
|
assert !g[:s]
|
161
152
|
assert o[:s]
|
153
|
+
assert !g[:t]
|
162
154
|
rescue Exception => ex
|
163
155
|
failure = ex
|
164
156
|
end
|
@@ -172,7 +164,7 @@ class TC_testGLI < Clean::Test::TestCase
|
|
172
164
|
def test_command_line_overrides_config
|
173
165
|
failure = nil
|
174
166
|
@app.reset
|
175
|
-
@app.config_file(File.expand_path(File.dirname(File.realpath(__FILE__)) + '/
|
167
|
+
@app.config_file(File.expand_path(File.dirname(File.realpath(__FILE__)) + '/support/gli_test_config.yml'))
|
176
168
|
@app.flag :f
|
177
169
|
@app.switch :s
|
178
170
|
@app.flag :g
|
@@ -204,7 +196,7 @@ class TC_testGLI < Clean::Test::TestCase
|
|
204
196
|
end
|
205
197
|
|
206
198
|
def test_no_overwrite_config
|
207
|
-
config_file = File.expand_path(File.dirname(File.realpath(__FILE__)) + '/
|
199
|
+
config_file = File.expand_path(File.dirname(File.realpath(__FILE__)) + '/support/gli_test_config.yml')
|
208
200
|
config_file_contents = File.read(config_file)
|
209
201
|
@app.reset
|
210
202
|
@app.config_file(config_file)
|
@@ -229,9 +221,9 @@ class TC_testGLI < Clean::Test::TestCase
|
|
229
221
|
@app.reset
|
230
222
|
@app.config_file(@config_file)
|
231
223
|
@app.flag :f
|
232
|
-
@app.switch :s
|
224
|
+
@app.switch :s, :salias
|
233
225
|
@app.switch :w
|
234
|
-
@app.flag :bigflag
|
226
|
+
@app.flag :bigflag, :bigalias
|
235
227
|
@app.flag :biggestflag
|
236
228
|
@app.command :foo do |c|
|
237
229
|
end
|
@@ -249,7 +241,9 @@ class TC_testGLI < Clean::Test::TestCase
|
|
249
241
|
|
250
242
|
assert_equal 'foo',written_config[:f]
|
251
243
|
assert_equal 'bleorgh',written_config[:bigflag]
|
244
|
+
assert !written_config[:bigalias]
|
252
245
|
assert written_config[:s]
|
246
|
+
assert !written_config[:salias]
|
253
247
|
assert !written_config[:w]
|
254
248
|
assert_nil written_config[:biggestflag]
|
255
249
|
assert written_config[GLI::InitConfig::COMMANDS_KEY]
|
@@ -515,7 +509,7 @@ class TC_testGLI < Clean::Test::TestCase
|
|
515
509
|
end
|
516
510
|
@switch_value = nil
|
517
511
|
|
518
|
-
assert_raises(RuntimeError) do
|
512
|
+
assert_raises(RuntimeError) do
|
519
513
|
@app.command [:foo] do |c|
|
520
514
|
c.switch :switch, :default_value => true, :negatable => false
|
521
515
|
end
|
@@ -675,7 +669,11 @@ class TC_testGLI < Clean::Test::TestCase
|
|
675
669
|
end
|
676
670
|
end
|
677
671
|
|
678
|
-
|
672
|
+
begin
|
673
|
+
@app.run(['multiply', '--help'])
|
674
|
+
rescue GLI::CustomExit
|
675
|
+
assert false, "Expected no exception"
|
676
|
+
end
|
679
677
|
end
|
680
678
|
|
681
679
|
class ConvertMe
|
@@ -712,6 +710,48 @@ class TC_testGLI < Clean::Test::TestCase
|
|
712
710
|
assert_equal 'crud',@baz.value
|
713
711
|
end
|
714
712
|
|
713
|
+
def test_that_flags_can_be_used_multiple_times
|
714
|
+
@app.reset
|
715
|
+
@app.flag :flag, :multiple => true
|
716
|
+
@app.command :foo do |c|
|
717
|
+
c.action do |options, _, _|
|
718
|
+
@flag = options[:flag]
|
719
|
+
end
|
720
|
+
end
|
721
|
+
|
722
|
+
assert_equal 0,@app.run(%w(--flag 1 --flag=2 --flag 3 foo)),@fake_stderr.to_s
|
723
|
+
|
724
|
+
assert_equal ['1','2','3'],@flag
|
725
|
+
end
|
726
|
+
|
727
|
+
def test_that_multiple_use_flags_are_empty_arrays_by_default
|
728
|
+
@app.reset
|
729
|
+
@app.flag :flag, :multiple => true
|
730
|
+
@app.command :foo do |c|
|
731
|
+
c.action do |options, _, _|
|
732
|
+
@flag = options[:flag]
|
733
|
+
end
|
734
|
+
end
|
735
|
+
|
736
|
+
assert_equal 0,@app.run(['foo']),@fake_stderr.to_s
|
737
|
+
|
738
|
+
assert_equal [],@flag
|
739
|
+
end
|
740
|
+
|
741
|
+
def test_that_multiple_use_flags_can_take_other_defaults
|
742
|
+
@app.reset
|
743
|
+
@app.flag :flag, :multiple => true, :default_value => ['1']
|
744
|
+
@app.command :foo do |c|
|
745
|
+
c.action do |options, _, _|
|
746
|
+
@flag = options[:flag]
|
747
|
+
end
|
748
|
+
end
|
749
|
+
|
750
|
+
assert_equal 0,@app.run(['foo']),@fake_stderr.to_s
|
751
|
+
|
752
|
+
assert_equal ['1'],@flag
|
753
|
+
end
|
754
|
+
|
715
755
|
def test_that_we_mutate_ARGV_by_default
|
716
756
|
@app.reset
|
717
757
|
@app.flag :f
|
@@ -763,38 +803,26 @@ class TC_testGLI < Clean::Test::TestCase
|
|
763
803
|
do_test_switch_create_compact(object)
|
764
804
|
end
|
765
805
|
|
766
|
-
def some_descriptions
|
767
|
-
lambda {
|
768
|
-
@description = 'this is a description'
|
769
|
-
@long_description = 'this is a very long description'
|
770
|
-
}
|
771
|
-
end
|
772
|
-
|
773
|
-
def assert_switch_was_made(object,switch)
|
774
|
-
lambda {
|
775
|
-
assert object.switches[switch]
|
776
|
-
assert_equal @description,object.switches[switch].description,"For switch #{switch}"
|
777
|
-
assert_equal @long_description,object.switches[switch].long_description,"For switch #{switch}"
|
778
|
-
assert(object.usage != nil) if object.respond_to? :usage
|
779
|
-
}
|
780
|
-
end
|
781
|
-
|
782
806
|
def do_test_switch_create_classic(object)
|
783
|
-
|
784
|
-
|
785
|
-
|
786
|
-
|
787
|
-
|
788
|
-
|
789
|
-
|
807
|
+
@description = 'this is a description'
|
808
|
+
@long_description = 'this is a very long description'
|
809
|
+
object.desc @description
|
810
|
+
object.long_desc @long_description
|
811
|
+
object.switch :f
|
812
|
+
assert object.switches[:f]
|
813
|
+
assert_equal @description,object.switches[:f].description,"For switch #{:f}"
|
814
|
+
assert_equal @long_description,object.switches[:f].long_description,"For switch #{:f}"
|
815
|
+
assert(object.usage != nil) if object.respond_to? :usage
|
790
816
|
end
|
791
817
|
|
792
818
|
def do_test_switch_create_compact(object)
|
793
|
-
|
794
|
-
|
795
|
-
|
796
|
-
|
797
|
-
|
819
|
+
@description = 'this is a description'
|
820
|
+
@long_description = 'this is a very long description'
|
821
|
+
object.switch :g, :desc => @description, :long_desc => @long_description
|
822
|
+
assert object.switches[:g]
|
823
|
+
assert_equal @description,object.switches[:g].description,"For switch #{:g}"
|
824
|
+
assert_equal @long_description,object.switches[:g].long_description,"For switch #{:g}"
|
825
|
+
assert(object.usage != nil) if object.respond_to? :usage
|
798
826
|
end
|
799
827
|
|
800
828
|
def do_test_switch_create_twice(object)
|