Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tree: d00e0013ff
Fetching contributors…

Cannot retrieve contributors at this time

358 lines (305 sloc) 12.861 kb
require 'spec_helper'
require 'ostruct'
describe RSpec::Core::ConfigurationOptions do
include ConfigOptionsHelper
it "warns when HOME env var is not set", :unless => (RUBY_PLATFORM == 'java') do
begin
orig_home = ENV.delete("HOME")
coo = RSpec::Core::ConfigurationOptions.new([])
coo.should_receive(:warn)
coo.parse_options
ensure
ENV["HOME"] = orig_home
end
end
describe "#configure" do
it "sends libs before requires" do
opts = config_options_object(*%w[--require a/path -I a/lib])
config = double("config").as_null_object
config.should_receive(:libs=).ordered
config.should_receive(:requires=).ordered
opts.configure(config)
end
it "sends requires before formatter" do
opts = config_options_object(*%w[--require a/path -f a/formatter])
config = double("config").as_null_object
config.should_receive(:requires=).ordered
config.should_receive(:add_formatter).ordered
opts.configure(config)
end
it "sends default_path before files_or_directories_to_run" do
opts = config_options_object(*%w[--default_path spec])
config = double("config").as_null_object
config.should_receive(:force).with(:default_path => 'spec').ordered
config.should_receive(:files_or_directories_to_run=).ordered
opts.configure(config)
end
it "sends pattern before files_or_directories_to_run" do
opts = config_options_object(*%w[--pattern **/*.spec])
config = double("config").as_null_object
config.should_receive(:force).with(:pattern => '**/*.spec').ordered
config.should_receive(:files_or_directories_to_run=).ordered
opts.configure(config)
end
it "merges the :exclusion_filter option with the default exclusion_filter" do
opts = config_options_object(*%w[--tag ~slow])
config = RSpec::Core::Configuration.new
opts.configure(config)
config.exclusion_filter.should have_key(:slow)
end
it "forces color_enabled" do
opts = config_options_object(*%w[--color])
config = RSpec::Core::Configuration.new
config.should_receive(:force).with(:color => true)
opts.configure(config)
end
it "assigns filter" do
pending
end
[
["--failure-exit-code", "3", :failure_exit_code, 3 ],
["--pattern", "foo/bar", :pattern, "foo/bar"],
["--failure-exit-code", "37", :failure_exit_code, 37],
["--default_path", "behavior", :default_path, "behavior"],
["--drb", nil, :drb, true],
["--order", "rand", :order, "rand"],
["--seed", "37", :order, "rand:37"],
["--drb-port", "37", :drb_port, 37],
["--backtrace", nil, :full_backtrace, true],
["--profile", nil, :profile_examples, true],
["--tty", nil, :tty, true]
].each do |cli_option, cli_value, config_key, config_value|
it "forces #{config_key}" do
opts = config_options_object(*[cli_option, cli_value].compact)
config = RSpec::Core::Configuration.new
config.should_receive(:force) do |pair|
pair.keys.first.should eq(config_key)
pair.values.first.should eq(config_value)
end
opts.configure(config)
end
end
it "sets debug directly" do
opts = config_options_object("--debug")
config = RSpec::Core::Configuration.new
config.should_receive(:debug=).with(true)
opts.configure(config)
end
end
describe "-c, --color, and --colour" do
it "sets :color => true" do
parse_options('-c').should include(:color => true)
parse_options('--color').should include(:color => true)
parse_options('--colour').should include(:color => true)
end
end
describe "--no-color" do
it "sets :color => false" do
parse_options('--no-color').should include(:color => false)
end
it "overrides previous :color => true" do
parse_options('--color', '--no-color').should include(:color => false)
end
it "gets overriden by a subsequent :color => true" do
parse_options('--no-color', '--color').should include(:color => true)
end
end
describe "-s, --slow-color, and --slow-colour" do
it "sets :slow_color" do
parse_options('-s', 'cyan').should include(:slow_color => 'cyan')
parse_options('--slow-color', 'red').should include(:slow_color => 'red')
parse_options('--slow-colour', 'yellow').should include(:slow_color => 'yellow')
end
end
describe "-I" do
example "adds to :libs" do
parse_options('-I', 'a_dir').should include(:libs => ['a_dir'])
end
example "can be used more than once" do
parse_options('-I', 'dir_1', '-I', 'dir_2').should include(:libs => ['dir_1','dir_2'])
end
end
describe '--require' do
example "requires files" do
parse_options('--require', 'a/path').should include(:requires => ['a/path'])
end
example "can be used more than once" do
parse_options('--require', 'path/1', '--require', 'path/2').should include(:requires => ['path/1','path/2'])
end
end
describe "--format, -f" do
it "sets :formatter" do
[['--format', 'd'], ['-f', 'd'], '-fd'].each do |args|
parse_options(*args).should include(:formatters => [['d']])
end
end
example "can accept a class name" do
parse_options('-fSome::Formatter::Class').should include(:formatters => [['Some::Formatter::Class']])
end
end
describe "--profile, -p" do
it "sets :profile_examples => true" do
parse_options('-p').should include(:profile_examples => true)
parse_options('--profile').should include(:profile_examples => true)
end
end
describe '--line_number' do
it "sets :line_number" do
parse_options('-l','3').should include(:line_numbers => ['3'])
parse_options('--line_number','3').should include(:line_numbers => ['3'])
end
it "can be specified multiple times" do
parse_options('-l','3', '-l', '6').should include(:line_numbers => ['3', '6'])
parse_options('--line_number','3', '--line_number', '6').should include(:line_numbers => ['3', '6'])
end
end
describe "--example" do
it "sets :full_description" do
parse_options('--example','foo').should include(:full_description => /foo/)
parse_options('-e','bar').should include(:full_description => /bar/)
end
end
describe "--backtrace, -b" do
it "sets full_backtrace on config" do
parse_options("--backtrace").should include(:full_backtrace => true)
parse_options("-b").should include(:full_backtrace => true)
end
end
describe "--debug, -d" do
it "sets :debug => true" do
parse_options("--debug").should include(:debug => true)
parse_options("-d").should include(:debug => true)
end
end
describe "--fail-fast" do
it "defaults to false" do
parse_options[:fail_fast].should be_false
end
it "sets fail_fast on config" do
parse_options("--fail-fast")[:fail_fast].should be_true
end
end
describe "--failure-exit-code" do
it "sets :failure_exit_code" do
parse_options('--failure-exit-code', '0').should include(:failure_exit_code => 0)
parse_options('--failure-exit-code', '1').should include(:failure_exit_code => 1)
parse_options('--failure-exit-code', '2').should include(:failure_exit_code => 2)
end
it "overrides previous :failure_exit_code" do
parse_options('--failure-exit-code', '2', '--failure-exit-code', '3').should include(:failure_exit_code => 3)
end
end
describe "--options" do
it "sets :custom_options_file" do
parse_options(*%w[-O my.opts]).should include(:custom_options_file => "my.opts")
parse_options(*%w[--options my.opts]).should include(:custom_options_file => "my.opts")
end
end
describe "--drb, -X" do
context "combined with --debug" do
it "turns off the debugger if --drb is specified first" do
config_options_object("--drb", "--debug").drb_argv.should_not include("--debug")
config_options_object("--drb", "-d" ).drb_argv.should_not include("--debug")
config_options_object("-X", "--debug").drb_argv.should_not include("--debug")
config_options_object("-X", "-d" ).drb_argv.should_not include("--debug")
end
it "turns off the debugger option if --drb is specified later" do
config_options_object("--debug", "--drb").drb_argv.should_not include("--debug")
config_options_object("-d", "--drb").drb_argv.should_not include("--debug")
config_options_object("--debug", "-X" ).drb_argv.should_not include("--debug")
config_options_object("-d", "-X" ).drb_argv.should_not include("--debug")
end
it "turns off the debugger option if --drb is specified in the options file" do
File.open("./.rspec", "w") {|f| f << "--drb"}
config_options_object("--debug").drb_argv.should_not include("--debug")
config_options_object("-d" ).drb_argv.should_not include("--debug")
end
it "turns off the debugger option if --debug is specified in the options file" do
File.open("./.rspec", "w") {|f| f << "--debug"}
config_options_object("--drb").drb_argv.should_not include("--debug")
config_options_object("-X" ).drb_argv.should_not include("--debug")
end
end
it "does not send --drb back to the parser after parsing options" do
config_options_object("--drb", "--color").drb_argv.should_not include("--drb")
end
end
describe "--no-drb" do
it "disables drb" do
parse_options("--no-drb").should include(:drb => false)
end
it "overrides a previous drb => true" do
parse_options("--drb", "--no-drb").should include(:drb => false)
end
it "gets overriden by a subsquent drb => true" do
parse_options("--no-drb", "--drb").should include(:drb => true)
end
end
describe "files_or_directories_to_run" do
it "parses files from '-c file.rb dir/file.rb'" do
parse_options("-c", "file.rb", "dir/file.rb").should include(
:files_or_directories_to_run => ["file.rb", "dir/file.rb"]
)
end
it "parses dir from 'dir'" do
parse_options("dir").should include(:files_or_directories_to_run => ["dir"])
end
it "parses dir and files from 'spec/file1_spec.rb, spec/file2_spec.rb'" do
parse_options("dir", "spec/file1_spec.rb", "spec/file2_spec.rb").should include(
:files_or_directories_to_run => ["dir", "spec/file1_spec.rb", "spec/file2_spec.rb"]
)
end
it "provides no files or directories if spec directory does not exist" do
FileTest.stub(:directory?).with("spec").and_return false
parse_options().should include(:files_or_directories_to_run => [])
end
end
describe "default_path" do
it "gets set before files_or_directories_to_run" do
config = double("config").as_null_object
config.should_receive(:force).with(:default_path => 'foo').ordered
config.should_receive(:files_or_directories_to_run=).ordered
opts = config_options_object("--default_path", "foo")
opts.configure(config)
end
end
describe "sources: ~/.rspec, ./.rspec, custom, CLI, and SPEC_OPTS" do
before(:each) do
FileUtils.mkpath(File.expand_path("~"))
end
it "merges global, local, SPEC_OPTS, and CLI" do
File.open("./.rspec", "w") {|f| f << "--line 37"}
File.open("~/.rspec", "w") {|f| f << "--color"}
ENV["SPEC_OPTS"] = "--debug"
options = parse_options("--drb")
options[:color].should be_true
options[:line_numbers].should eq(["37"])
options[:debug].should be_true
options[:drb].should be_true
end
it "prefers SPEC_OPTS over CLI" do
ENV["SPEC_OPTS"] = "--format spec_opts"
parse_options("--format", "cli")[:formatters].should eq([['spec_opts']])
end
it "prefers CLI over file options" do
File.open("./.rspec", "w") {|f| f << "--format local"}
File.open("~/.rspec", "w") {|f| f << "--format global"}
parse_options("--format", "cli")[:formatters].should eq([['cli']])
end
it "prefers local file options over global" do
File.open("./.rspec", "w") {|f| f << "--format local"}
File.open("~/.rspec", "w") {|f| f << "--format global"}
parse_options[:formatters].should eq([['local']])
end
context "with custom options file" do
it "ignores local and global options files" do
File.open("./.rspec", "w") {|f| f << "--format local"}
File.open("~/.rspec", "w") {|f| f << "--format global"}
File.open("./custom.opts", "w") {|f| f << "--color"}
options = parse_options("-O", "./custom.opts")
options[:format].should be_nil
options[:color].should be_true
end
end
end
end
Jump to Line
Something went wrong with that request. Please try again.