X-Git-Url: https://review.fuel-infra.org/gitweb?a=blobdiff_plain;ds=sidebyside;f=spec%2Funit%2Foptionparser_spec.rb;fp=spec%2Funit%2Foptionparser_spec.rb;h=594467f1d563c8ae8538bb8e804c4d1108828a6a;hb=b87d2f4e68281062df1913440ca5753ae63314a9;hp=0000000000000000000000000000000000000000;hpb=ab0ea530b8ac956091f17b104ab2311336cfc250;p=packages%2Fprecise%2Fmcollective.git diff --git a/spec/unit/optionparser_spec.rb b/spec/unit/optionparser_spec.rb new file mode 100755 index 0000000..594467f --- /dev/null +++ b/spec/unit/optionparser_spec.rb @@ -0,0 +1,113 @@ +#!/usr/bin/env rspec + +require 'spec_helper' + +module MCollective + describe Optionparser do + describe "#initialize" do + it "should store the included list as an array" do + parser = Optionparser.new({}, "included") + parser.instance_variable_get("@include").should == ["included"] + + parser = Optionparser.new({}, ["included"]) + parser.instance_variable_get("@include").should == ["included"] + end + + it "should store the excluded list as an array" do + parser = Optionparser.new({}, "", "excluded") + parser.instance_variable_get("@exclude").should == ["excluded"] + + parser = Optionparser.new({}, "", ["excluded"]) + parser.instance_variable_get("@exclude").should == ["excluded"] + end + + it "should gather default options" do + Util.expects(:default_options).returns({}) + Optionparser.new({}) + end + + it "should merge supplied options with defaults" do + defaults = {} + supplied = {} + + Util.expects(:default_options).returns(defaults) + defaults.expects(:merge!).with(supplied) + + Optionparser.new(supplied) + end + end + + describe "#parse" do + it "should yield to the caller" do + parser = Optionparser.new(defaults={:default => 1}) + + block_ran = false + + parser.parse do |p, o| + p.class.should == OptionParser + o.should == Util.default_options.merge(defaults) + block_ran = true + end + + block_ran.should == true + end + + it "should add required options" do + parser = Optionparser.new(defaults={:default => 1}) + parser.expects(:add_required_options) + parser.parse + end + + it "should optionally add common options" do + parser = Optionparser.new(defaults={:default => 1}) + parser.stubs(:add_required_options) + parser.expects(:add_common_options) + parser.parse + + parser = Optionparser.new(defaults={:default => 1}, "", "common") + parser.stubs(:add_required_options) + parser.expects(:add_common_options).never + parser.parse + end + + it "should support adding arbitrary named sections of options" do + parser = Optionparser.new(defaults={:default => 1}, "filter") + parser.stubs(:add_required_options) + parser.stubs(:add_common_options) + parser.expects(:add_filter_options) + parser.parse + end + + it "should support excluding sections that was specifically included" do + parser = Optionparser.new(defaults={:default => 1}, "filter", "filter") + parser.stubs(:add_required_options) + parser.stubs(:add_common_options) + parser.expects(:add_filter_options).never + parser.parse + end + + it "should parse MCOLLECTIVE_EXTRA_OPTS" do + ENV["MCOLLECTIVE_EXTRA_OPTS"] = "--dt 999" + @parser = Optionparser.new + @parser.parse[:disctimeout].should == 999 + ENV.delete("MCOLLECTIVE_EXTRA_OPTS") + end + + it "should not set the active collective from the config class if given on the cli" do + parser = Optionparser.new(defaults={:collective => "rspec"}) + parser.stubs(:add_required_options) + parser.stubs(:add_common_options) + Config.instance.expects(:main_collective).never + parser.parse + end + + it "should set the active collective from the config class if not given on the cli" do + parser = Optionparser.new(defaults={}) + parser.stubs(:add_required_options) + parser.stubs(:add_common_options) + Config.instance.expects(:main_collective).returns(:rspec).once + parser.parse[:collective].should == :rspec + end + end + end +end