getopt 1.5.1 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/{CHANGES.rdoc → CHANGES.md} +24 -20
- data/Gemfile +3 -0
- data/{MANIFEST.rdoc → MANIFEST.md} +4 -3
- data/{README.rdoc → README.md} +93 -95
- data/Rakefile +11 -16
- data/getopt.gemspec +4 -6
- data/lib/getopt/version.rb +1 -1
- data/spec/getopt_long_spec.rb +279 -0
- data/spec/getopt_std_spec.rb +122 -0
- metadata +37 -30
- metadata.gz.sig +0 -0
- data/test/test_getopt_long.rb +0 -265
- data/test/test_getopt_std.rb +0 -125
metadata.gz.sig
CHANGED
Binary file
|
data/test/test_getopt_long.rb
DELETED
@@ -1,265 +0,0 @@
|
|
1
|
-
#####################################################################
|
2
|
-
# tc_getopt_long.rb
|
3
|
-
#
|
4
|
-
# Test suite for the getopt-long package. You should run this test
|
5
|
-
# via the 'rake test' rake task.
|
6
|
-
#####################################################################
|
7
|
-
require 'test-unit'
|
8
|
-
require 'getopt/long'
|
9
|
-
include Getopt
|
10
|
-
|
11
|
-
class TC_Getopt_Long < Test::Unit::TestCase
|
12
|
-
def setup
|
13
|
-
@opts = nil
|
14
|
-
end
|
15
|
-
|
16
|
-
def test_version
|
17
|
-
assert_equal('1.5.1', Long::VERSION)
|
18
|
-
assert_true(Long::VERSION.frozen?)
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_constants
|
22
|
-
assert_not_nil(BOOLEAN)
|
23
|
-
assert_not_nil(OPTIONAL)
|
24
|
-
assert_not_nil(REQUIRED)
|
25
|
-
assert_not_nil(INCREMENT)
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_getopts_basic
|
29
|
-
assert_respond_to(Long, :getopts)
|
30
|
-
assert_nothing_raised{
|
31
|
-
Long.getopts(["--test"],["--help"],["--foo"])
|
32
|
-
}
|
33
|
-
assert_nothing_raised{
|
34
|
-
Long.getopts(["--test", "-x"],["--help", "-y"],["--foo", "-z"])
|
35
|
-
}
|
36
|
-
assert_nothing_raised{
|
37
|
-
Long.getopts(
|
38
|
-
["--test", "-x", BOOLEAN],
|
39
|
-
["--help", "-y", REQUIRED],
|
40
|
-
["--foo", "-z", OPTIONAL],
|
41
|
-
["--more", "-m", INCREMENT]
|
42
|
-
)
|
43
|
-
}
|
44
|
-
assert_kind_of(Hash, Long.getopts("--test"))
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_getopts_using_equals
|
48
|
-
ARGV.push("--foo=hello","-b","world")
|
49
|
-
assert_nothing_raised{
|
50
|
-
@opts = Long.getopts(
|
51
|
-
["--foo", "-f", REQUIRED],
|
52
|
-
["--bar", "-b", OPTIONAL]
|
53
|
-
)
|
54
|
-
}
|
55
|
-
assert_equal("hello", @opts["foo"])
|
56
|
-
assert_equal("hello", @opts["f"])
|
57
|
-
assert_equal("world", @opts["bar"])
|
58
|
-
assert_equal("world", @opts["b"])
|
59
|
-
end
|
60
|
-
|
61
|
-
def test_getopts_long_embedded_hyphens
|
62
|
-
ARGV.push('--foo-bar', 'hello', '--test1-test2-test3', 'world')
|
63
|
-
assert_nothing_raised{
|
64
|
-
@opts = Long.getopts(
|
65
|
-
['--foo-bar', '-f', REQUIRED],
|
66
|
-
['--test1-test2-test3', '-t', REQUIRED]
|
67
|
-
)
|
68
|
-
}
|
69
|
-
assert_equal('hello', @opts['foo-bar'])
|
70
|
-
assert_equal('hello', @opts['f'])
|
71
|
-
assert_equal('world', @opts['test1-test2-test3'])
|
72
|
-
assert_equal('world', @opts['t'])
|
73
|
-
end
|
74
|
-
|
75
|
-
def test_getopts_long_embedded_hyphens_using_equals_sign
|
76
|
-
ARGV.push('--foo-bar=hello', '--test1-test2-test3=world')
|
77
|
-
assert_nothing_raised{
|
78
|
-
@opts = Long.getopts(
|
79
|
-
['--foo-bar', '-f', REQUIRED],
|
80
|
-
['--test1-test2-test3', '-t', REQUIRED]
|
81
|
-
)
|
82
|
-
}
|
83
|
-
assert_equal('hello', @opts['foo-bar'])
|
84
|
-
assert_equal('hello', @opts['f'])
|
85
|
-
assert_equal('world', @opts['test1-test2-test3'])
|
86
|
-
assert_equal('world', @opts['t'])
|
87
|
-
end
|
88
|
-
|
89
|
-
def test_getopts_short_switch_squished
|
90
|
-
ARGV.push("-f", "hello", "-bworld")
|
91
|
-
assert_nothing_raised{
|
92
|
-
@opts = Long.getopts(
|
93
|
-
["--foo", "-f", REQUIRED],
|
94
|
-
["--bar", "-b", OPTIONAL]
|
95
|
-
)
|
96
|
-
}
|
97
|
-
assert_equal("hello", @opts["f"])
|
98
|
-
assert_equal("world", @opts["b"])
|
99
|
-
end
|
100
|
-
|
101
|
-
def test_getopts_increment_type
|
102
|
-
ARGV.push("-m","-m")
|
103
|
-
assert_nothing_raised{
|
104
|
-
@opts = Long.getopts(["--more", "-m", INCREMENT])
|
105
|
-
}
|
106
|
-
assert_equal(2, @opts["more"])
|
107
|
-
assert_equal(2, @opts["m"])
|
108
|
-
end
|
109
|
-
|
110
|
-
def test_switches_exist
|
111
|
-
ARGV.push("--verbose","--test","--foo")
|
112
|
-
assert_nothing_raised{ @opts = Long.getopts("--verbose --test --foo") }
|
113
|
-
assert_equal(true, @opts.has_key?("verbose"))
|
114
|
-
assert_equal(true, @opts.has_key?("test"))
|
115
|
-
assert_equal(true, @opts.has_key?("foo"))
|
116
|
-
end
|
117
|
-
|
118
|
-
def test_short_switch_synonyms
|
119
|
-
ARGV.push("--verbose","--test","--foo")
|
120
|
-
assert_nothing_raised{ @opts = Long.getopts("--verbose --test --foo") }
|
121
|
-
assert_equal(true, @opts.has_key?("v"))
|
122
|
-
assert_equal(true, @opts.has_key?("t"))
|
123
|
-
assert_equal(true, @opts.has_key?("f"))
|
124
|
-
end
|
125
|
-
|
126
|
-
def test_short_switch_synonyms_with_explicit_types
|
127
|
-
ARGV.push("--verbose", "--test", "hello", "--foo")
|
128
|
-
assert_nothing_raised{
|
129
|
-
@opts = Long.getopts(
|
130
|
-
["--verbose", BOOLEAN],
|
131
|
-
["--test", REQUIRED],
|
132
|
-
["--foo", BOOLEAN]
|
133
|
-
)
|
134
|
-
}
|
135
|
-
assert(@opts.has_key?("v"))
|
136
|
-
assert(@opts.has_key?("t"))
|
137
|
-
assert(@opts.has_key?("f"))
|
138
|
-
end
|
139
|
-
|
140
|
-
def test_switches_with_required_arguments
|
141
|
-
ARGV.push("--foo","1","--bar","hello")
|
142
|
-
assert_nothing_raised{
|
143
|
-
@opts = Long.getopts(
|
144
|
-
["--foo", "-f", REQUIRED],
|
145
|
-
["--bar", "-b", REQUIRED]
|
146
|
-
)
|
147
|
-
}
|
148
|
-
assert_equal({"foo"=>"1", "bar"=>"hello", "f"=>"1", "b"=>"hello"}, @opts)
|
149
|
-
end
|
150
|
-
|
151
|
-
def test_compressed_switches
|
152
|
-
ARGV.push("-fb")
|
153
|
-
assert_nothing_raised{
|
154
|
-
@opts = Long.getopts(
|
155
|
-
["--foo", "-f", BOOLEAN],
|
156
|
-
["--bar", "-b", BOOLEAN]
|
157
|
-
)
|
158
|
-
}
|
159
|
-
assert_equal({"foo"=>true, "f"=>true, "b"=>true, "bar"=>true}, @opts)
|
160
|
-
end
|
161
|
-
|
162
|
-
def test_compress_switches_with_required_arg
|
163
|
-
ARGV.push("-xf", "foo.txt")
|
164
|
-
assert_nothing_raised{
|
165
|
-
@opts = Long.getopts(
|
166
|
-
["--expand", "-x", BOOLEAN],
|
167
|
-
["--file", "-f", REQUIRED]
|
168
|
-
)
|
169
|
-
}
|
170
|
-
assert_equal(
|
171
|
-
{"x"=>true, "expand"=>true, "f"=>"foo.txt", "file"=>"foo.txt"}, @opts
|
172
|
-
)
|
173
|
-
end
|
174
|
-
|
175
|
-
def test_compress_switches_with_compressed_required_arg
|
176
|
-
ARGV.push("-xffoo.txt")
|
177
|
-
assert_nothing_raised{
|
178
|
-
@opts = Long.getopts(
|
179
|
-
["--expand", "-x", BOOLEAN],
|
180
|
-
["--file", "-f", REQUIRED]
|
181
|
-
)
|
182
|
-
}
|
183
|
-
assert_equal(
|
184
|
-
{"x"=>true, "expand"=>true, "f"=>"foo.txt", "file"=>"foo.txt"}, @opts
|
185
|
-
)
|
186
|
-
end
|
187
|
-
|
188
|
-
def test_compress_switches_with_optional_arg_not_defined
|
189
|
-
ARGV.push("-xf")
|
190
|
-
assert_nothing_raised{
|
191
|
-
@opts = Long.getopts(
|
192
|
-
["--expand", "-x", BOOLEAN],
|
193
|
-
["--file", "-f", OPTIONAL]
|
194
|
-
)
|
195
|
-
}
|
196
|
-
assert_equal(
|
197
|
-
{"x"=>true, "expand"=>true, "f"=>nil, "file"=>nil}, @opts
|
198
|
-
)
|
199
|
-
end
|
200
|
-
|
201
|
-
def test_compress_switches_with_optional_arg
|
202
|
-
ARGV.push("-xf", "boo.txt")
|
203
|
-
assert_nothing_raised{
|
204
|
-
@opts = Long.getopts(
|
205
|
-
["--expand", "-x", BOOLEAN],
|
206
|
-
["--file", "-f", OPTIONAL]
|
207
|
-
)
|
208
|
-
}
|
209
|
-
assert_equal(
|
210
|
-
{"x"=>true, "expand"=>true, "f"=>"boo.txt", "file"=>"boo.txt"}, @opts
|
211
|
-
)
|
212
|
-
end
|
213
|
-
|
214
|
-
def test_compress_switches_with_compressed_optional_arg
|
215
|
-
ARGV.push("-xfboo.txt")
|
216
|
-
assert_nothing_raised{
|
217
|
-
@opts = Long.getopts(
|
218
|
-
["--expand", "-x", BOOLEAN],
|
219
|
-
["--file", "-f", OPTIONAL]
|
220
|
-
)
|
221
|
-
}
|
222
|
-
assert_equal(
|
223
|
-
{"x"=>true, "expand"=>true, "f"=>"boo.txt", "file"=>"boo.txt"}, @opts
|
224
|
-
)
|
225
|
-
end
|
226
|
-
|
227
|
-
def test_compressed_short_and_long_mixed
|
228
|
-
ARGV.push("-xb", "--file", "boo.txt", "-v")
|
229
|
-
assert_nothing_raised{
|
230
|
-
@opts = Long.getopts(
|
231
|
-
["--expand", "-x", BOOLEAN],
|
232
|
-
["--verbose", "-v", BOOLEAN],
|
233
|
-
["--file", "-f", REQUIRED],
|
234
|
-
["--bar", "-b", OPTIONAL]
|
235
|
-
)
|
236
|
-
assert_equal(
|
237
|
-
{ "x"=>true, "expand"=>true,
|
238
|
-
"v"=>true, "verbose"=>true,
|
239
|
-
"f"=>"boo.txt", "file"=>"boo.txt",
|
240
|
-
"b"=>nil, "bar"=>nil
|
241
|
-
},
|
242
|
-
@opts
|
243
|
-
)
|
244
|
-
}
|
245
|
-
end
|
246
|
-
|
247
|
-
def test_multiple_similar_long_switches_with_no_short_switches
|
248
|
-
ARGV.push('--to','1','--too','2','--tooo','3')
|
249
|
-
assert_nothing_raised{
|
250
|
-
@opts = Long.getopts(
|
251
|
-
["--to", REQUIRED],
|
252
|
-
["--too", REQUIRED],
|
253
|
-
["--tooo", REQUIRED]
|
254
|
-
)
|
255
|
-
}
|
256
|
-
assert_equal('1', @opts['to'])
|
257
|
-
assert_equal('2', @opts['too'])
|
258
|
-
assert_equal('3', @opts['tooo'])
|
259
|
-
end
|
260
|
-
|
261
|
-
def teardown
|
262
|
-
@opts = nil
|
263
|
-
ARGV.clear
|
264
|
-
end
|
265
|
-
end
|
data/test/test_getopt_std.rb
DELETED
@@ -1,125 +0,0 @@
|
|
1
|
-
###################################################################
|
2
|
-
# test_getopt_std.rb
|
3
|
-
#
|
4
|
-
# Test suite for the Getopt::Std class. You should run this test
|
5
|
-
# via the 'rake test' task.
|
6
|
-
###################################################################
|
7
|
-
require 'test-unit'
|
8
|
-
require 'getopt/std'
|
9
|
-
include Getopt
|
10
|
-
|
11
|
-
class TC_Getopt_Std < Test::Unit::TestCase
|
12
|
-
def test_version
|
13
|
-
assert_equal('1.5.1', Std::VERSION)
|
14
|
-
assert_true(Std::VERSION.frozen?)
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_getopts_basic
|
18
|
-
assert_respond_to(Std, :getopts)
|
19
|
-
assert_nothing_raised{ Std.getopts("ID") }
|
20
|
-
assert_kind_of(Hash, Std.getopts("ID"))
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_getopts_separated_switches
|
24
|
-
ARGV.push("-I", "-D")
|
25
|
-
assert_equal({"I"=>true, "D"=>true}, Std.getopts("ID"))
|
26
|
-
end
|
27
|
-
|
28
|
-
# Inspired by RF bug #23477
|
29
|
-
def test_getopts_arguments_that_match_switch_are_ok
|
30
|
-
ARGV.push("-d", "d")
|
31
|
-
assert_equal({"d" => "d"}, Std.getopts("d:"))
|
32
|
-
|
33
|
-
ARGV.push("-d", "ad")
|
34
|
-
assert_equal({"d" => "ad"}, Std.getopts("d:"))
|
35
|
-
|
36
|
-
ARGV.push("-a", "ad")
|
37
|
-
assert_equal({"a" => "ad"}, Std.getopts("d:a:"))
|
38
|
-
|
39
|
-
ARGV.push("-a", "da")
|
40
|
-
assert_equal({"a" => "da"}, Std.getopts("d:a:"))
|
41
|
-
|
42
|
-
ARGV.push("-a", "d")
|
43
|
-
assert_equal({"a" => "d"}, Std.getopts("d:a:"))
|
44
|
-
|
45
|
-
ARGV.push("-a", "dad")
|
46
|
-
assert_equal({"a" => "dad"}, Std.getopts("d:a:"))
|
47
|
-
|
48
|
-
ARGV.push("-d", "d", "-a", "a")
|
49
|
-
assert_equal({"d" => "d", "a" => "a"}, Std.getopts("d:a:"))
|
50
|
-
end
|
51
|
-
|
52
|
-
def test_getopts_joined_switches
|
53
|
-
ARGV.push("-ID")
|
54
|
-
assert_equal({"I"=>true, "D"=>true}, Std.getopts("ID"))
|
55
|
-
end
|
56
|
-
|
57
|
-
def test_getopts_separated_switches_with_mandatory_arg
|
58
|
-
ARGV.push("-o", "hello", "-I", "-D")
|
59
|
-
assert_equal({"o"=>"hello", "I"=>true, "D"=>true}, Std.getopts("o:ID"))
|
60
|
-
end
|
61
|
-
|
62
|
-
def test_getopts_joined_switches_with_mandatory_arg
|
63
|
-
ARGV.push("-IDo", "hello")
|
64
|
-
assert_equal({"o"=>"hello", "I"=>true, "D"=>true}, Std.getopts("o:ID"))
|
65
|
-
end
|
66
|
-
|
67
|
-
def test_getopts_no_args
|
68
|
-
assert_nothing_raised{ Std.getopts("ID") }
|
69
|
-
assert_equal({}, Std.getopts("ID"))
|
70
|
-
assert_nil(Std.getopts("ID")["I"])
|
71
|
-
assert_nil(Std.getopts("ID")["D"])
|
72
|
-
end
|
73
|
-
|
74
|
-
# If a switch that accepts an argument appears more than once, the values
|
75
|
-
# are rolled into an array.
|
76
|
-
def test_getopts_switch_repeated
|
77
|
-
ARGV.push("-I", "-I", "-o", "hello", "-o", "world")
|
78
|
-
assert_equal({"o" => ["hello","world"], "I"=>true}, Std.getopts("o:ID"))
|
79
|
-
end
|
80
|
-
|
81
|
-
# EXPECTED ERRORS
|
82
|
-
|
83
|
-
def test_getopts_expected_errors_passing_switch_to_another_switch
|
84
|
-
ARGV.push("-d", "-d")
|
85
|
-
assert_raise(Getopt::Std::Error){ Std.getopts("d:a:") }
|
86
|
-
|
87
|
-
ARGV.push("-d", "-a")
|
88
|
-
assert_raise(Getopt::Std::Error){ Std.getopts("d:a:") }
|
89
|
-
|
90
|
-
ARGV.push("-a", "-d")
|
91
|
-
assert_raise(Getopt::Std::Error){ Std.getopts("d:a:") }
|
92
|
-
|
93
|
-
ARGV.push("-d", "-d")
|
94
|
-
assert_raise_message("cannot use switch '-d' as argument to another switch"){ Std.getopts("d:a:") }
|
95
|
-
end
|
96
|
-
|
97
|
-
def test_getopts_expected_errors_missing_arg
|
98
|
-
ARGV.push("-ID")
|
99
|
-
assert_raises(Std::Error){ Std.getopts("I:D") }
|
100
|
-
|
101
|
-
ARGV.push("-ID")
|
102
|
-
assert_raises(Std::Error){ Std.getopts("ID:") }
|
103
|
-
end
|
104
|
-
|
105
|
-
def test_getopts_expected_errors_extra_arg
|
106
|
-
ARGV.push("-I", "-D", "-X")
|
107
|
-
assert_raises(Std::Error){ Std.getopts("ID") }
|
108
|
-
|
109
|
-
ARGV.push("-IDX")
|
110
|
-
assert_raises(Std::Error){ Std.getopts("ID") }
|
111
|
-
|
112
|
-
ARGV.push("-IDX")
|
113
|
-
assert_raise_message("invalid option 'X'"){ Std.getopts("ID") }
|
114
|
-
end
|
115
|
-
|
116
|
-
def test_getopts_expected_errors_basic
|
117
|
-
assert_raises(ArgumentError){ Std.getopts }
|
118
|
-
assert_raises(NoMethodError){ Std.getopts(0) }
|
119
|
-
assert_raises(NoMethodError){ Std.getopts(nil) }
|
120
|
-
end
|
121
|
-
|
122
|
-
def teardown
|
123
|
-
ARGV.clear
|
124
|
-
end
|
125
|
-
end
|