-
Notifications
You must be signed in to change notification settings - Fork 4
/
option_spec.rb
152 lines (127 loc) · 3.85 KB
/
option_spec.rb
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
140
141
142
143
144
145
146
147
148
149
150
151
152
require 'spec_helper'
describe "Optitron::Parser options" do
context "long names vs short names" do
before(:each) do
@parser = Optitron.new {
opt "option", :type => :string
}
end
it "should parse '-o test'" do
@parser.parse(%w(-o test)).params.should == {'option' => 'test'}
end
it "should parse '--option=test'" do
@parser.parse(%w(--option=test)).params.should == {'option' => 'test'}
end
it "shouldn't parse '--option test'" do
@parser.parse(%w(--option test)).valid?.should be_false
end
it "shouldn't parse '-option test'" do
@parser.parse(%w(-option test)).valid?.should be_false
end
end
context "boolean long names vs short names" do
before(:each) do
@parser = Optitron.new {
opt "verbose"
}
end
it "should parse '-v true'" do
@parser.parse(%w(-v true)).valid?.should be_true
end
it "shouldn't parse '-v that'" do
@parser.parse(%w(-v that)).valid?.should be_false
end
it "shouldn't parse '--verbose true'" do
@parser.parse(%w(--verbose true)).valid?.should be_false
end
it "shouldn't parse '--v'" do
@parser.parse(%w(--v)).valid?.should be_false
end
it "shouldn't parse '--verbose=true'" do
@parser.parse(%w(--verbose=true)).valid?.should be_true
end
end
context "auto assingment of short names" do
before(:each) do
@parser = Optitron.new {
opt "verbose", :short_name => 'v'
opt "vicious", :type => :string
opt "vendetta", :short_name => 'V'
}
end
it "should parse '-Vv --vicious=what'" do
response = @parser.parse(%w(-Vv --vicious=what))
response.valid?.should be_true
response.params.should == {"vicious"=>"what", "vendetta"=>true, "verbose"=>true}
end
end
context "auto assingment of short names in cmd parsers" do
before(:each) do
@parser = Optitron.new {
cmd "one" do
opt "verbose"
end
cmd "two" do
opt "verbose"
end
}
end
it "should parse 'one -v'" do
response = @parser.parse(%w(one -v))
response.valid?.should be_true
response.params.should == {'verbose' => true}
end
it "should parse 'two -V'" do
response = @parser.parse(%w(two -V))
response.valid?.should be_true
response.params.should == {'verbose' => true}
end
end
context "multiple options" do
before(:each) do
@parser = Optitron.new {
opt "1"
opt "2"
opt "3"
opt "option", :type => :string
}
end
it "should parse '-123otest'" do
@parser.parse(%w(-123otest)).params.should == {'option' => 'test', '1' => true, '2' => true, '3' => true}
end
it "should parse '-123o test'" do
@parser.parse(%w(-123o test)).params.should == {'option' => 'test', '1' => true, '2' => true, '3' => true}
end
end
context "required options" do
before(:each) do
@parser = Optitron.new {
cmd "install" do
opt "environment", :type => :string, :required => true
end
}
end
it "shouldn't parse 'install'" do
@parser.parse(%w(install)).valid?.should be_false
end
it "should parse 'install -esomething'" do
response = @parser.parse(%w(install -esomething))
response.valid?.should be_true
response.params.should == {'environment' => 'something'}
end
end
context "array options with a comment" do
before(:each) do
@parser = Optitron.new {
cmd "install" do
opt "things", :type => :array
end
}
end
it "should parse '--things=one two three install'" do
response = @parser.parse(%w(--things=one two three install))
response.valid?.should be_true
response.params.should == {'things' => ['one', 'two', 'three']}
end
end
end