Update mcollective.init according to OSCI-855
[packages/precise/mcollective.git] / spec / unit / optionparser_spec.rb
1 #!/usr/bin/env rspec
2
3 require 'spec_helper'
4
5 module MCollective
6   describe Optionparser do
7     describe "#initialize" do
8       it "should store the included list as an array" do
9         parser = Optionparser.new({}, "included")
10         parser.instance_variable_get("@include").should == ["included"]
11
12         parser = Optionparser.new({}, ["included"])
13         parser.instance_variable_get("@include").should == ["included"]
14       end
15
16       it "should store the excluded list as an array" do
17         parser = Optionparser.new({}, "", "excluded")
18         parser.instance_variable_get("@exclude").should == ["excluded"]
19
20         parser = Optionparser.new({}, "", ["excluded"])
21         parser.instance_variable_get("@exclude").should == ["excluded"]
22       end
23
24       it "should gather default options" do
25         Util.expects(:default_options).returns({})
26         Optionparser.new({})
27       end
28
29       it "should merge supplied options with defaults" do
30         defaults = {}
31         supplied = {}
32
33         Util.expects(:default_options).returns(defaults)
34         defaults.expects(:merge!).with(supplied)
35
36         Optionparser.new(supplied)
37       end
38     end
39
40     describe "#parse" do
41       it "should yield to the caller" do
42         parser = Optionparser.new(defaults={:default => 1})
43
44         block_ran = false
45
46         parser.parse do |p, o|
47           p.class.should == OptionParser
48           o.should == Util.default_options.merge(defaults)
49           block_ran = true
50         end
51
52         block_ran.should == true
53       end
54
55       it "should add required options" do
56         parser = Optionparser.new(defaults={:default => 1})
57         parser.expects(:add_required_options)
58         parser.parse
59       end
60
61       it "should optionally add common options" do
62         parser = Optionparser.new(defaults={:default => 1})
63         parser.stubs(:add_required_options)
64         parser.expects(:add_common_options)
65         parser.parse
66
67         parser = Optionparser.new(defaults={:default => 1}, "", "common")
68         parser.stubs(:add_required_options)
69         parser.expects(:add_common_options).never
70         parser.parse
71       end
72
73       it "should support adding arbitrary named sections of options" do
74         parser = Optionparser.new(defaults={:default => 1}, "filter")
75         parser.stubs(:add_required_options)
76         parser.stubs(:add_common_options)
77         parser.expects(:add_filter_options)
78         parser.parse
79       end
80
81       it "should support excluding sections that was specifically included" do
82         parser = Optionparser.new(defaults={:default => 1}, "filter", "filter")
83         parser.stubs(:add_required_options)
84         parser.stubs(:add_common_options)
85         parser.expects(:add_filter_options).never
86         parser.parse
87       end
88
89       it "should parse MCOLLECTIVE_EXTRA_OPTS" do
90         ENV["MCOLLECTIVE_EXTRA_OPTS"] = "--dt 999"
91         @parser = Optionparser.new
92         @parser.parse[:disctimeout].should == 999
93         ENV.delete("MCOLLECTIVE_EXTRA_OPTS")
94       end
95
96       it "should not set the active collective from the config class if given on the cli" do
97         parser = Optionparser.new(defaults={:collective => "rspec"})
98         parser.stubs(:add_required_options)
99         parser.stubs(:add_common_options)
100         Config.instance.expects(:main_collective).never
101         parser.parse
102       end
103
104       it "should set the active collective from the config class if not given on the cli" do
105         parser = Optionparser.new(defaults={})
106         parser.stubs(:add_required_options)
107         parser.stubs(:add_common_options)
108         Config.instance.expects(:main_collective).returns(:rspec).once
109         parser.parse[:collective].should == :rspec
110       end
111     end
112   end
113 end