File: //usr/local/rvm/src/ruby-3.0.2/spec/mspec/spec/utils/options_spec.rb
require 'spec_helper'
require 'mspec/utils/options'
require 'mspec/version'
require 'mspec/guards/guard'
require 'mspec/runner/mspec'
require 'mspec/runner/formatters'
describe MSpecOption, ".new" do
before :each do
@opt = MSpecOption.new("-a", "--bdc", "ARG", "desc", :block)
end
it "sets the short attribute" do
@opt.short.should == "-a"
end
it "sets the long attribute" do
@opt.long.should == "--bdc"
end
it "sets the arg attribute" do
@opt.arg.should == "ARG"
end
it "sets the description attribute" do
@opt.description.should == "desc"
end
it "sets the block attribute" do
@opt.block.should == :block
end
end
describe MSpecOption, "#arg?" do
it "returns true if arg attribute is not nil" do
MSpecOption.new(nil, nil, "ARG", nil, nil).arg?.should be_true
end
it "returns false if arg attribute is nil" do
MSpecOption.new(nil, nil, nil, nil, nil).arg?.should be_false
end
end
describe MSpecOption, "#match?" do
before :each do
@opt = MSpecOption.new("-a", "--bdc", "ARG", "desc", :block)
end
it "returns true if the argument matches the short option" do
@opt.match?("-a").should be_true
end
it "returns true if the argument matches the long option" do
@opt.match?("--bdc").should be_true
end
it "returns false if the argument matches neither the short nor long option" do
@opt.match?("-b").should be_false
@opt.match?("-abdc").should be_false
end
end
describe MSpecOptions, ".new" do
before :each do
@opt = MSpecOptions.new("cmd", 20, :config)
end
it "sets the banner attribute" do
@opt.banner.should == "cmd"
end
it "sets the config attribute" do
@opt.config.should == :config
end
it "sets the width attribute" do
@opt.width.should == 20
end
it "sets the default width attribute" do
MSpecOptions.new.width.should == 30
end
end
describe MSpecOptions, "#on" do
before :each do
@opt = MSpecOptions.new
end
it "adds a short option" do
@opt.should_receive(:add).with("-a", nil, nil, "desc", nil)
@opt.on("-a", "desc")
end
it "adds a short option taking an argument" do
@opt.should_receive(:add).with("-a", nil, "ARG", "desc", nil)
@opt.on("-a", "ARG", "desc")
end
it "adds a long option" do
@opt.should_receive(:add).with("-a", nil, nil, "desc", nil)
@opt.on("-a", "desc")
end
it "adds a long option taking an argument" do
@opt.should_receive(:add).with("-a", nil, nil, "desc", nil)
@opt.on("-a", "desc")
end
it "adds a short and long option" do
@opt.should_receive(:add).with("-a", nil, nil, "desc", nil)
@opt.on("-a", "desc")
end
it "adds a short and long option taking an argument" do
@opt.should_receive(:add).with("-a", nil, nil, "desc", nil)
@opt.on("-a", "desc")
end
it "raises MSpecOptions::OptionError if pass less than 2 arguments" do
lambda { @opt.on }.should raise_error(MSpecOptions::OptionError)
lambda { @opt.on "" }.should raise_error(MSpecOptions::OptionError)
end
end
describe MSpecOptions, "#add" do
before :each do
@opt = MSpecOptions.new "cmd", 20
@prc = lambda { }
end
it "adds documentation for an option" do
@opt.should_receive(:doc).with(" -t, --typo ARG Correct typo ARG")
@opt.add("-t", "--typo", "ARG", "Correct typo ARG", @prc)
end
it "leaves spaces in the documentation for a missing short option" do
@opt.should_receive(:doc).with(" --typo ARG Correct typo ARG")
@opt.add(nil, "--typo", "ARG", "Correct typo ARG", @prc)
end
it "handles a short option with argument but no long argument" do
@opt.should_receive(:doc).with(" -t ARG Correct typo ARG")
@opt.add("-t", nil, "ARG", "Correct typo ARG", @prc)
end
it "registers an option" do
option = MSpecOption.new "-t", "--typo", "ARG", "Correct typo ARG", @prc
MSpecOption.should_receive(:new).with(
"-t", "--typo", "ARG", "Correct typo ARG", @prc).and_return(option)
@opt.add("-t", "--typo", "ARG", "Correct typo ARG", @prc)
@opt.options.should == [option]
end
end
describe MSpecOptions, "#match?" do
before :each do
@opt = MSpecOptions.new
end
it "returns the MSpecOption instance matching the argument" do
@opt.on "-a", "--abdc", "desc"
option = @opt.match? "-a"
@opt.match?("--abdc").should be(option)
option.should be_kind_of(MSpecOption)
option.short.should == "-a"
option.long.should == "--abdc"
option.description.should == "desc"
end
end
describe MSpecOptions, "#process" do
before :each do
@opt = MSpecOptions.new
ScratchPad.clear
end
it "calls the on_extra block if the argument does not match any option" do
@opt.on_extra { ScratchPad.record :extra }
@opt.process ["-a"], "-a", "-a", nil
ScratchPad.recorded.should == :extra
end
it "returns the matching option" do
@opt.on "-a", "ARG", "desc"
option = @opt.process [], "-a", "-a", "ARG"
option.should be_kind_of(MSpecOption)
option.short.should == "-a"
option.arg.should == "ARG"
option.description.should == "desc"
end
it "raises an MSpecOptions::ParseError if arg is nil and there are no more entries in argv" do
@opt.on "-a", "ARG", "desc"
lambda { @opt.process [], "-a", "-a", nil }.should raise_error(MSpecOptions::ParseError)
end
it "fetches the argument for the option from argv if arg is nil" do
@opt.on("-a", "ARG", "desc") { |o| ScratchPad.record o }
@opt.process ["ARG"], "-a", "-a", nil
ScratchPad.recorded.should == "ARG"
end
it "calls the option's block" do
@opt.on("-a", "ARG", "desc") { ScratchPad.record :option }
@opt.process [], "-a", "-a", "ARG"
ScratchPad.recorded.should == :option
end
it "does not call the option's block if it is nil" do
@opt.on "-a", "ARG", "desc"
lambda { @opt.process [], "-a", "-a", "ARG" }.should_not raise_error
end
end
describe MSpecOptions, "#split" do
before :each do
@opt = MSpecOptions.new
end
it "breaks a string at the nth character" do
opt, arg, rest = @opt.split "-bdc", 2
opt.should == "-b"
arg.should == "dc"
rest.should == "dc"
end
it "returns nil for arg if there are no characters left" do
opt, arg, rest = @opt.split "-b", 2
opt.should == "-b"
arg.should == nil
rest.should == ""
end
end
describe MSpecOptions, "#parse" do
before :each do
@opt = MSpecOptions.new
@prc = lambda { ScratchPad.record :parsed }
@arg_prc = lambda { |o| ScratchPad.record [:parsed, o] }
ScratchPad.clear
end
it "parses a short option" do
@opt.on "-a", "desc", &@prc
@opt.parse ["-a"]
ScratchPad.recorded.should == :parsed
end
it "parse a long option" do
@opt.on "--abdc", "desc", &@prc
@opt.parse ["--abdc"]
ScratchPad.recorded.should == :parsed
end
it "parses a short option group" do
@opt.on "-a", "ARG", "desc", &@arg_prc
@opt.parse ["-a", "ARG"]
ScratchPad.recorded.should == [:parsed, "ARG"]
end
it "parses a short option with an argument" do
@opt.on "-a", "ARG", "desc", &@arg_prc
@opt.parse ["-a", "ARG"]
ScratchPad.recorded.should == [:parsed, "ARG"]
end
it "parses a short option with connected argument" do
@opt.on "-a", "ARG", "desc", &@arg_prc
@opt.parse ["-aARG"]
ScratchPad.recorded.should == [:parsed, "ARG"]
end
it "parses a long option with an argument" do
@opt.on "--abdc", "ARG", "desc", &@arg_prc
@opt.parse ["--abdc", "ARG"]
ScratchPad.recorded.should == [:parsed, "ARG"]
end
it "parses a long option with an '=' argument" do
@opt.on "--abdc", "ARG", "desc", &@arg_prc
@opt.parse ["--abdc=ARG"]
ScratchPad.recorded.should == [:parsed, "ARG"]
end
it "parses a short option group with the final option taking an argument" do
ScratchPad.record []
@opt.on("-a", "desc") { |o| ScratchPad << :a }
@opt.on("-b", "ARG", "desc") { |o| ScratchPad << [:b, o] }
@opt.parse ["-ab", "ARG"]
ScratchPad.recorded.should == [:a, [:b, "ARG"]]
end
it "parses a short option group with a connected argument" do
ScratchPad.record []
@opt.on("-a", "desc") { |o| ScratchPad << :a }
@opt.on("-b", "ARG", "desc") { |o| ScratchPad << [:b, o] }
@opt.on("-c", "desc") { |o| ScratchPad << :c }
@opt.parse ["-acbARG"]
ScratchPad.recorded.should == [:a, :c, [:b, "ARG"]]
end
it "returns the unprocessed entries" do
@opt.on "-a", "ARG", "desc", &@arg_prc
@opt.parse(["abdc", "-a", "ilny"]).should == ["abdc"]
end
it "calls the on_extra handler with unrecognized options" do
ScratchPad.record []
@opt.on_extra { |o| ScratchPad << o }
@opt.on "-a", "desc"
@opt.parse ["-a", "-b"]
ScratchPad.recorded.should == ["-b"]
end
it "does not attempt to call the block if it is nil" do
@opt.on "-a", "ARG", "desc"
@opt.parse(["-a", "ARG"]).should == []
end
it "raises MSpecOptions::ParseError if passed an unrecognized option" do
@opt.should_receive(:raise).with(MSpecOptions::ParseError, an_instance_of(String))
@opt.stub(:puts)
@opt.stub(:exit)
@opt.parse "-u"
end
end
describe MSpecOptions, "#banner=" do
before :each do
@opt = MSpecOptions.new
end
it "sets the banner attribute" do
@opt.banner.should == ""
@opt.banner = "banner"
@opt.banner.should == "banner"
end
end
describe MSpecOptions, "#width=" do
before :each do
@opt = MSpecOptions.new
end
it "sets the width attribute" do
@opt.width.should == 30
@opt.width = 20
@opt.width.should == 20
end
end
describe MSpecOptions, "#config=" do
before :each do
@opt = MSpecOptions.new
end
it "sets the config attribute" do
@opt.config.should be_nil
@opt.config = :config
@opt.config.should == :config
end
end
describe MSpecOptions, "#doc" do
before :each do
@opt = MSpecOptions.new "command"
end
it "adds text to be displayed with #to_s" do
@opt.doc "Some message"
@opt.doc "Another message"
@opt.to_s.should == <<-EOD
command
Some message
Another message
EOD
end
end
describe MSpecOptions, "#version" do
before :each do
@opt = MSpecOptions.new
ScratchPad.clear
end
it "installs a basic -v, --version option" do
@opt.should_receive(:puts)
@opt.should_receive(:exit)
@opt.version "1.0.0"
@opt.parse "-v"
end
it "accepts a block instead of using the default block" do
@opt.version("1.0.0") { |o| ScratchPad.record :version }
@opt.parse "-v"
ScratchPad.recorded.should == :version
end
end
describe MSpecOptions, "#help" do
before :each do
@opt = MSpecOptions.new
ScratchPad.clear
end
it "installs a basic -h, --help option" do
@opt.should_receive(:puts)
@opt.should_receive(:exit).with(1)
@opt.help
@opt.parse "-h"
end
it "accepts a block instead of using the default block" do
@opt.help { |o| ScratchPad.record :help }
@opt.parse "-h"
ScratchPad.recorded.should == :help
end
end
describe MSpecOptions, "#on_extra" do
before :each do
@opt = MSpecOptions.new
ScratchPad.clear
end
it "registers a block to be called when an option is not recognized" do
@opt.on_extra { ScratchPad.record :extra }
@opt.parse "-g"
ScratchPad.recorded.should == :extra
end
end
describe MSpecOptions, "#to_s" do
before :each do
@opt = MSpecOptions.new "command"
end
it "returns the banner and descriptive strings for all registered options" do
@opt.on "-t", "--this ARG", "Adds this ARG to the list"
@opt.to_s.should == <<-EOD
command
-t, --this ARG Adds this ARG to the list
EOD
end
end
describe "The -B, --config FILE option" do
before :each do
@options, @config = new_option
end
it "is enabled with #configure { }" do
@options.should_receive(:on).with("-B", "--config", "FILE",
an_instance_of(String))
@options.configure {}
end
it "calls the passed block" do
["-B", "--config"].each do |opt|
ScratchPad.clear
@options.configure { |x| ScratchPad.record x }
@options.parse [opt, "file"]
ScratchPad.recorded.should == "file"
end
end
end
describe "The -C, --chdir DIR option" do
before :each do
@options, @config = new_option
@options.chdir
end
it "is enabled with #chdir" do
@options.should_receive(:on).with("-C", "--chdir", "DIR",
an_instance_of(String))
@options.chdir
end
it "changes the working directory to DIR" do
Dir.should_receive(:chdir).with("dir").twice
["-C", "--chdir"].each do |opt|
@options.parse [opt, "dir"]
end
end
end
describe "The --prefix STR option" do
before :each do
@options, @config = new_option
end
it "is enabled with #prefix" do
@options.should_receive(:on).with("--prefix", "STR",
an_instance_of(String))
@options.prefix
end
it "sets the prefix config value" do
@options.prefix
@options.parse ["--prefix", "some/dir"]
@config[:prefix].should == "some/dir"
end
end
describe "The -t, --target TARGET option" do
before :each do
@options, @config = new_option
@options.targets
end
it "is enabled with #targets" do
@options.stub(:on)
@options.should_receive(:on).with("-t", "--target", "TARGET",
an_instance_of(String))
@options.targets
end
it "sets the target to 'ruby' and flags to verbose with TARGET 'r' or 'ruby'" do
["-t", "--target"].each do |opt|
["r", "ruby"].each do |t|
@config[:target] = nil
@options.parse [opt, t]
@config[:target].should == "ruby"
end
end
end
it "sets the target to 'jruby' with TARGET 'j' or 'jruby'" do
["-t", "--target"].each do |opt|
["j", "jruby"].each do |t|
@config[:target] = nil
@options.parse [opt, t]
@config[:target].should == "jruby"
end
end
end
it "sets the target to 'shotgun/rubinius' with TARGET 'x' or 'rubinius'" do
["-t", "--target"].each do |opt|
["x", "rubinius"].each do |t|
@config[:target] = nil
@options.parse [opt, t]
@config[:target].should == "./bin/rbx"
end
end
end
it "set the target to 'rbx' with TARGET 'rbx'" do
["-t", "--target"].each do |opt|
["X", "rbx"].each do |t|
@config[:target] = nil
@options.parse [opt, t]
@config[:target].should == "rbx"
end
end
end
it "sets the target to 'maglev' with TARGET 'm' or 'maglev'" do
["-t", "--target"].each do |opt|
["m", "maglev"].each do |t|
@config[:target] = nil
@options.parse [opt, t]
@config[:target].should == "maglev-ruby"
end
end
end
it "sets the target to 'topaz' with TARGET 't' or 'topaz'" do
["-t", "--target"].each do |opt|
["t", "topaz"].each do |t|
@config[:target] = nil
@options.parse [opt, t]
@config[:target].should == "topaz"
end
end
end
it "sets the target to TARGET" do
["-t", "--target"].each do |opt|
@config[:target] = nil
@options.parse [opt, "whateva"]
@config[:target].should == "whateva"
end
end
end
describe "The -T, --target-opt OPT option" do
before :each do
@options, @config = new_option
@options.targets
end
it "is enabled with #targets" do
@options.stub(:on)
@options.should_receive(:on).with("-T", "--target-opt", "OPT",
an_instance_of(String))
@options.targets
end
it "adds OPT to flags" do
["-T", "--target-opt"].each do |opt|
@config[:flags].delete "--whateva"
@options.parse [opt, "--whateva"]
@config[:flags].should include("--whateva")
end
end
end
describe "The -I, --include DIR option" do
before :each do
@options, @config = new_option
@options.targets
end
it "is enabled with #targets" do
@options.stub(:on)
@options.should_receive(:on).with("-I", "--include", "DIR",
an_instance_of(String))
@options.targets
end
it "add DIR to the load path" do
["-I", "--include"].each do |opt|
@config[:loadpath].delete "-Ipackage"
@options.parse [opt, "package"]
@config[:loadpath].should include("-Ipackage")
end
end
end
describe "The -r, --require LIBRARY option" do
before :each do
@options, @config = new_option
@options.targets
end
it "is enabled with #targets" do
@options.stub(:on)
@options.should_receive(:on).with("-r", "--require", "LIBRARY",
an_instance_of(String))
@options.targets
end
it "adds LIBRARY to the requires list" do
["-r", "--require"].each do |opt|
@config[:requires].delete "-rlibrick"
@options.parse [opt, "librick"]
@config[:requires].should include("-rlibrick")
end
end
end
describe "The -f, --format FORMAT option" do
before :each do
@options, @config = new_option
@options.formatters
end
it "is enabled with #formatters" do
@options.stub(:on)
@options.should_receive(:on).with("-f", "--format", "FORMAT",
an_instance_of(String))
@options.formatters
end
it "sets the SpecdocFormatter with FORMAT 's' or 'specdoc'" do
["-f", "--format"].each do |opt|
["s", "specdoc"].each do |f|
@config[:formatter] = nil
@options.parse [opt, f]
@config[:formatter].should == SpecdocFormatter
end
end
end
it "sets the HtmlFormatter with FORMAT 'h' or 'html'" do
["-f", "--format"].each do |opt|
["h", "html"].each do |f|
@config[:formatter] = nil
@options.parse [opt, f]
@config[:formatter].should == HtmlFormatter
end
end
end
it "sets the DottedFormatter with FORMAT 'd', 'dot' or 'dotted'" do
["-f", "--format"].each do |opt|
["d", "dot", "dotted"].each do |f|
@config[:formatter] = nil
@options.parse [opt, f]
@config[:formatter].should == DottedFormatter
end
end
end
it "sets the DescribeFormatter with FORMAT 'b' or 'describe'" do
["-f", "--format"].each do |opt|
["b", "describe"].each do |f|
@config[:formatter] = nil
@options.parse [opt, f]
@config[:formatter].should == DescribeFormatter
end
end
end
it "sets the FileFormatter with FORMAT 'f', 'file'" do
["-f", "--format"].each do |opt|
["f", "file"].each do |f|
@config[:formatter] = nil
@options.parse [opt, f]
@config[:formatter].should == FileFormatter
end
end
end
it "sets the UnitdiffFormatter with FORMAT 'u', 'unit', or 'unitdiff'" do
["-f", "--format"].each do |opt|
["u", "unit", "unitdiff"].each do |f|
@config[:formatter] = nil
@options.parse [opt, f]
@config[:formatter].should == UnitdiffFormatter
end
end
end
it "sets the SummaryFormatter with FORMAT 'm' or 'summary'" do
["-f", "--format"].each do |opt|
["m", "summary"].each do |f|
@config[:formatter] = nil
@options.parse [opt, f]
@config[:formatter].should == SummaryFormatter
end
end
end
it "sets the SpinnerFormatter with FORMAT 'a', '*', or 'spin'" do
["-f", "--format"].each do |opt|
["a", "*", "spin"].each do |f|
@config[:formatter] = nil
@options.parse [opt, f]
@config[:formatter].should == SpinnerFormatter
end
end
end
it "sets the MethodFormatter with FORMAT 't' or 'method'" do
["-f", "--format"].each do |opt|
["t", "method"].each do |f|
@config[:formatter] = nil
@options.parse [opt, f]
@config[:formatter].should == MethodFormatter
end
end
end
it "sets the YamlFormatter with FORMAT 'y' or 'yaml'" do
["-f", "--format"].each do |opt|
["y", "yaml"].each do |f|
@config[:formatter] = nil
@options.parse [opt, f]
@config[:formatter].should == YamlFormatter
end
end
end
it "sets the JUnitFormatter with FORMAT 'j' or 'junit'" do
["-f", "--format"].each do |opt|
["j", "junit"].each do |f|
@config[:formatter] = nil
@options.parse [opt, f]
@config[:formatter].should == JUnitFormatter
end
end
end
end
describe "The -o, --output FILE option" do
before :each do
@options, @config = new_option
@options.formatters
end
it "is enabled with #formatters" do
@options.stub(:on)
@options.should_receive(:on).with("-o", "--output", "FILE",
an_instance_of(String))
@options.formatters
end
it "sets the output to FILE" do
["-o", "--output"].each do |opt|
@config[:output] = nil
@options.parse [opt, "some/file"]
@config[:output].should == "some/file"
end
end
end
describe "The -e, --example STR" do
before :each do
@options, @config = new_option
@options.filters
end
it "is enabled with #filters" do
@options.stub(:on)
@options.should_receive(:on).with("-e", "--example", "STR",
an_instance_of(String))
@options.filters
end
it "adds STR to the includes list" do
["-e", "--example"].each do |opt|
@config[:includes] = []
@options.parse [opt, "this spec"]
@config[:includes].should include("this spec")
end
end
end
describe "The -E, --exclude STR" do
before :each do
@options, @config = new_option
@options.filters
end
it "is enabled with #filters" do
@options.stub(:on)
@options.should_receive(:on).with("-E", "--exclude", "STR",
an_instance_of(String))
@options.filters
end
it "adds STR to the excludes list" do
["-E", "--exclude"].each do |opt|
@config[:excludes] = []
@options.parse [opt, "this spec"]
@config[:excludes].should include("this spec")
end
end
end
describe "The -p, --pattern PATTERN" do
before :each do
@options, @config = new_option
@options.filters
end
it "is enabled with #filters" do
@options.stub(:on)
@options.should_receive(:on).with("-p", "--pattern", "PATTERN",
an_instance_of(String))
@options.filters
end
it "adds PATTERN to the included patterns list" do
["-p", "--pattern"].each do |opt|
@config[:patterns] = []
@options.parse [opt, "this spec"]
@config[:patterns].should include(/this spec/)
end
end
end
describe "The -P, --excl-pattern PATTERN" do
before :each do
@options, @config = new_option
@options.filters
end
it "is enabled with #filters" do
@options.stub(:on)
@options.should_receive(:on).with("-P", "--excl-pattern", "PATTERN",
an_instance_of(String))
@options.filters
end
it "adds PATTERN to the excluded patterns list" do
["-P", "--excl-pattern"].each do |opt|
@config[:xpatterns] = []
@options.parse [opt, "this spec"]
@config[:xpatterns].should include(/this spec/)
end
end
end
describe "The -g, --tag TAG" do
before :each do
@options, @config = new_option
@options.filters
end
it "is enabled with #filters" do
@options.stub(:on)
@options.should_receive(:on).with("-g", "--tag", "TAG",
an_instance_of(String))
@options.filters
end
it "adds TAG to the included tags list" do
["-g", "--tag"].each do |opt|
@config[:tags] = []
@options.parse [opt, "this spec"]
@config[:tags].should include("this spec")
end
end
end
describe "The -G, --excl-tag TAG" do
before :each do
@options, @config = new_option
@options.filters
end
it "is enabled with #filters" do
@options.stub(:on)
@options.should_receive(:on).with("-G", "--excl-tag", "TAG",
an_instance_of(String))
@options.filters
end
it "adds TAG to the excluded tags list" do
["-G", "--excl-tag"].each do |opt|
@config[:xtags] = []
@options.parse [opt, "this spec"]
@config[:xtags].should include("this spec")
end
end
end
describe "The -w, --profile FILE option" do
before :each do
@options, @config = new_option
@options.filters
end
it "is enabled with #filters" do
@options.stub(:on)
@options.should_receive(:on).with("-w", "--profile", "FILE",
an_instance_of(String))
@options.filters
end
it "adds FILE to the included profiles list" do
["-w", "--profile"].each do |opt|
@config[:profiles] = []
@options.parse [opt, "spec/profiles/rails.yaml"]
@config[:profiles].should include("spec/profiles/rails.yaml")
end
end
end
describe "The -W, --excl-profile FILE option" do
before :each do
@options, @config = new_option
@options.filters
end
it "is enabled with #filters" do
@options.stub(:on)
@options.should_receive(:on).with("-W", "--excl-profile", "FILE",
an_instance_of(String))
@options.filters
end
it "adds FILE to the excluded profiles list" do
["-W", "--excl-profile"].each do |opt|
@config[:xprofiles] = []
@options.parse [opt, "spec/profiles/rails.yaml"]
@config[:xprofiles].should include("spec/profiles/rails.yaml")
end
end
end
describe "The -Z, --dry-run option" do
before :each do
@options, @config = new_option
@options.pretend
end
it "is enabled with #pretend" do
@options.should_receive(:on).with("-Z", "--dry-run", an_instance_of(String))
@options.pretend
end
it "registers the MSpec pretend mode" do
MSpec.should_receive(:register_mode).with(:pretend).twice
["-Z", "--dry-run"].each do |opt|
@options.parse opt
end
end
end
describe "The --unguarded option" do
before :each do
@options, @config = new_option
@options.unguarded
end
it "is enabled with #unguarded" do
@options.stub(:on)
@options.should_receive(:on).with("--unguarded", an_instance_of(String))
@options.unguarded
end
it "registers the MSpec unguarded mode" do
MSpec.should_receive(:register_mode).with(:unguarded)
@options.parse "--unguarded"
end
end
describe "The --no-ruby_guard option" do
before :each do
@options, @config = new_option
@options.unguarded
end
it "is enabled with #unguarded" do
@options.stub(:on)
@options.should_receive(:on).with("--no-ruby_bug", an_instance_of(String))
@options.unguarded
end
it "registers the MSpec no_ruby_bug mode" do
MSpec.should_receive(:register_mode).with(:no_ruby_bug)
@options.parse "--no-ruby_bug"
end
end
describe "The -H, --random option" do
before :each do
@options, @config = new_option
@options.randomize
end
it "is enabled with #randomize" do
@options.should_receive(:on).with("-H", "--random", an_instance_of(String))
@options.randomize
end
it "registers the MSpec randomize mode" do
MSpec.should_receive(:randomize=).twice
["-H", "--random"].each do |opt|
@options.parse opt
end
end
end
describe "The -R, --repeat option" do
before :each do
@options, @config = new_option
@options.repeat
end
it "is enabled with #repeat" do
@options.should_receive(:on).with("-R", "--repeat", "NUMBER", an_instance_of(String))
@options.repeat
end
it "registers the MSpec repeat mode" do
["-R", "--repeat"].each do |opt|
MSpec.repeat = 1
@options.parse [opt, "10"]
repeat_count = 0
MSpec.repeat do
repeat_count += 1
end
repeat_count.should == 10
end
end
end
describe "The -V, --verbose option" do
before :each do
@options, @config = new_option
@options.verbose
end
it "is enabled with #verbose" do
@options.stub(:on)
@options.should_receive(:on).with("-V", "--verbose", an_instance_of(String))
@options.verbose
end
it "registers a verbose output object with MSpec" do
MSpec.should_receive(:register).with(:start, anything()).twice
MSpec.should_receive(:register).with(:load, anything()).twice
["-V", "--verbose"].each do |opt|
@options.parse opt
end
end
end
describe "The -m, --marker MARKER option" do
before :each do
@options, @config = new_option
@options.verbose
end
it "is enabled with #verbose" do
@options.stub(:on)
@options.should_receive(:on).with("-m", "--marker", "MARKER",
an_instance_of(String))
@options.verbose
end
it "registers a marker output object with MSpec" do
MSpec.should_receive(:register).with(:load, anything()).twice
["-m", "--marker"].each do |opt|
@options.parse [opt, ","]
end
end
end
describe "The --int-spec option" do
before :each do
@options, @config = new_option
@options.interrupt
end
it "is enabled with #interrupt" do
@options.should_receive(:on).with("--int-spec", an_instance_of(String))
@options.interrupt
end
it "sets the abort config option to false to only abort the running spec with ^C" do
@config[:abort] = true
@options.parse "--int-spec"
@config[:abort].should == false
end
end
describe "The -Y, --verify option" do
before :each do
@options, @config = new_option
@options.verify
end
it "is enabled with #interrupt" do
@options.stub(:on)
@options.should_receive(:on).with("-Y", "--verify", an_instance_of(String))
@options.verify
end
it "sets the MSpec mode to :verify" do
MSpec.should_receive(:register_mode).with(:verify).twice
["-Y", "--verify"].each do |m|
@options.parse m
end
end
end
describe "The -O, --report option" do
before :each do
@options, @config = new_option
@options.verify
end
it "is enabled with #interrupt" do
@options.stub(:on)
@options.should_receive(:on).with("-O", "--report", an_instance_of(String))
@options.verify
end
it "sets the MSpec mode to :report" do
MSpec.should_receive(:register_mode).with(:report).twice
["-O", "--report"].each do |m|
@options.parse m
end
end
end
describe "The --report-on GUARD option" do
before :all do
MSpec.stub(:register_mode)
end
before :each do
@options, @config = new_option
@options.verify
SpecGuard.clear_guards
end
after :each do
SpecGuard.clear_guards
end
it "is enabled with #interrupt" do
@options.stub(:on)
@options.should_receive(:on).with("--report-on", "GUARD", an_instance_of(String))
@options.verify
end
it "sets the MSpec mode to :report_on" do
MSpec.should_receive(:register_mode).with(:report_on)
@options.parse ["--report-on", "ruby_bug"]
end
it "converts the guard name to a symbol" do
name = double("ruby_bug")
name.should_receive(:to_sym)
@options.parse ["--report-on", name]
end
it "saves the name of the guard" do
@options.parse ["--report-on", "ruby_bug"]
SpecGuard.guards.should == [:ruby_bug]
end
end
describe "The -K, --action-tag TAG option" do
before :each do
@options, @config = new_option
@options.action_filters
end
it "is enabled with #action_filters" do
@options.stub(:on)
@options.should_receive(:on).with("-K", "--action-tag", "TAG",
an_instance_of(String))
@options.action_filters
end
it "adds TAG to the list of tags that trigger actions" do
["-K", "--action-tag"].each do |opt|
@config[:atags] = []
@options.parse [opt, "action-tag"]
@config[:atags].should include("action-tag")
end
end
end
describe "The -S, --action-string STR option" do
before :each do
@options, @config = new_option
@options.action_filters
end
it "is enabled with #action_filters" do
@options.stub(:on)
@options.should_receive(:on).with("-S", "--action-string", "STR",
an_instance_of(String))
@options.action_filters
end
it "adds STR to the list of spec descriptions that trigger actions" do
["-S", "--action-string"].each do |opt|
@config[:astrings] = []
@options.parse [opt, "action-str"]
@config[:astrings].should include("action-str")
end
end
end
describe "The -d, --debug option" do
before :each do
@options, @config = new_option
@options.debug
end
after :each do
$MSPEC_DEBUG = nil
end
it "is enabled with #debug" do
@options.stub(:on)
@options.should_receive(:on).with("-d", "--debug", an_instance_of(String))
@options.debug
end
it "sets $MSPEC_DEBUG to true" do
["-d", "--debug"].each do |opt|
$MSPEC_DEBUG.should_not be_true
@options.parse opt
$MSPEC_DEBUG.should be_true
$MSPEC_DEBUG = nil
end
end
end
describe "MSpecOptions#all" do
it "includes all options" do
meth = MSpecOptions.instance_method(:all)
file, line = meth.source_location
contents = File.read(file)
lines = contents.lines
from = line
to = from
to += 1 until /^\s*end\s*$/ =~ lines[to]
calls = lines[from...to].map(&:strip)
option_methods = contents.scan(/def (\w+).*\n\s*on\(/).map(&:first)
option_methods[0].sub!("configure", "configure {}")
calls.should == option_methods
end
end