rspec-core 2.7.1 → 2.8.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +1 -1
- data/features/command_line/order.feature +29 -0
- data/features/command_line/tag.feature +10 -9
- data/features/configuration/default_path.feature +2 -2
- data/features/filtering/exclusion_filters.feature +1 -1
- data/features/filtering/run_all_when_everything_filtered.feature +1 -1
- data/features/subject/attribute_of_subject.feature +1 -1
- data/lib/rspec/core.rb +148 -12
- data/lib/rspec/core/command_line.rb +2 -2
- data/lib/rspec/core/configuration.rb +300 -155
- data/lib/rspec/core/configuration_options.rb +34 -53
- data/lib/rspec/core/deprecation.rb +4 -0
- data/lib/rspec/core/drb_options.rb +72 -0
- data/lib/rspec/core/example.rb +58 -24
- data/lib/rspec/core/example_group.rb +10 -5
- data/lib/rspec/core/extensions.rb +1 -0
- data/lib/rspec/core/extensions/ordered.rb +16 -0
- data/lib/rspec/core/filter_manager.rb +170 -0
- data/lib/rspec/core/formatters/base_formatter.rb +3 -1
- data/lib/rspec/core/formatters/base_text_formatter.rb +6 -0
- data/lib/rspec/core/formatters/snippet_extractor.rb +1 -1
- data/lib/rspec/core/hooks.rb +197 -1
- data/lib/rspec/core/let.rb +3 -2
- data/lib/rspec/core/metadata.rb +25 -4
- data/lib/rspec/core/option_parser.rb +89 -54
- data/lib/rspec/core/pending.rb +41 -0
- data/lib/rspec/core/rake_task.rb +9 -25
- data/lib/rspec/core/reporter.rb +43 -19
- data/lib/rspec/core/shared_context.rb +35 -0
- data/lib/rspec/core/shared_example_group.rb +0 -1
- data/lib/rspec/core/subject.rb +4 -4
- data/lib/rspec/core/version.rb +1 -1
- data/lib/rspec/core/world.rb +34 -52
- data/spec/autotest/failed_results_re_spec.rb +2 -2
- data/spec/command_line/order_spec.rb +131 -0
- data/spec/rspec/core/command_line_spec.rb +2 -1
- data/spec/rspec/core/configuration_options_spec.rb +83 -163
- data/spec/rspec/core/configuration_spec.rb +311 -139
- data/spec/rspec/core/drb_options_spec.rb +131 -0
- data/spec/rspec/core/example_group_spec.rb +22 -11
- data/spec/rspec/core/example_spec.rb +1 -2
- data/spec/rspec/core/filter_manager_spec.rb +175 -0
- data/spec/rspec/core/formatters/helpers_spec.rb +1 -1
- data/spec/rspec/core/formatters/html_formatter_spec.rb +3 -2
- data/spec/rspec/core/formatters/text_mate_formatter_spec.rb +1 -1
- data/spec/rspec/core/metadata_spec.rb +21 -6
- data/spec/rspec/core/option_parser_spec.rb +74 -0
- data/spec/rspec/core/reporter_spec.rb +18 -1
- data/spec/rspec/core/shared_context_spec.rb +54 -17
- data/spec/rspec/core/subject_spec.rb +1 -1
- data/spec/rspec/core/world_spec.rb +7 -188
- data/spec/spec_helper.rb +47 -43
- data/spec/support/config_options_helper.rb +27 -0
- metadata +28 -12
- data/lib/rspec/core/expecting/with_rspec.rb +0 -9
- data/lib/rspec/core/expecting/with_stdlib.rb +0 -9
@@ -1,6 +1,9 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'tmpdir'
|
3
3
|
|
4
|
+
# so the stdlib module is available...
|
5
|
+
module Test; module Unit; module Assertions; end; end; end
|
6
|
+
|
4
7
|
module RSpec::Core
|
5
8
|
|
6
9
|
describe Configuration do
|
@@ -48,12 +51,19 @@ module RSpec::Core
|
|
48
51
|
end
|
49
52
|
end
|
50
53
|
|
51
|
-
describe "#mock_framework="
|
54
|
+
describe "#mock_framework="do
|
55
|
+
it "delegates to mock_with" do
|
56
|
+
config.should_receive(:mock_with).with(:rspec)
|
57
|
+
config.mock_framework = :rspec
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe "#mock_with" do
|
52
62
|
[:rspec, :mocha, :rr, :flexmock].each do |framework|
|
53
63
|
context "with #{framework}" do
|
54
64
|
it "requires the adapter for #{framework.inspect}" do
|
55
65
|
config.should_receive(:require).with("rspec/core/mocking/with_#{framework}")
|
56
|
-
config.
|
66
|
+
config.mock_with framework
|
57
67
|
end
|
58
68
|
end
|
59
69
|
end
|
@@ -62,55 +72,70 @@ module RSpec::Core
|
|
62
72
|
it "sets the mock_framework_adapter to that module" do
|
63
73
|
config.stub(:require)
|
64
74
|
mod = Module.new
|
65
|
-
config.
|
75
|
+
config.mock_with mod
|
66
76
|
config.mock_framework.should eq(mod)
|
67
77
|
end
|
68
78
|
end
|
69
79
|
|
70
80
|
it "uses the null adapter when set to any unknown key" do
|
71
81
|
config.should_receive(:require).with('rspec/core/mocking/with_absolutely_nothing')
|
72
|
-
config.
|
82
|
+
config.mock_with :crazy_new_mocking_framework_ive_not_yet_heard_of
|
73
83
|
end
|
74
84
|
|
75
85
|
context 'when there are already some example groups defined' do
|
76
|
-
before(:each)
|
77
|
-
RSpec.world.stub(:example_groups).and_return([double.as_null_object])
|
78
|
-
end
|
86
|
+
before(:each) { config.stub(:require) }
|
79
87
|
|
80
88
|
it 'raises an error since this setting must be applied before any groups are defined' do
|
89
|
+
RSpec.world.stub(:example_groups).and_return([double.as_null_object])
|
81
90
|
expect {
|
82
|
-
config.
|
91
|
+
config.mock_with :mocha
|
83
92
|
}.to raise_error(/must be configured before any example groups are defined/)
|
84
93
|
end
|
85
|
-
end
|
86
|
-
end
|
87
94
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
95
|
+
it 'does not raise an error if the default `mock_with :rspec` is re-configured' do
|
96
|
+
config.mock_framework # called by RSpec when configuring the first example group
|
97
|
+
RSpec.world.stub(:example_groups).and_return([double.as_null_object])
|
98
|
+
config.mock_with :rspec
|
99
|
+
end
|
100
|
+
|
101
|
+
it 'does not raise an error if re-setting the same config' do
|
102
|
+
groups = []
|
103
|
+
RSpec.world.stub(:example_groups => groups)
|
104
|
+
config.mock_with :mocha
|
105
|
+
groups << double.as_null_object
|
106
|
+
config.mock_with :mocha
|
107
|
+
end
|
92
108
|
end
|
93
109
|
end
|
94
110
|
|
95
111
|
describe "#expectation_framework" do
|
96
112
|
it "defaults to :rspec" do
|
97
|
-
config.should_receive(:require).with('rspec/
|
113
|
+
config.should_receive(:require).with('rspec/expectations')
|
98
114
|
config.expectation_frameworks
|
99
115
|
end
|
100
116
|
end
|
101
117
|
|
102
118
|
describe "#expectation_framework=" do
|
103
119
|
it "delegates to expect_with=" do
|
104
|
-
config.should_receive(:expect_with).with(
|
120
|
+
config.should_receive(:expect_with).with(:rspec)
|
105
121
|
config.expectation_framework = :rspec
|
106
122
|
end
|
107
123
|
end
|
108
124
|
|
109
125
|
describe "#expect_with" do
|
110
|
-
|
126
|
+
before(:each) do
|
127
|
+
# we need to prevent stdlib from being required because it defines a
|
128
|
+
# `pass` method that conflicts with our `pass` matcher.
|
129
|
+
config.stub(:require)
|
130
|
+
end
|
131
|
+
|
132
|
+
[
|
133
|
+
[:rspec, 'rspec/expectations'],
|
134
|
+
[:stdlib, 'test/unit/assertions']
|
135
|
+
].each do |(framework, required_file)|
|
111
136
|
context "with #{framework}" do
|
112
|
-
it "requires
|
113
|
-
config.should_receive(:require).with(
|
137
|
+
it "requires #{required_file}" do
|
138
|
+
config.should_receive(:require).with(required_file)
|
114
139
|
config.expect_with framework
|
115
140
|
end
|
116
141
|
end
|
@@ -123,15 +148,26 @@ module RSpec::Core
|
|
123
148
|
end
|
124
149
|
|
125
150
|
context 'when there are already some example groups defined' do
|
126
|
-
before(:each) do
|
127
|
-
RSpec.world.stub(:example_groups).and_return([double.as_null_object])
|
128
|
-
end
|
129
|
-
|
130
151
|
it 'raises an error since this setting must be applied before any groups are defined' do
|
152
|
+
RSpec.world.stub(:example_groups).and_return([double.as_null_object])
|
131
153
|
expect {
|
132
154
|
config.expect_with :rspec
|
133
155
|
}.to raise_error(/must be configured before any example groups are defined/)
|
134
156
|
end
|
157
|
+
|
158
|
+
it 'does not raise an error if the default `expect_with :rspec` is re-configured' do
|
159
|
+
config.expectation_frameworks # called by RSpec when configuring the first example group
|
160
|
+
RSpec.world.stub(:example_groups).and_return([double.as_null_object])
|
161
|
+
config.expect_with :rspec
|
162
|
+
end
|
163
|
+
|
164
|
+
it 'does not raise an error if re-setting the same config' do
|
165
|
+
groups = []
|
166
|
+
RSpec.world.stub(:example_groups => groups)
|
167
|
+
config.expect_with :stdlib
|
168
|
+
groups << double.as_null_object
|
169
|
+
config.expect_with :stdlib
|
170
|
+
end
|
135
171
|
end
|
136
172
|
end
|
137
173
|
|
@@ -185,9 +221,40 @@ module RSpec::Core
|
|
185
221
|
config.files_to_run.should eq(["spec/rspec/core/resources/a_spec.rb"])
|
186
222
|
end
|
187
223
|
|
224
|
+
context "with <path>:<line_number>" do
|
225
|
+
it "overrides inclusion filters set on config" do
|
226
|
+
config.filter_run_including :foo => :bar
|
227
|
+
config.files_or_directories_to_run = "path/to/file.rb:37"
|
228
|
+
config.inclusion_filter.size.should eq(1)
|
229
|
+
config.inclusion_filter[:locations].keys.first.should match(/path\/to\/file\.rb$/)
|
230
|
+
config.inclusion_filter[:locations].values.first.should eq([37])
|
231
|
+
end
|
232
|
+
|
233
|
+
it "overrides inclusion filters set before config" do
|
234
|
+
config.force(:inclusion_filter => {:foo => :bar})
|
235
|
+
config.files_or_directories_to_run = "path/to/file.rb:37"
|
236
|
+
config.inclusion_filter.size.should eq(1)
|
237
|
+
config.inclusion_filter[:locations].keys.first.should match(/path\/to\/file\.rb$/)
|
238
|
+
config.inclusion_filter[:locations].values.first.should eq([37])
|
239
|
+
end
|
240
|
+
|
241
|
+
it "clears exclusion filters set on config" do
|
242
|
+
config.exclusion_filter = { :foo => :bar }
|
243
|
+
config.files_or_directories_to_run = "path/to/file.rb:37"
|
244
|
+
config.exclusion_filter.should be_empty,
|
245
|
+
"expected exclusion filter to be empty:\n#{config.exclusion_filter}"
|
246
|
+
end
|
247
|
+
|
248
|
+
it "clears exclusion filters set before config" do
|
249
|
+
config.force(:exclusion_filter => { :foo => :bar })
|
250
|
+
config.files_or_directories_to_run = "path/to/file.rb:37"
|
251
|
+
config.exclusion_filter.should be_empty,
|
252
|
+
"expected exclusion filter to be empty:\n#{config.exclusion_filter}"
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
188
256
|
context "with default pattern" do
|
189
257
|
it "loads files named _spec.rb" do
|
190
|
-
dir = "spec/rspec/core/resources"
|
191
258
|
config.files_or_directories_to_run = "spec/rspec/core/resources"
|
192
259
|
config.files_to_run.should eq([ "spec/rspec/core/resources/a_spec.rb"])
|
193
260
|
end
|
@@ -198,7 +265,7 @@ module RSpec::Core
|
|
198
265
|
config.files_to_run.should eq([file])
|
199
266
|
end
|
200
267
|
end
|
201
|
-
|
268
|
+
|
202
269
|
context "with default default_path" do
|
203
270
|
it "loads files in the default path when run by rspec" do
|
204
271
|
config.stub(:command) { 'rspec' }
|
@@ -265,7 +332,7 @@ module RSpec::Core
|
|
265
332
|
end
|
266
333
|
|
267
334
|
context "with full_description" do
|
268
|
-
it "overrides
|
335
|
+
it "overrides filters" do
|
269
336
|
config.filter_run :focused => true
|
270
337
|
config.full_description = "foo"
|
271
338
|
config.filter.should_not have_key(:focused)
|
@@ -302,7 +369,7 @@ module RSpec::Core
|
|
302
369
|
config.full_description = "foo"
|
303
370
|
config.filter.should eq({:full_description => /foo/})
|
304
371
|
end
|
305
|
-
|
372
|
+
|
306
373
|
describe "#default_path" do
|
307
374
|
it 'defaults to "spec"' do
|
308
375
|
config.default_path.should eq('spec')
|
@@ -387,93 +454,104 @@ module RSpec::Core
|
|
387
454
|
end
|
388
455
|
end
|
389
456
|
|
390
|
-
|
391
|
-
|
392
|
-
context "
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
context "with tty output" do
|
403
|
-
it "does not set color_enabled" do
|
404
|
-
config.output_stream = StringIO.new
|
405
|
-
config.output_stream.stub(:tty?) { true }
|
406
|
-
config.tty = false
|
407
|
-
config.color_enabled = true
|
408
|
-
config.color_enabled.should be_true
|
409
|
-
end
|
410
|
-
end
|
411
|
-
|
412
|
-
context "with tty set" do
|
413
|
-
it "does not set color_enabled" do
|
414
|
-
config.output_stream = StringIO.new
|
415
|
-
config.output_stream.stub(:tty?) { false }
|
416
|
-
config.tty = true
|
417
|
-
config.color_enabled = true
|
418
|
-
config.color_enabled.should be_true
|
457
|
+
%w[color color_enabled].each do |color_option|
|
458
|
+
describe "##{color_option}=" do
|
459
|
+
context "given true" do
|
460
|
+
context "with non-tty output and no autotest" do
|
461
|
+
it "does not set color_enabled" do
|
462
|
+
config.output_stream = StringIO.new
|
463
|
+
config.output_stream.stub(:tty?) { false }
|
464
|
+
config.tty = false
|
465
|
+
config.send "#{color_option}=", true
|
466
|
+
config.send(color_option).should be_false
|
467
|
+
end
|
419
468
|
end
|
420
|
-
end
|
421
469
|
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
470
|
+
context "with tty output" do
|
471
|
+
it "does not set color_enabled" do
|
472
|
+
config.output_stream = StringIO.new
|
473
|
+
config.output_stream.stub(:tty?) { true }
|
474
|
+
config.tty = false
|
475
|
+
config.send "#{color_option}=", true
|
476
|
+
config.send(color_option).should be_true
|
477
|
+
end
|
428
478
|
end
|
429
479
|
|
430
|
-
|
431
|
-
|
480
|
+
context "with tty set" do
|
481
|
+
it "does not set color_enabled" do
|
482
|
+
config.output_stream = StringIO.new
|
483
|
+
config.output_stream.stub(:tty?) { false }
|
484
|
+
config.tty = true
|
485
|
+
config.send "#{color_option}=", true
|
486
|
+
config.send(color_option).should be_true
|
487
|
+
end
|
432
488
|
end
|
433
489
|
|
434
|
-
context "
|
435
|
-
before
|
436
|
-
@
|
437
|
-
|
490
|
+
context "on windows" do
|
491
|
+
before do
|
492
|
+
@original_host = RbConfig::CONFIG['host_os']
|
493
|
+
RbConfig::CONFIG['host_os'] = 'mingw'
|
494
|
+
config.stub(:require)
|
495
|
+
config.stub(:warn)
|
438
496
|
end
|
439
497
|
|
440
|
-
after
|
441
|
-
|
442
|
-
end
|
443
|
-
|
444
|
-
it "enables colors" do
|
445
|
-
config.output_stream = StringIO.new
|
446
|
-
config.output_stream.stub(:tty?) { true }
|
447
|
-
config.color_enabled = true
|
448
|
-
config.color_enabled.should be_true
|
498
|
+
after do
|
499
|
+
RbConfig::CONFIG['host_os'] = @original_host
|
449
500
|
end
|
450
501
|
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
502
|
+
context "with ANSICON available" do
|
503
|
+
before(:all) do
|
504
|
+
@original_ansicon = ENV['ANSICON']
|
505
|
+
ENV['ANSICON'] = 'ANSICON'
|
506
|
+
end
|
507
|
+
|
508
|
+
after(:all) do
|
509
|
+
ENV['ANSICON'] = @original_ansicon
|
455
510
|
end
|
456
|
-
config.color_enabled = true
|
457
|
-
config.output_stream.should eq($stdout)
|
458
|
-
end
|
459
|
-
end
|
460
511
|
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
512
|
+
it "enables colors" do
|
513
|
+
config.output_stream = StringIO.new
|
514
|
+
config.output_stream.stub(:tty?) { true }
|
515
|
+
config.send "#{color_option}=", true
|
516
|
+
config.send(color_option).should be_true
|
517
|
+
end
|
518
|
+
|
519
|
+
it "leaves output stream intact" do
|
520
|
+
config.output_stream = $stdout
|
521
|
+
config.stub(:require) do |what|
|
522
|
+
config.output_stream = 'foo' if what =~ /Win32/
|
523
|
+
end
|
524
|
+
config.send "#{color_option}=", true
|
525
|
+
config.output_stream.should eq($stdout)
|
526
|
+
end
|
467
527
|
end
|
468
528
|
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
529
|
+
context "with ANSICON NOT available" do
|
530
|
+
it "warns to install ANSICON" do
|
531
|
+
config.stub(:require) { raise LoadError }
|
532
|
+
config.should_receive(:warn).
|
533
|
+
with(/You must use ANSICON/)
|
534
|
+
config.send "#{color_option}=", true
|
535
|
+
end
|
536
|
+
|
537
|
+
it "sets color_enabled to false" do
|
538
|
+
config.stub(:require) { raise LoadError }
|
539
|
+
config.send "#{color_option}=", true
|
540
|
+
config.color_enabled = true
|
541
|
+
config.send(color_option).should be_false
|
542
|
+
end
|
473
543
|
end
|
474
544
|
end
|
475
545
|
end
|
476
546
|
end
|
547
|
+
|
548
|
+
it "prefers incoming cli_args" do
|
549
|
+
config.output_stream = StringIO.new
|
550
|
+
config.output_stream.stub :tty? => true
|
551
|
+
config.force :color => true
|
552
|
+
config.color = false
|
553
|
+
config.color.should be_true
|
554
|
+
end
|
477
555
|
end
|
478
556
|
|
479
557
|
describe '#formatter=' do
|
@@ -507,9 +585,9 @@ module RSpec::Core
|
|
507
585
|
end
|
508
586
|
|
509
587
|
it "finds a formatter by class name" do
|
510
|
-
Object.const_set("
|
511
|
-
config.add_formatter "
|
512
|
-
config.formatters.first.should be_an_instance_of(
|
588
|
+
Object.const_set("ACustomFormatter", Class.new(Formatters::BaseFormatter))
|
589
|
+
config.add_formatter "ACustomFormatter"
|
590
|
+
config.formatters.first.should be_an_instance_of(ACustomFormatter)
|
513
591
|
end
|
514
592
|
|
515
593
|
it "finds a formatter by class fully qualified name" do
|
@@ -543,47 +621,41 @@ module RSpec::Core
|
|
543
621
|
config.formatters.first.output.path.should eq(path)
|
544
622
|
end
|
545
623
|
end
|
546
|
-
|
547
624
|
end
|
548
625
|
|
549
|
-
describe "#
|
626
|
+
describe "#filter_run_including" do
|
550
627
|
it_behaves_like "metadata hash builder" do
|
551
628
|
def metadata_hash(*args)
|
552
|
-
config.
|
553
|
-
config.
|
629
|
+
config.filter_run_including(*args)
|
630
|
+
config.inclusion_filter
|
554
631
|
end
|
555
632
|
end
|
556
633
|
|
557
|
-
it "sets the filter" do
|
558
|
-
config.
|
559
|
-
config.
|
634
|
+
it "sets the filter with a hash" do
|
635
|
+
config.filter_run_including :foo => true
|
636
|
+
config.inclusion_filter[:foo].should be(true)
|
637
|
+
end
|
638
|
+
|
639
|
+
it "sets the filter with a symbol" do
|
640
|
+
RSpec.configuration.stub(:treat_symbols_as_metadata_keys_with_true_values? => true)
|
641
|
+
config.filter_run_including :foo
|
642
|
+
config.inclusion_filter[:foo].should be(true)
|
560
643
|
end
|
561
644
|
|
562
645
|
it "merges with existing filters" do
|
563
|
-
config.
|
564
|
-
config.
|
646
|
+
config.filter_run_including :foo => true
|
647
|
+
config.filter_run_including :bar => false
|
565
648
|
|
566
|
-
config.
|
567
|
-
config.
|
649
|
+
config.inclusion_filter[:foo].should be(true)
|
650
|
+
config.inclusion_filter[:bar].should be(false)
|
568
651
|
end
|
569
652
|
|
570
|
-
it "
|
571
|
-
config.
|
572
|
-
config.
|
573
|
-
|
574
|
-
"are already filtering by {:line_numbers=>[100]}"
|
575
|
-
)
|
576
|
-
config.filter_run :focus => true
|
653
|
+
it "gets overrided by forced options" do
|
654
|
+
config.force_exclude :foo => true
|
655
|
+
config.filter_run_including :foo => true
|
656
|
+
config.inclusion_filter.should eq({})
|
577
657
|
end
|
578
658
|
|
579
|
-
it "warns if :full_description is already a filter" do
|
580
|
-
config.filter_run :full_description => 'foo'
|
581
|
-
config.should_receive(:warn).with(
|
582
|
-
"Filtering by {:focus=>true} is not possible since you " \
|
583
|
-
"are already filtering by {:full_description=>\"foo\"}"
|
584
|
-
)
|
585
|
-
config.filter_run :focus => true
|
586
|
-
end
|
587
659
|
end
|
588
660
|
|
589
661
|
describe "#filter_run_excluding" do
|
@@ -595,16 +667,29 @@ module RSpec::Core
|
|
595
667
|
end
|
596
668
|
|
597
669
|
it "sets the filter" do
|
598
|
-
config.filter_run_excluding :
|
599
|
-
config.exclusion_filter[:
|
670
|
+
config.filter_run_excluding :foo => true
|
671
|
+
config.exclusion_filter[:foo].should be(true)
|
672
|
+
end
|
673
|
+
|
674
|
+
it "sets the filter using a symbol" do
|
675
|
+
RSpec.configuration.stub(:treat_symbols_as_metadata_keys_with_true_values? => true)
|
676
|
+
config.filter_run_excluding :foo
|
677
|
+
config.exclusion_filter[:foo].should be(true)
|
600
678
|
end
|
601
679
|
|
602
680
|
it "merges with existing filters" do
|
603
|
-
config.filter_run_excluding :
|
604
|
-
config.filter_run_excluding :
|
681
|
+
config.filter_run_excluding :foo => true
|
682
|
+
config.filter_run_excluding :bar => false
|
605
683
|
|
606
|
-
config.exclusion_filter[:
|
607
|
-
config.exclusion_filter[:
|
684
|
+
config.exclusion_filter[:foo].should be(true)
|
685
|
+
config.exclusion_filter[:bar].should be(false)
|
686
|
+
end
|
687
|
+
|
688
|
+
it "gets overrided by forced options" do
|
689
|
+
config.exclusion_filter.clear
|
690
|
+
config.force_include :foo => true
|
691
|
+
config.filter_run_excluding :foo => true
|
692
|
+
config.exclusion_filter.should eq({})
|
608
693
|
end
|
609
694
|
end
|
610
695
|
|
@@ -615,6 +700,13 @@ module RSpec::Core
|
|
615
700
|
end
|
616
701
|
end
|
617
702
|
|
703
|
+
describe "#inclusion_filter=" do
|
704
|
+
it "treats symbols as hash keys with true values when told to" do
|
705
|
+
RSpec.configuration.stub(:treat_symbols_as_metadata_keys_with_true_values? => true)
|
706
|
+
config.inclusion_filter = :foo
|
707
|
+
config.inclusion_filter.should eq({:foo => true})
|
708
|
+
end
|
709
|
+
end
|
618
710
|
|
619
711
|
describe "#exclusion_filter" do
|
620
712
|
it "returns {} even if set to nil" do
|
@@ -655,21 +747,29 @@ module RSpec::Core
|
|
655
747
|
end
|
656
748
|
end
|
657
749
|
|
750
|
+
describe "#exclusion_filter=" do
|
751
|
+
it "treats symbols as hash keys with true values when told to" do
|
752
|
+
RSpec.configuration.stub(:treat_symbols_as_metadata_keys_with_true_values? => true)
|
753
|
+
config.exclusion_filter = :foo
|
754
|
+
config.exclusion_filter.should eq({:foo => true})
|
755
|
+
end
|
756
|
+
end
|
757
|
+
|
658
758
|
describe "line_numbers=" do
|
659
|
-
before { config.stub(:warn) }
|
759
|
+
before { config.filter_manager.stub(:warn) }
|
660
760
|
|
661
761
|
it "sets the line numbers" do
|
662
762
|
config.line_numbers = ['37']
|
663
763
|
config.filter.should eq({:line_numbers => [37]})
|
664
764
|
end
|
665
765
|
|
666
|
-
it "overrides
|
766
|
+
it "overrides filters" do
|
667
767
|
config.filter_run :focused => true
|
668
768
|
config.line_numbers = ['37']
|
669
769
|
config.filter.should eq({:line_numbers => [37]})
|
670
770
|
end
|
671
771
|
|
672
|
-
it "prevents
|
772
|
+
it "prevents subsequent filters" do
|
673
773
|
config.line_numbers = ['37']
|
674
774
|
config.filter_run :focused => true
|
675
775
|
config.filter.should eq({:line_numbers => [37]})
|
@@ -779,7 +879,9 @@ module RSpec::Core
|
|
779
879
|
describe "#add_setting" do
|
780
880
|
describe "with no modifiers" do
|
781
881
|
context "with no additional options" do
|
782
|
-
before
|
882
|
+
before do
|
883
|
+
config.add_setting :custom_option
|
884
|
+
end
|
783
885
|
|
784
886
|
it "defaults to nil" do
|
785
887
|
config.custom_option.should be_nil
|
@@ -796,7 +898,9 @@ module RSpec::Core
|
|
796
898
|
end
|
797
899
|
|
798
900
|
context "with :default => 'a value'" do
|
799
|
-
before
|
901
|
+
before do
|
902
|
+
config.add_setting :custom_option, :default => 'a value'
|
903
|
+
end
|
800
904
|
|
801
905
|
it "defaults to 'a value'" do
|
802
906
|
config.custom_option.should eq("a value")
|
@@ -824,10 +928,17 @@ module RSpec::Core
|
|
824
928
|
end
|
825
929
|
|
826
930
|
context "with :alias => " do
|
827
|
-
|
931
|
+
it "is deprecated" do
|
932
|
+
RSpec::should_receive(:warn).with(/deprecated/)
|
828
933
|
config.add_setting :custom_option
|
829
934
|
config.add_setting :another_custom_option, :alias => :custom_option
|
830
935
|
end
|
936
|
+
end
|
937
|
+
|
938
|
+
context "with :alias_with => " do
|
939
|
+
before do
|
940
|
+
config.add_setting :custom_option, :alias_with => :another_custom_option
|
941
|
+
end
|
831
942
|
|
832
943
|
it "delegates the getter to the other option" do
|
833
944
|
config.another_custom_option = "this value"
|
@@ -894,10 +1005,17 @@ module RSpec::Core
|
|
894
1005
|
|
895
1006
|
describe "#alias_example_to" do
|
896
1007
|
it_behaves_like "metadata hash builder" do
|
1008
|
+
after do
|
1009
|
+
RSpec::Core::ExampleGroup.module_eval do
|
1010
|
+
class << self
|
1011
|
+
undef :my_example_method if method_defined? :my_example_method
|
1012
|
+
end
|
1013
|
+
end
|
1014
|
+
end
|
897
1015
|
def metadata_hash(*args)
|
898
|
-
config.alias_example_to :
|
1016
|
+
config.alias_example_to :my_example_method, *args
|
899
1017
|
group = ExampleGroup.describe("group")
|
900
|
-
example = group.
|
1018
|
+
example = group.my_example_method("description")
|
901
1019
|
example.metadata
|
902
1020
|
end
|
903
1021
|
end
|
@@ -916,5 +1034,59 @@ module RSpec::Core
|
|
916
1034
|
config.formatters.should be_empty
|
917
1035
|
end
|
918
1036
|
end
|
1037
|
+
|
1038
|
+
describe '#seed' do
|
1039
|
+
it 'returns the seed as an int' do
|
1040
|
+
config.seed = '123'
|
1041
|
+
config.seed.should eq(123)
|
1042
|
+
end
|
1043
|
+
end
|
1044
|
+
|
1045
|
+
describe '#randomize?' do
|
1046
|
+
context 'with order set to :random' do
|
1047
|
+
before { config.order = :random }
|
1048
|
+
|
1049
|
+
it 'returns true' do
|
1050
|
+
config.randomize?.should be_true
|
1051
|
+
end
|
1052
|
+
end
|
1053
|
+
|
1054
|
+
context 'with order set to nil' do
|
1055
|
+
before { config.order = nil }
|
1056
|
+
|
1057
|
+
it 'returns false' do
|
1058
|
+
config.randomize?.should be_false
|
1059
|
+
end
|
1060
|
+
end
|
1061
|
+
end
|
1062
|
+
|
1063
|
+
describe '#order=' do
|
1064
|
+
context 'given "random:123"' do
|
1065
|
+
before { config.order = 'random:123' }
|
1066
|
+
|
1067
|
+
it 'sets order to "random"' do
|
1068
|
+
config.order.should eq('random')
|
1069
|
+
end
|
1070
|
+
|
1071
|
+
it 'sets seed to 123' do
|
1072
|
+
config.seed.should eq(123)
|
1073
|
+
end
|
1074
|
+
end
|
1075
|
+
|
1076
|
+
context 'given "default"' do
|
1077
|
+
before do
|
1078
|
+
config.order = 'rand:123'
|
1079
|
+
config.order = 'default'
|
1080
|
+
end
|
1081
|
+
|
1082
|
+
it "sets the order to nil" do
|
1083
|
+
config.order.should be_nil
|
1084
|
+
end
|
1085
|
+
|
1086
|
+
it "sets the seed to nil" do
|
1087
|
+
config.seed.should be_nil
|
1088
|
+
end
|
1089
|
+
end
|
1090
|
+
end
|
919
1091
|
end
|
920
1092
|
end
|