hammer_cli 3.7.0 → 3.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/hammer +1 -6
- data/doc/release_notes.md +15 -0
- data/lib/hammer_cli/help/builder.rb +1 -2
- data/lib/hammer_cli/i18n/find_task.rb +88 -0
- data/lib/hammer_cli/i18n.rb +4 -0
- data/lib/hammer_cli/options/normalizers.rb +2 -5
- data/lib/hammer_cli/settings.rb +7 -0
- data/lib/hammer_cli/task_helper.rb +84 -0
- data/lib/hammer_cli/testing/output_matchers.rb +1 -1
- data/lib/hammer_cli/utils.rb +1 -1
- data/lib/hammer_cli/version.rb +1 -1
- data/locale/Makefile.def +29 -7
- data/locale/ca/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/cs_CZ/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/de/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/en/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/en_GB/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/es/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/fr/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/it/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/ja/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/ka/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/ko/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/pt_BR/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/ru/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/zh_CN/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/zh_TW/LC_MESSAGES/hammer-cli.mo +0 -0
- data/man/hammer.1.gz +0 -0
- data/test/functional/help_test.rb +1 -1
- data/test/test_helper.rb +1 -1
- data/test/unit/abstract_test.rb +54 -54
- data/test/unit/apipie/command_test.rb +26 -27
- data/test/unit/apipie/option_builder_test.rb +28 -28
- data/test/unit/apipie/option_definition_test.rb +5 -5
- data/test/unit/apipie/test_helper.rb +3 -0
- data/test/unit/bash_test.rb +21 -21
- data/test/unit/command_extensions_test.rb +68 -68
- data/test/unit/completer_test.rb +57 -57
- data/test/unit/csv_parser_test.rb +12 -12
- data/test/unit/defaults_test.rb +3 -3
- data/test/unit/help/builder_test.rb +7 -7
- data/test/unit/help/definition/abstract_item_test.rb +2 -2
- data/test/unit/help/definition/list_test.rb +2 -2
- data/test/unit/help/definition/note_test.rb +2 -2
- data/test/unit/help/definition/section_test.rb +2 -2
- data/test/unit/help/definition/text_test.rb +2 -2
- data/test/unit/help/definition_test.rb +36 -36
- data/test/unit/help/text_builder_test.rb +39 -39
- data/test/unit/history_test.rb +6 -6
- data/test/unit/i18n_test.rb +2 -2
- data/test/unit/logger_test.rb +1 -1
- data/test/unit/main_test.rb +7 -7
- data/test/unit/modules_test.rb +24 -25
- data/test/unit/option_builder_test.rb +1 -1
- data/test/unit/options/matcher_test.rb +15 -15
- data/test/unit/options/normalizers_test.rb +92 -88
- data/test/unit/options/option_definition_test.rb +11 -11
- data/test/unit/options/option_family_test.rb +7 -7
- data/test/unit/options/validators/dsl_test.rb +35 -35
- data/test/unit/output/adapter/abstract_test.rb +10 -10
- data/test/unit/output/adapter/base_test.rb +36 -36
- data/test/unit/output/adapter/csv_test.rb +38 -38
- data/test/unit/output/adapter/json_test.rb +38 -38
- data/test/unit/output/adapter/table_test.rb +42 -50
- data/test/unit/output/adapter/yaml_test.rb +38 -38
- data/test/unit/output/definition_test.rb +43 -43
- data/test/unit/output/dsl_test.rb +19 -19
- data/test/unit/output/field_filter_test.rb +10 -10
- data/test/unit/output/fields_test.rb +27 -27
- data/test/unit/output/formatters_test.rb +39 -39
- data/test/unit/output/output_test.rb +14 -14
- data/test/unit/output/record_collection_test.rb +18 -18
- data/test/unit/settings_test.rb +35 -35
- data/test/unit/utils_test.rb +30 -27
- metadata +33 -44
@@ -8,7 +8,7 @@ describe HammerCLI::Options::Normalizers do
|
|
8
8
|
let(:formatter) { HammerCLI::Options::Normalizers::AbstractNormalizer.new }
|
9
9
|
|
10
10
|
it "should raise exception on format" do
|
11
|
-
|
11
|
+
_{ formatter.format(nil) }.must_raise NotImplementedError
|
12
12
|
end
|
13
13
|
|
14
14
|
end
|
@@ -18,19 +18,19 @@ describe HammerCLI::Options::Normalizers do
|
|
18
18
|
let(:formatter) { HammerCLI::Options::Normalizers::Default.new }
|
19
19
|
|
20
20
|
it "should not change any value" do
|
21
|
-
formatter.format('value').must_equal 'value'
|
21
|
+
_(formatter.format('value')).must_equal 'value'
|
22
22
|
end
|
23
23
|
|
24
24
|
it "should not change nil value" do
|
25
|
-
formatter.format(nil).must_be_nil
|
25
|
+
_(formatter.format(nil)).must_be_nil
|
26
26
|
end
|
27
27
|
|
28
28
|
it "has empty description" do
|
29
|
-
formatter.description.must_equal ''
|
29
|
+
_(formatter.description).must_equal ''
|
30
30
|
end
|
31
31
|
|
32
32
|
it "has empty completion" do
|
33
|
-
formatter.complete('test').must_equal []
|
33
|
+
_(formatter.complete('test')).must_equal []
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
@@ -39,44 +39,44 @@ describe HammerCLI::Options::Normalizers do
|
|
39
39
|
let(:formatter) { HammerCLI::Options::Normalizers::List.new }
|
40
40
|
|
41
41
|
it "should return empty array on nil" do
|
42
|
-
formatter.format(nil).must_equal []
|
42
|
+
_(formatter.format(nil)).must_equal []
|
43
43
|
end
|
44
44
|
|
45
45
|
it "should return empty array on empty string" do
|
46
|
-
formatter.format("").must_equal []
|
46
|
+
_(formatter.format("")).must_equal []
|
47
47
|
end
|
48
48
|
|
49
49
|
it "should parse a string" do
|
50
|
-
formatter.format("a").must_equal ['a']
|
50
|
+
_(formatter.format("a")).must_equal ['a']
|
51
51
|
end
|
52
52
|
|
53
53
|
it "should parse a number" do
|
54
|
-
formatter.format("2").must_equal [2]
|
54
|
+
_(formatter.format("2")).must_equal [2]
|
55
55
|
end
|
56
56
|
|
57
57
|
it "should parse a comma separated string" do
|
58
|
-
formatter.format("a,b,c").must_equal ['a', 'b', 'c']
|
58
|
+
_(formatter.format("a,b,c")).must_equal ['a', 'b', 'c']
|
59
59
|
end
|
60
60
|
|
61
61
|
it "should parse a comma separated string with values including comma" do
|
62
|
-
formatter.format('a,b,"c,d"').must_equal ['a', 'b', 'c,d']
|
62
|
+
_(formatter.format('a,b,"c,d"')).must_equal ['a', 'b', 'c,d']
|
63
63
|
end
|
64
64
|
|
65
65
|
it "should parse a comma separated string with values including comma (doublequotes)" do
|
66
|
-
formatter.format("a,b,'c,d'").must_equal ['a', 'b', 'c,d']
|
66
|
+
_(formatter.format("a,b,'c,d'")).must_equal ['a', 'b', 'c,d']
|
67
67
|
end
|
68
68
|
|
69
69
|
it "should parse a comma separated string containig double quotes" do
|
70
|
-
formatter.format('a,b,\"c\"').must_equal ['a', 'b', '"c"']
|
70
|
+
_(formatter.format('a,b,\"c\"')).must_equal ['a', 'b', '"c"']
|
71
71
|
end
|
72
72
|
|
73
73
|
it "should catch quoting errors" do
|
74
|
-
|
74
|
+
_{ formatter.format('1,"3,4""s') }.must_raise ArgumentError
|
75
75
|
end
|
76
76
|
|
77
77
|
it "should accept and parse JSON" do
|
78
78
|
value = {'name' => 'bla', 'value' => 1}
|
79
|
-
formatter.format(value.to_json).must_equal([value])
|
79
|
+
_(formatter.format(value.to_json)).must_equal([value])
|
80
80
|
end
|
81
81
|
end
|
82
82
|
|
@@ -102,19 +102,19 @@ describe HammerCLI::Options::Normalizers do
|
|
102
102
|
let(:formatter) { HammerCLI::Options::Normalizers::ListNested.new(param.params) }
|
103
103
|
|
104
104
|
it "should accept and parse JSON" do
|
105
|
-
formatter.format("{\"name\":\"bla\", \"value\":1}").must_equal(
|
105
|
+
_(formatter.format("{\"name\":\"bla\", \"value\":1}")).must_equal(
|
106
106
|
JSON.parse("{\"name\":\"bla\", \"value\":1}")
|
107
107
|
)
|
108
108
|
end
|
109
109
|
|
110
110
|
it "should parse simple input" do
|
111
|
-
formatter.format("name=test\\,value=1,name=other\\,value=2").must_equal(
|
111
|
+
_(formatter.format("name=test\\,value=1,name=other\\,value=2")).must_equal(
|
112
112
|
[{'name' => 'test', 'value' => '1'}, {'name' => 'other', 'value' => '2'}]
|
113
113
|
)
|
114
114
|
end
|
115
115
|
|
116
116
|
it "should parse unexpected input" do
|
117
|
-
formatter.format("name=test\\,value=1,name=other\\,value=2,unexp=doe").must_equal(
|
117
|
+
_(formatter.format("name=test\\,value=1,name=other\\,value=2,unexp=doe")).must_equal(
|
118
118
|
[
|
119
119
|
{'name' => 'test', 'value' => '1'}, {'name' => 'other', 'value' => '2'},
|
120
120
|
{'unexp' => 'doe'}
|
@@ -123,15 +123,15 @@ describe HammerCLI::Options::Normalizers do
|
|
123
123
|
end
|
124
124
|
|
125
125
|
it "should accept arrays" do
|
126
|
-
formatter.format("name=test\\,value=1,name=other\\,value=[1\\,2\\,3]").must_equal(
|
126
|
+
_(formatter.format("name=test\\,value=1,name=other\\,value=[1\\,2\\,3]")).must_equal(
|
127
127
|
[{'name' => 'test', 'value' => '1'}, {'name' => 'other', 'value' => ['1', '2', '3']}]
|
128
128
|
)
|
129
129
|
end
|
130
130
|
|
131
131
|
it "should accept hashes" do
|
132
|
-
formatter.format(
|
132
|
+
_(formatter.format(
|
133
133
|
"name=test\\,value={key=key1\\,value=1},name=other\\,value={key=key2\\,value=2}"
|
134
|
-
).must_equal(
|
134
|
+
)).must_equal(
|
135
135
|
[
|
136
136
|
{'name' => 'test', 'value' => {'key' => 'key1', 'value' => '1'}},
|
137
137
|
{'name' => 'other', 'value' => {'key' => 'key2', 'value' => '2'}},
|
@@ -140,10 +140,10 @@ describe HammerCLI::Options::Normalizers do
|
|
140
140
|
end
|
141
141
|
|
142
142
|
it "should accept combined input" do
|
143
|
-
formatter.format(
|
143
|
+
_(formatter.format(
|
144
144
|
"name=foo\\,value=1\\,adds=[1\\,2\\,3]\\,cpu={name=ddd\\,type=abc}," \
|
145
145
|
"name=bar\\,value=2\\,adds=[2\\,2\\,2]\\,cpu={name=ccc\\,type=cba}"
|
146
|
-
).must_equal(
|
146
|
+
)).must_equal(
|
147
147
|
[
|
148
148
|
{'name' => 'foo', 'value' => '1', 'adds' => ['1','2','3'], 'cpu' => {'name' => 'ddd', 'type' => 'abc'}},
|
149
149
|
{'name' => 'bar', 'value' => '2', 'adds' => ['2','2','2'], 'cpu' => {'name' => 'ccc', 'type' => 'cba'}}
|
@@ -157,100 +157,104 @@ describe HammerCLI::Options::Normalizers do
|
|
157
157
|
let(:formatter) { HammerCLI::Options::Normalizers::KeyValueList.new }
|
158
158
|
|
159
159
|
it "should return empty array on nil" do
|
160
|
-
formatter.format(nil).must_equal({})
|
160
|
+
_(formatter.format(nil)).must_equal({})
|
161
161
|
end
|
162
162
|
|
163
163
|
it "should return empty array on empty string" do
|
164
|
-
formatter.format("").must_equal({})
|
164
|
+
_(formatter.format("")).must_equal({})
|
165
165
|
end
|
166
166
|
|
167
167
|
it "should parse a string" do
|
168
|
-
|
168
|
+
_{ formatter.format("a") }.must_raise ArgumentError
|
169
169
|
end
|
170
170
|
|
171
171
|
describe 'key=value format' do
|
172
|
+
it 'should parse values with commas' do
|
173
|
+
_(formatter.format('a=1,2,b=3,4')).must_equal({ 'a' => '1,2', 'b' => '3,4'})
|
174
|
+
end
|
175
|
+
|
172
176
|
it "should parse a comma separated string" do
|
173
|
-
formatter.format("a=1,b=2,c=3").must_equal({'a' => '1', 'b' => '2', 'c' => '3'})
|
177
|
+
_(formatter.format("a=1,b=2,c=3")).must_equal({'a' => '1', 'b' => '2', 'c' => '3'})
|
174
178
|
end
|
175
179
|
|
176
180
|
it "should parse a comma separated string with spaces" do
|
177
|
-
formatter.format("a= 1 , b = 2 ,c =3").must_equal({'a' => '1', 'b' => '2', 'c' => '3'})
|
181
|
+
_(formatter.format("a= 1 , b = 2 ,c =3")).must_equal({'a' => '1', 'b' => '2', 'c' => '3'})
|
178
182
|
end
|
179
183
|
|
180
184
|
it 'should parse a comma separated string with spaces using single quotes' do
|
181
|
-
formatter.format("a= ' 1 ' , b =' 2',c ='3'").must_equal({ 'a' => "' 1 '", 'b' => "' 2'", 'c' => "'3'" })
|
185
|
+
_(formatter.format("a= ' 1 ' , b =' 2',c ='3'")).must_equal({ 'a' => "' 1 '", 'b' => "' 2'", 'c' => "'3'" })
|
182
186
|
end
|
183
187
|
|
184
188
|
it 'should parse a comma separated string with spaces using double quotes' do
|
185
|
-
formatter.format('a= " 1 " , b =" 2",c ="3"').must_equal({ 'a' => '" 1 "', 'b' => '" 2"', 'c' => '"3"' })
|
189
|
+
_(formatter.format('a= " 1 " , b =" 2",c ="3"')).must_equal({ 'a' => '" 1 "', 'b' => '" 2"', 'c' => '"3"' })
|
186
190
|
end
|
187
191
|
|
188
192
|
it 'should deal with equal sign in string value' do
|
189
|
-
formatter.format("a=1,b='2=2',c=3").must_equal({ 'a' => '1', 'b' => "'2=2'", 'c' => '3' })
|
193
|
+
_(formatter.format("a=1,b='2=2',c=3")).must_equal({ 'a' => '1', 'b' => "'2=2'", 'c' => '3' })
|
190
194
|
end
|
191
195
|
|
192
196
|
it 'should deal with equal sign in value' do
|
193
|
-
formatter.format('a=1,b=2=2,c=3').must_equal({ 'a' => '1', 'b' => '2=2', 'c' => '3' })
|
197
|
+
_(formatter.format('a=1,b=2=2,c=3')).must_equal({ 'a' => '1', 'b' => '2=2', 'c' => '3' })
|
194
198
|
end
|
195
199
|
|
196
200
|
it "should parse arrays" do
|
197
|
-
formatter.format("a=1,b=[1,2,3],c=3").must_equal({'a' => '1', 'b' => ['1', '2', '3'], 'c' => '3'})
|
201
|
+
_(formatter.format("a=1,b=[1,2,3],c=3")).must_equal({'a' => '1', 'b' => ['1', '2', '3'], 'c' => '3'})
|
198
202
|
end
|
199
203
|
|
200
204
|
it "should parse arrays with spaces" do
|
201
|
-
formatter.format("a=1,b=[1, 2, 3],c=3").must_equal({'a' => '1', 'b' => ['1', '2', '3'], 'c' => '3'})
|
205
|
+
_(formatter.format("a=1,b=[1, 2, 3],c=3")).must_equal({'a' => '1', 'b' => ['1', '2', '3'], 'c' => '3'})
|
202
206
|
end
|
203
207
|
|
204
208
|
it 'should parse arrays with spaces using by single quotes' do
|
205
|
-
formatter.format("a=1,b=['1 1', ' 2 ', ' 3 3'],c=3").must_equal(
|
209
|
+
_(formatter.format("a=1,b=['1 1', ' 2 ', ' 3 3'],c=3")).must_equal(
|
206
210
|
{ 'a' => '1', 'b' => ["'1 1'", "' 2 '", "' 3 3'"], 'c' => '3' }
|
207
211
|
)
|
208
212
|
end
|
209
213
|
|
210
214
|
it 'should parse arrays with spaces using by double quotes' do
|
211
|
-
formatter.format('a=1,b=["1 1", " 2 ", " 3 3"],c=3').must_equal(
|
215
|
+
_(formatter.format('a=1,b=["1 1", " 2 ", " 3 3"],c=3')).must_equal(
|
212
216
|
{ 'a' => '1', 'b' => ['"1 1"', '" 2 "', '" 3 3"'], 'c' => '3' }
|
213
217
|
)
|
214
218
|
end
|
215
219
|
|
216
220
|
it 'should parse arrays with spaces' do
|
217
|
-
formatter.format('a=1,b=[1 1, 2 , 3 3],c=3').must_equal({ 'a' => '1', 'b' => ['1 1', '2', '3 3'], 'c' => '3' })
|
221
|
+
_(formatter.format('a=1,b=[1 1, 2 , 3 3],c=3')).must_equal({ 'a' => '1', 'b' => ['1 1', '2', '3 3'], 'c' => '3' })
|
218
222
|
end
|
219
223
|
|
220
224
|
it "should parse array with one item" do
|
221
|
-
formatter.format("a=1,b=[abc],c=3").must_equal({'a' => '1', 'b' => ['abc'], 'c' => '3'})
|
225
|
+
_(formatter.format("a=1,b=[abc],c=3")).must_equal({'a' => '1', 'b' => ['abc'], 'c' => '3'})
|
222
226
|
end
|
223
227
|
|
224
228
|
it "should parse empty array" do
|
225
|
-
formatter.format("a=1,b=[],c=3").must_equal({'a' => '1', 'b' => [], 'c' => '3'})
|
229
|
+
_(formatter.format("a=1,b=[],c=3")).must_equal({'a' => '1', 'b' => [], 'c' => '3'})
|
226
230
|
end
|
227
231
|
|
228
232
|
it "should parse hash with one item" do
|
229
|
-
formatter.format("a=1,b={key=abc,value=abc},c=3").must_equal(
|
233
|
+
_(formatter.format("a=1,b={key=abc,value=abc},c=3")).must_equal(
|
230
234
|
{'a' => '1', 'b' => {'key' => 'abc', 'value' => 'abc'}, 'c' => '3'}
|
231
235
|
)
|
232
236
|
end
|
233
237
|
|
234
238
|
it "should parse empty hash" do
|
235
|
-
formatter.format("a=1,b={},c=3").must_equal({'a' => '1', 'b' => {}, 'c' => '3'})
|
239
|
+
_(formatter.format("a=1,b={},c=3")).must_equal({'a' => '1', 'b' => {}, 'c' => '3'})
|
236
240
|
end
|
237
241
|
|
238
242
|
it "should parse a comma separated string 2" do
|
239
|
-
|
243
|
+
_(formatter.format("a=1,b,c=3")).must_equal({ 'a' => '1,b', 'c' => '3' })
|
240
244
|
end
|
241
245
|
|
242
246
|
it 'should parse explicit strings' do
|
243
|
-
formatter.format('name="*"').must_equal({ 'name' => '"*"' })
|
247
|
+
_(formatter.format('name="*"')).must_equal({ 'name' => '"*"' })
|
244
248
|
end
|
245
249
|
end
|
246
250
|
|
247
251
|
describe 'json format' do
|
248
252
|
it 'parses arrays' do
|
249
|
-
formatter.format('["a", "b", 1]').must_equal(['a', 'b', 1])
|
253
|
+
_(formatter.format('["a", "b", 1]')).must_equal(['a', 'b', 1])
|
250
254
|
end
|
251
255
|
|
252
256
|
it 'parses objects' do
|
253
|
-
formatter.format('{"a": ["b", 1]}').must_equal({'a' => ['b', 1]})
|
257
|
+
_(formatter.format('{"a": ["b", 1]}')).must_equal({'a' => ['b', 1]})
|
254
258
|
end
|
255
259
|
end
|
256
260
|
end
|
@@ -259,11 +263,11 @@ describe HammerCLI::Options::Normalizers do
|
|
259
263
|
let(:formatter) { HammerCLI::Options::Normalizers::Number.new }
|
260
264
|
|
261
265
|
it "should return number on numeric values" do
|
262
|
-
formatter.format("1").must_equal 1
|
266
|
+
_(formatter.format("1")).must_equal 1
|
263
267
|
end
|
264
268
|
|
265
269
|
it "should raise ArgumentError on non-numeric values" do
|
266
|
-
|
270
|
+
_{ formatter.format("a") }.must_raise ArgumentError
|
267
271
|
end
|
268
272
|
end
|
269
273
|
|
@@ -272,59 +276,59 @@ describe HammerCLI::Options::Normalizers do
|
|
272
276
|
let(:formatter) { HammerCLI::Options::Normalizers::Bool.new }
|
273
277
|
|
274
278
|
it "should return true on true" do
|
275
|
-
formatter.format("true").must_equal(true)
|
276
|
-
formatter.format("TRUE").must_equal(true)
|
279
|
+
_(formatter.format("true")).must_equal(true)
|
280
|
+
_(formatter.format("TRUE")).must_equal(true)
|
277
281
|
end
|
278
282
|
|
279
283
|
it "should return true on t" do
|
280
|
-
formatter.format("t").must_equal(true)
|
281
|
-
formatter.format("T").must_equal(true)
|
284
|
+
_(formatter.format("t")).must_equal(true)
|
285
|
+
_(formatter.format("T")).must_equal(true)
|
282
286
|
end
|
283
287
|
|
284
288
|
it "should return true on yes" do
|
285
|
-
formatter.format("yes").must_equal(true)
|
286
|
-
formatter.format("YES").must_equal(true)
|
289
|
+
_(formatter.format("yes")).must_equal(true)
|
290
|
+
_(formatter.format("YES")).must_equal(true)
|
287
291
|
end
|
288
292
|
|
289
293
|
it "should return true on y" do
|
290
|
-
formatter.format("y").must_equal(true)
|
291
|
-
formatter.format("Y").must_equal(true)
|
294
|
+
_(formatter.format("y")).must_equal(true)
|
295
|
+
_(formatter.format("Y")).must_equal(true)
|
292
296
|
end
|
293
297
|
|
294
298
|
it "should return true on 1" do
|
295
|
-
formatter.format("1").must_equal(true)
|
299
|
+
_(formatter.format("1")).must_equal(true)
|
296
300
|
end
|
297
301
|
|
298
302
|
it "should return false on false" do
|
299
|
-
formatter.format("false").must_equal(false)
|
300
|
-
formatter.format("FALSE").must_equal(false)
|
303
|
+
_(formatter.format("false")).must_equal(false)
|
304
|
+
_(formatter.format("FALSE")).must_equal(false)
|
301
305
|
end
|
302
306
|
|
303
307
|
it "should return false on f" do
|
304
|
-
formatter.format("f").must_equal(false)
|
305
|
-
formatter.format("F").must_equal(false)
|
308
|
+
_(formatter.format("f")).must_equal(false)
|
309
|
+
_(formatter.format("F")).must_equal(false)
|
306
310
|
end
|
307
311
|
|
308
312
|
it "should return false on no" do
|
309
|
-
formatter.format("no").must_equal(false)
|
310
|
-
formatter.format("NO").must_equal(false)
|
313
|
+
_(formatter.format("no")).must_equal(false)
|
314
|
+
_(formatter.format("NO")).must_equal(false)
|
311
315
|
end
|
312
316
|
|
313
317
|
it "should return false on n" do
|
314
|
-
formatter.format("n").must_equal(false)
|
315
|
-
formatter.format("N").must_equal(false)
|
318
|
+
_(formatter.format("n")).must_equal(false)
|
319
|
+
_(formatter.format("N")).must_equal(false)
|
316
320
|
end
|
317
321
|
|
318
322
|
it "should return false on 0" do
|
319
|
-
formatter.format("0").must_equal(false)
|
323
|
+
_(formatter.format("0")).must_equal(false)
|
320
324
|
end
|
321
325
|
|
322
326
|
it "should raise exception on nil" do
|
323
|
-
|
327
|
+
_{ formatter.format(nil) }.must_raise ArgumentError
|
324
328
|
end
|
325
329
|
|
326
330
|
it "should raise exception on other values" do
|
327
|
-
|
331
|
+
_{ formatter.format('unknown') }.must_raise ArgumentError
|
328
332
|
end
|
329
333
|
end
|
330
334
|
|
@@ -333,24 +337,24 @@ describe HammerCLI::Options::Normalizers do
|
|
333
337
|
|
334
338
|
it "should return a hash on valid json file" do
|
335
339
|
file = File.join(File.dirname(__FILE__), '../fixtures/json_input/valid.json')
|
336
|
-
formatter.format(file).must_equal({ "units" => [ { "name" => "zip", "version" => "10.0" },
|
340
|
+
_(formatter.format(file)).must_equal({ "units" => [ { "name" => "zip", "version" => "10.0" },
|
337
341
|
{ "name" => "zap", "version" => "9.0" }] })
|
338
342
|
end
|
339
343
|
|
340
344
|
it "should raise exception on invalid json file contents" do
|
341
345
|
file = File.join(File.dirname(__FILE__), '../fixtures/json_input/invalid.json')
|
342
|
-
|
346
|
+
_{ formatter.format(file) }.must_raise ArgumentError
|
343
347
|
end
|
344
348
|
|
345
349
|
it "should return a hash on valid json string" do
|
346
350
|
json_string = '{ "units":[{ "name":"zip", "version":"10.0" }, { "name":"zap", "version":"9.0" }] }'
|
347
|
-
formatter.format(json_string).must_equal({ "units" => [ { "name" => "zip", "version" => "10.0" },
|
351
|
+
_(formatter.format(json_string)).must_equal({ "units" => [ { "name" => "zip", "version" => "10.0" },
|
348
352
|
{ "name" => "zap", "version" => "9.0" }] })
|
349
353
|
end
|
350
354
|
|
351
355
|
it "should raise exception on invalid json string" do
|
352
356
|
json_string = "{ units:[{ name:zip, version:10.0 }, { name:zap, version:9.0 }] }"
|
353
|
-
|
357
|
+
_{ formatter.format(json_string) }.must_raise ArgumentError
|
354
358
|
end
|
355
359
|
|
356
360
|
end
|
@@ -360,19 +364,19 @@ describe HammerCLI::Options::Normalizers do
|
|
360
364
|
let(:formatter) { HammerCLI::Options::Normalizers::Enum.new ['a', 'b'] }
|
361
365
|
|
362
366
|
it "should return return value when in the list" do
|
363
|
-
formatter.format("a").must_equal("a")
|
367
|
+
_(formatter.format("a")).must_equal("a")
|
364
368
|
end
|
365
369
|
|
366
370
|
it "should rise argument error when the value is nil" do
|
367
|
-
|
371
|
+
_{ formatter.format(nil) }.must_raise ArgumentError
|
368
372
|
end
|
369
373
|
|
370
374
|
it "should rise argument error when the value is not in the list" do
|
371
|
-
|
375
|
+
_{ formatter.format("c") }.must_raise ArgumentError
|
372
376
|
end
|
373
377
|
|
374
378
|
it "should list allowed values in description" do
|
375
|
-
formatter.description.must_equal("Possible value(s): 'a', 'b'")
|
379
|
+
_(formatter.description).must_equal("Possible value(s): 'a', 'b'")
|
376
380
|
end
|
377
381
|
|
378
382
|
end
|
@@ -382,32 +386,32 @@ describe HammerCLI::Options::Normalizers do
|
|
382
386
|
let (:formatter) { HammerCLI::Options::Normalizers::EnumList.new ['1', '2', 'a', 'b'] }
|
383
387
|
|
384
388
|
it "should return array of values when the values are allowed" do
|
385
|
-
formatter.format("a,b,1").must_equal(['a', 'b', '1'])
|
389
|
+
_(formatter.format("a,b,1")).must_equal(['a', 'b', '1'])
|
386
390
|
end
|
387
391
|
|
388
392
|
it "should raise argument error when any of the values isn't in the list" do
|
389
|
-
|
390
|
-
|
393
|
+
_{ formatter.format("c,d") }.must_raise ArgumentError
|
394
|
+
_{ formatter.format('1,x') }.must_raise ArgumentError
|
391
395
|
end
|
392
396
|
|
393
397
|
it "should remove duplicate values" do
|
394
|
-
formatter.format("a,a,a,a,a").must_equal ['a']
|
398
|
+
_(formatter.format("a,a,a,a,a")).must_equal ['a']
|
395
399
|
end
|
396
400
|
|
397
401
|
it "should not change order of the values" do
|
398
|
-
formatter.format("a,b,2,1").must_equal ['a', 'b', '2', '1']
|
402
|
+
_(formatter.format("a,b,2,1")).must_equal ['a', 'b', '2', '1']
|
399
403
|
end
|
400
404
|
|
401
405
|
it "should return empty array on nil" do
|
402
|
-
formatter.format(nil).must_equal []
|
406
|
+
_(formatter.format(nil)).must_equal []
|
403
407
|
end
|
404
408
|
|
405
409
|
it "should return empty array on empty string" do
|
406
|
-
formatter.format("").must_equal []
|
410
|
+
_(formatter.format("")).must_equal []
|
407
411
|
end
|
408
412
|
|
409
413
|
it "should list allowed values in description" do
|
410
|
-
formatter.description.must_equal("Any combination (comma separated list) of ''1', '2', 'a', 'b''")
|
414
|
+
_(formatter.description).must_equal("Any combination (comma separated list) of ''1', '2', 'a', 'b''")
|
411
415
|
end
|
412
416
|
|
413
417
|
end
|
@@ -417,23 +421,23 @@ describe HammerCLI::Options::Normalizers do
|
|
417
421
|
let(:formatter) { HammerCLI::Options::Normalizers::DateTime.new }
|
418
422
|
|
419
423
|
it "should raise argument error when the value is nil" do
|
420
|
-
|
424
|
+
_{ formatter.format(nil) }.must_raise ArgumentError
|
421
425
|
end
|
422
426
|
|
423
427
|
it "should raise argument error when the value is not a date" do
|
424
|
-
|
428
|
+
_{ formatter.format("not a date") }.must_raise ArgumentError
|
425
429
|
end
|
426
430
|
|
427
431
|
it "should accept and parse iso8601" do
|
428
|
-
formatter.format("1986-01-01T08:30:20").must_equal("1986-01-01T08:30:20+00:00")
|
432
|
+
_(formatter.format("1986-01-01T08:30:20")).must_equal("1986-01-01T08:30:20+00:00")
|
429
433
|
end
|
430
434
|
|
431
435
|
it "should accept and parse YYYY-MM-DD HH:MM:SS" do
|
432
|
-
formatter.format("1986-01-01 08:30:20").must_equal("1986-01-01T08:30:20+00:00")
|
436
|
+
_(formatter.format("1986-01-01 08:30:20")).must_equal("1986-01-01T08:30:20+00:00")
|
433
437
|
end
|
434
438
|
|
435
439
|
it "should accept and parse YYYY/MM/DD HH:MM:SS" do
|
436
|
-
formatter.format("1986/01/01 08:30:20").must_equal("1986-01-01T08:30:20+00:00")
|
440
|
+
_(formatter.format("1986/01/01 08:30:20")).must_equal("1986-01-01T08:30:20+00:00")
|
437
441
|
end
|
438
442
|
|
439
443
|
end
|
@@ -41,7 +41,7 @@ describe HammerCLI::Options::OptionDefinition do
|
|
41
41
|
opt = TestOptionFormattersCmd.find_option("--test-format")
|
42
42
|
|
43
43
|
opt_instance = opt.of(TestOptionFormattersCmd.new([]))
|
44
|
-
opt_instance.read.must_equal '>>>A<<<'
|
44
|
+
_(opt_instance.read).must_equal '>>>A<<<'
|
45
45
|
end
|
46
46
|
|
47
47
|
it "should use formatter as a conversion block" do
|
@@ -54,7 +54,7 @@ describe HammerCLI::Options::OptionDefinition do
|
|
54
54
|
else
|
55
55
|
opt_instance.take('B')
|
56
56
|
end
|
57
|
-
opt_instance.read.must_equal '>>>B<<<'
|
57
|
+
_(opt_instance.read).must_equal '>>>B<<<'
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
@@ -64,8 +64,8 @@ describe HammerCLI::Options::OptionDefinition do
|
|
64
64
|
cmd = TestDeprecatedOptionCmd.new("", context)
|
65
65
|
|
66
66
|
_, err = capture_io { cmd.run(["--another-deprecated=VALUE"]) }
|
67
|
-
err.must_match(/Warning: Option --another-deprecated is deprecated. It is going to be removed/)
|
68
|
-
context[:old_option].must_equal "VALUE"
|
67
|
+
_(err).must_match(/Warning: Option --another-deprecated is deprecated. It is going to be removed/)
|
68
|
+
_(context[:old_option]).must_equal "VALUE"
|
69
69
|
end
|
70
70
|
|
71
71
|
it "prints deprecation warning (extended version)" do
|
@@ -73,8 +73,8 @@ describe HammerCLI::Options::OptionDefinition do
|
|
73
73
|
cmd = TestDeprecatedOptionCmd.new("", context)
|
74
74
|
|
75
75
|
_, err = capture_io { cmd.run(["--deprecated=VALUE"]) }
|
76
|
-
err.must_match(/Warning: Option --deprecated is deprecated. Use --test-option instead/)
|
77
|
-
context[:test_option].must_equal "VALUE"
|
76
|
+
_(err).must_match(/Warning: Option --deprecated is deprecated. Use --test-option instead/)
|
77
|
+
_(context[:test_option]).must_equal "VALUE"
|
78
78
|
end
|
79
79
|
|
80
80
|
it "doesn't print deprecation warning if the option is not used" do
|
@@ -82,22 +82,22 @@ describe HammerCLI::Options::OptionDefinition do
|
|
82
82
|
cmd = TestDeprecatedOptionCmd.new('', context)
|
83
83
|
cmd.find_option('--deprecated')
|
84
84
|
_out, err = capture_io { cmd.run([]) }
|
85
|
-
err.must_equal ''
|
85
|
+
_(err).must_equal ''
|
86
86
|
end
|
87
87
|
|
88
88
|
it 'shows depracated message in help' do
|
89
89
|
opt = opt_with_deprecation("Use --better-switch instead")
|
90
|
-
opt.description.must_equal "Test option (Deprecated: Use --better-switch instead)"
|
90
|
+
_(opt.description).must_equal "Test option (Deprecated: Use --better-switch instead)"
|
91
91
|
end
|
92
92
|
|
93
93
|
it 'shows flag specific depracated message in help' do
|
94
94
|
opt = opt_with_deprecation('--test-option' => "Use --better-switch instead")
|
95
|
-
opt.description.must_equal "Test option (--test-option is deprecated: Use --better-switch instead)"
|
95
|
+
_(opt.description).must_equal "Test option (--test-option is deprecated: Use --better-switch instead)"
|
96
96
|
end
|
97
97
|
|
98
98
|
it 'shows multiple flag specific depracated messages in help' do
|
99
99
|
opt = opt_with_deprecation('--test-option' => "Use --better-switch instead", '--test-option2' => 'This is deprecated too')
|
100
|
-
opt.description.must_equal "Test option (--test-option is deprecated: Use --better-switch instead, --test-option2 is deprecated: This is deprecated too)"
|
100
|
+
_(opt.description).must_equal "Test option (--test-option is deprecated: Use --better-switch instead, --test-option2 is deprecated: This is deprecated too)"
|
101
101
|
end
|
102
102
|
end
|
103
103
|
|
@@ -106,7 +106,7 @@ describe HammerCLI::Options::OptionDefinition do
|
|
106
106
|
context = {}
|
107
107
|
cmd = TestOptionFormattersCmd.new("", context)
|
108
108
|
cmd.run(["--test-context=VALUE"])
|
109
|
-
context[:test_option].must_equal "VALUE"
|
109
|
+
_(context[:test_option]).must_equal "VALUE"
|
110
110
|
end
|
111
111
|
end
|
112
112
|
end
|
@@ -15,34 +15,34 @@ describe HammerCLI::Options::OptionFamily do
|
|
15
15
|
|
16
16
|
describe 'switch' do
|
17
17
|
it 'returns nil if family is empty' do
|
18
|
-
family.switch.must_be_nil
|
18
|
+
_(family.switch).must_be_nil
|
19
19
|
end
|
20
20
|
|
21
21
|
it 'returns parent switch if family has no children' do
|
22
22
|
family.parent('--test-one', '', '')
|
23
|
-
family.switch.must_equal '--test-one'
|
23
|
+
_(family.switch).must_equal '--test-one'
|
24
24
|
end
|
25
25
|
|
26
26
|
it 'returns switch based on members' do
|
27
|
-
full_family.switch.must_equal '--test[-two|-one]'
|
27
|
+
_(full_family.switch).must_equal '--test[-two|-one]'
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
31
|
describe 'description' do
|
32
32
|
it 'returns parent description if nothing passed to initializer' do
|
33
|
-
full_family.description.must_equal full_family.head.help[1]
|
33
|
+
_(full_family.description).must_equal full_family.head.help[1]
|
34
34
|
end
|
35
35
|
|
36
36
|
it 'returns description with deprecation message' do
|
37
|
-
full_family.description.must_equal 'Test (--test-one is deprecated: Use --test-two instead)'
|
37
|
+
_(full_family.description).must_equal 'Test (--test-one is deprecated: Use --test-two instead)'
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
41
|
describe 'adopt' do
|
42
42
|
it 'appends an option to children' do
|
43
43
|
full_family.adopt(third_option)
|
44
|
-
full_family.children.size.must_equal 2
|
45
|
-
third_option.family.must_equal full_family
|
44
|
+
_(full_family.children.size).must_equal 2
|
45
|
+
_(third_option.family).must_equal full_family
|
46
46
|
end
|
47
47
|
end
|
48
48
|
end
|