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 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242
|
require "spec_helper"
module RSpec::Core
describe OptionParser do
let(:output_file){ mock File }
before do
RSpec.stub(:deprecate)
File.stub(:open).with("foo.txt",'w') { (output_file) }
end
it "does not parse empty args" do
parser = Parser.new
OptionParser.should_not_receive(:new)
parser.parse!([])
end
it "proposes you to use --help and returns an error on incorrect argument" do
parser = Parser.new
option = "--my_wrong_arg"
parser.should_receive(:abort) do |msg|
expect(msg).to include('use --help', option)
end
parser.parse!([option])
end
describe "--formatter" do
it "is deprecated" do
RSpec.should_receive(:deprecate)
Parser.parse!(%w[--formatter doc])
end
it "gets converted to --format" do
options = Parser.parse!(%w[--formatter doc])
expect(options[:formatters].first).to eq(["doc"])
end
end
describe "--default_path" do
it "gets converted to --default-path" do
options = Parser.parse!(%w[--default_path foo])
expect(options[:default_path]).to eq "foo"
end
end
describe "--line_number" do
it "gets converted to --line-number" do
options = Parser.parse!(%w[--line_number 3])
expect(options[:line_numbers]).to eq ["3"]
end
end
describe "--default-path" do
it "sets the default path where RSpec looks for examples" do
options = Parser.parse!(%w[--default-path foo])
expect(options[:default_path]).to eq "foo"
end
end
%w[--line-number -l].each do |option|
describe option do
it "sets the line number of an example to run" do
options = Parser.parse!([option, "3"])
expect(options[:line_numbers]).to eq ["3"]
end
end
end
%w[--format -f].each do |option|
describe option do
it "defines the formatter" do
options = Parser.parse!([option, 'doc'])
expect(options[:formatters].first).to eq(["doc"])
end
end
end
%w[--out -o].each do |option|
describe option do
let(:options) { Parser.parse!([option, 'out.txt']) }
it "sets the output stream for the formatter" do
expect(options[:formatters].last).to eq(['progress', 'out.txt'])
end
context "with multiple formatters" do
context "after last formatter" do
it "sets the output stream for the last formatter" do
options = Parser.parse!(['-f', 'progress', '-f', 'doc', option, 'out.txt'])
expect(options[:formatters][0]).to eq(['progress'])
expect(options[:formatters][1]).to eq(['doc', 'out.txt'])
end
end
context "after first formatter" do
it "sets the output stream for the first formatter" do
options = Parser.parse!(['-f', 'progress', option, 'out.txt', '-f', 'doc'])
expect(options[:formatters][0]).to eq(['progress', 'out.txt'])
expect(options[:formatters][1]).to eq(['doc'])
end
end
end
end
end
%w[--example -e].each do |option|
describe option do
it "escapes the arg" do
options = Parser.parse!([option, "this (and that)"])
expect(options[:full_description].length).to eq(1)
expect("this (and that)").to match(options[:full_description].first)
end
end
end
%w[--pattern -P].each do |option|
describe option do
it "sets the filename pattern" do
options = Parser.parse!([option, 'spec/**/*.spec'])
expect(options[:pattern]).to eq('spec/**/*.spec')
end
end
end
%w[--tag -t].each do |option|
describe option do
context "without ~" do
it "treats no value as true" do
options = Parser.parse!([option, 'foo'])
expect(options[:inclusion_filter]).to eq(:foo => true)
end
it "treats 'true' as true" do
options = Parser.parse!([option, 'foo:true'])
expect(options[:inclusion_filter]).to eq(:foo => true)
end
it "treats 'nil' as nil" do
options = Parser.parse!([option, 'foo:nil'])
expect(options[:inclusion_filter]).to eq(:foo => nil)
end
it "treats 'false' as false" do
options = Parser.parse!([option, 'foo:false'])
expect(options[:inclusion_filter]).to eq(:foo => false)
end
it "merges muliple invocations" do
options = Parser.parse!([option, 'foo:false', option, 'bar:true', option, 'foo:true'])
expect(options[:inclusion_filter]).to eq(:foo => true, :bar => true)
end
it "treats 'any_string' as 'any_string'" do
options = Parser.parse!([option, 'foo:any_string'])
expect(options[:inclusion_filter]).to eq(:foo => 'any_string')
end
end
context "with ~" do
it "treats no value as true" do
options = Parser.parse!([option, '~foo'])
expect(options[:exclusion_filter]).to eq(:foo => true)
end
it "treats 'true' as true" do
options = Parser.parse!([option, '~foo:true'])
expect(options[:exclusion_filter]).to eq(:foo => true)
end
it "treats 'nil' as nil" do
options = Parser.parse!([option, '~foo:nil'])
expect(options[:exclusion_filter]).to eq(:foo => nil)
end
it "treats 'false' as false" do
options = Parser.parse!([option, '~foo:false'])
expect(options[:exclusion_filter]).to eq(:foo => false)
end
end
end
end
describe "--order" do
it "is nil by default" do
expect(Parser.parse!([])[:order]).to be_nil
end
%w[rand random].each do |option|
context "with #{option}" do
it "defines the order as random" do
options = Parser.parse!(['--order', option])
expect(options[:order]).to eq(option)
end
end
end
end
describe "--seed" do
it "sets the order to rand:SEED" do
options = Parser.parse!(%w[--seed 123])
expect(options[:order]).to eq("rand:123")
end
end
describe '--profile' do
it 'sets profile_examples to true by default' do
options = Parser.parse!(%w[--profile])
expect(options[:profile_examples]).to eq true
end
it 'sets profile_examples to supplied int' do
options = Parser.parse!(%w[--profile 10])
expect(options[:profile_examples]).to eq 10
end
it 'sets profile_examples to true when accidentally combined with path' do
allow(Kernel).to receive(:warn)
options = Parser.parse!(%w[--profile some/path])
expect(options[:profile_examples]).to eq true
end
it 'warns when accidentally combined with path' do
expect(Kernel).to receive(:warn) do |msg|
expect(msg).to match "Non integer specified as profile count"
end
options = Parser.parse!(%w[--profile some/path])
expect(options[:profile_examples]).to eq true
end
end
describe '--warning' do
it 'enables warnings' do
options = Parser.parse!(%w[--warnings])
expect(options[:warnings]).to eq true
end
end
end
end
|