rspec-core 2.0.0.a1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.document +5 -0
- data/.gitignore +7 -0
- data/.treasure_map.rb +23 -0
- data/License.txt +22 -0
- data/README.markdown +9 -0
- data/Rakefile +76 -0
- data/TODO.markdown +16 -0
- data/VERSION +1 -0
- data/VERSION.yml +5 -0
- data/bin/rspec +12 -0
- data/cucumber.yml +2 -0
- data/example_specs/failing/README.txt +7 -0
- data/example_specs/failing/diffing_spec.rb +36 -0
- data/example_specs/failing/failing_implicit_docstrings_example.rb +19 -0
- data/example_specs/failing/failure_in_after.rb +10 -0
- data/example_specs/failing/failure_in_before.rb +10 -0
- data/example_specs/failing/mocking_example.rb +40 -0
- data/example_specs/failing/mocking_with_flexmock.rb +26 -0
- data/example_specs/failing/mocking_with_mocha.rb +25 -0
- data/example_specs/failing/mocking_with_rr.rb +27 -0
- data/example_specs/failing/partial_mock_example.rb +20 -0
- data/example_specs/failing/pending_example.rb +9 -0
- data/example_specs/failing/predicate_example.rb +34 -0
- data/example_specs/failing/raising_example.rb +47 -0
- data/example_specs/failing/spec_helper.rb +3 -0
- data/example_specs/failing/syntax_error_example.rb +7 -0
- data/example_specs/failing/team_spec.rb +44 -0
- data/example_specs/failing/timeout_behaviour.rb +7 -0
- data/example_specs/passing/custom_formatter.rb +12 -0
- data/example_specs/passing/custom_matchers.rb +54 -0
- data/example_specs/passing/dynamic_spec.rb +9 -0
- data/example_specs/passing/file_accessor.rb +19 -0
- data/example_specs/passing/file_accessor_spec.rb +38 -0
- data/example_specs/passing/filtered_formatter.rb +18 -0
- data/example_specs/passing/filtered_formatter_example.rb +31 -0
- data/example_specs/passing/greeter_spec.rb +31 -0
- data/example_specs/passing/helper_method_example.rb +14 -0
- data/example_specs/passing/implicit_docstrings_example.rb +18 -0
- data/example_specs/passing/io_processor.rb +8 -0
- data/example_specs/passing/io_processor_spec.rb +21 -0
- data/example_specs/passing/mocking_example.rb +27 -0
- data/example_specs/passing/multi_threaded_example_group_runner.rb +26 -0
- data/example_specs/passing/nested_classes_example.rb +36 -0
- data/example_specs/passing/options_example.rb +31 -0
- data/example_specs/passing/options_formatter.rb +20 -0
- data/example_specs/passing/partial_mock_example.rb +29 -0
- data/example_specs/passing/pending_example.rb +20 -0
- data/example_specs/passing/predicate_example.rb +27 -0
- data/example_specs/passing/shared_example_group_example.rb +81 -0
- data/example_specs/passing/shared_stack_examples.rb +36 -0
- data/example_specs/passing/simple_matcher_example.rb +31 -0
- data/example_specs/passing/spec_helper.rb +14 -0
- data/example_specs/passing/stack.rb +36 -0
- data/example_specs/passing/stack_spec.rb +64 -0
- data/example_specs/passing/stack_spec_with_nested_example_groups.rb +67 -0
- data/example_specs/passing/stubbing_example.rb +69 -0
- data/example_specs/passing/yielding_example.rb +33 -0
- data/example_specs/ruby1.9.compatibility/access_to_constants_spec.rb +85 -0
- data/features-pending/command_line/line_number_option.feature +56 -0
- data/features-pending/command_line/line_number_option_with_example_with_no_name.feature +22 -0
- data/features-pending/example_groups/example_group_with_should_methods.feature +29 -0
- data/features-pending/example_groups/implicit_docstrings.feature +59 -0
- data/features-pending/example_groups/nested_groups.feature +32 -0
- data/features-pending/expectations/expect_change.feature +65 -0
- data/features-pending/expectations/expect_error.feature +44 -0
- data/features-pending/extensions/custom_example_group.feature +19 -0
- data/features-pending/formatters/custom_formatter.feature +30 -0
- data/features-pending/heckle/heckle.feature +56 -0
- data/features-pending/interop/examples_and_tests_together.feature +80 -0
- data/features-pending/interop/rspec_output.feature +25 -0
- data/features-pending/interop/test_but_not_test_unit.feature +26 -0
- data/features-pending/interop/test_case_with_should_methods.feature +46 -0
- data/features-pending/matchers/define_diffable_matcher.feature +26 -0
- data/features-pending/matchers/define_matcher.feature +179 -0
- data/features-pending/matchers/define_matcher_with_fluent_interface.feature +27 -0
- data/features-pending/mocks/mix_stubs_and_mocks.feature +22 -0
- data/features-pending/mocks/stub_implementation.feature +26 -0
- data/features-pending/pending/pending_examples.feature +81 -0
- data/features-pending/runner/specify_line_number.feature +32 -0
- data/features/before_and_after_blocks/before_and_after_blocks.feature +169 -0
- data/features/expectations/customized_message.feature +54 -0
- data/features/matchers/define_matcher_outside_rspec.feature +39 -0
- data/features/mock_framework_integration/use_flexmock.feature +23 -0
- data/features/mock_framework_integration/use_mocha.feature +23 -0
- data/features/mock_framework_integration/use_rr.feature +23 -0
- data/features/mock_framework_integration/use_rspec.feature +23 -0
- data/features/step_definitions/running_rspec_steps.rb +35 -0
- data/features/subject/explicit_subject.feature +31 -0
- data/features/subject/implicit_subject.feature +31 -0
- data/features/support/env.rb +82 -0
- data/features/support/matchers/smart_match.rb +14 -0
- data/lib/rspec/autorun.rb +2 -0
- data/lib/rspec/core.rb +38 -0
- data/lib/rspec/core/backward_compatibility.rb +9 -0
- data/lib/rspec/core/command_line_options.rb +60 -0
- data/lib/rspec/core/configuration.rb +222 -0
- data/lib/rspec/core/deprecation.rb +47 -0
- data/lib/rspec/core/example.rb +113 -0
- data/lib/rspec/core/example_group.rb +239 -0
- data/lib/rspec/core/example_group_subject.rb +77 -0
- data/lib/rspec/core/formatters.rb +16 -0
- data/lib/rspec/core/formatters/base_formatter.rb +123 -0
- data/lib/rspec/core/formatters/base_text_formatter.rb +139 -0
- data/lib/rspec/core/formatters/documentation_formatter.rb +84 -0
- data/lib/rspec/core/formatters/progress_formatter.rb +36 -0
- data/lib/rspec/core/kernel_extensions.rb +15 -0
- data/lib/rspec/core/mocking/with_absolutely_nothing.rb +13 -0
- data/lib/rspec/core/mocking/with_flexmock.rb +25 -0
- data/lib/rspec/core/mocking/with_mocha.rb +22 -0
- data/lib/rspec/core/mocking/with_rr.rb +26 -0
- data/lib/rspec/core/mocking/with_rspec.rb +21 -0
- data/lib/rspec/core/rake_task.rb +88 -0
- data/lib/rspec/core/runner.rb +66 -0
- data/lib/rspec/core/shared_behaviour.rb +41 -0
- data/lib/rspec/core/shared_behaviour_kernel_extensions.rb +31 -0
- data/lib/rspec/core/version.rb +16 -0
- data/lib/rspec/core/world.rb +105 -0
- data/rspec-core.gemspec +204 -0
- data/script/console +8 -0
- data/spec/resources/example_classes.rb +67 -0
- data/spec/rspec/core/command_line_options_spec.rb +63 -0
- data/spec/rspec/core/configuration_spec.rb +171 -0
- data/spec/rspec/core/example_group_spec.rb +351 -0
- data/spec/rspec/core/example_group_subject_spec.rb +67 -0
- data/spec/rspec/core/example_spec.rb +67 -0
- data/spec/rspec/core/formatters/base_formatter_spec.rb +105 -0
- data/spec/rspec/core/formatters/documentation_formatter_spec.rb +5 -0
- data/spec/rspec/core/formatters/progress_formatter_spec.rb +29 -0
- data/spec/rspec/core/kernel_extensions_spec.rb +13 -0
- data/spec/rspec/core/mocha_spec.rb +29 -0
- data/spec/rspec/core/resources/a_bar.rb +0 -0
- data/spec/rspec/core/resources/a_foo.rb +0 -0
- data/spec/rspec/core/resources/a_spec.rb +1 -0
- data/spec/rspec/core/resources/custom_example_group_runner.rb +14 -0
- data/spec/rspec/core/resources/example_classes.rb +67 -0
- data/spec/rspec/core/resources/utf8_encoded.rb +8 -0
- data/spec/rspec/core/runner_spec.rb +34 -0
- data/spec/rspec/core/shared_behaviour_spec.rb +185 -0
- data/spec/rspec/core/world_spec.rb +167 -0
- data/spec/rspec/core_spec.rb +35 -0
- data/spec/ruby_forker.rb +13 -0
- data/spec/spec_helper.rb +72 -0
- metadata +219 -0
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
require 'spec/spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Rspec::Core::SharedBehaviour do
|
|
4
|
+
|
|
5
|
+
it "should add the 'share_examples_for' method to the global namespace" do
|
|
6
|
+
Kernel.should respond_to(:share_examples_for)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
it "should add the 'shared_examples_for' method to the global namespace" do
|
|
10
|
+
Kernel.should respond_to(:shared_examples_for)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "should add the 'share_as' method to the global namespace" do
|
|
14
|
+
Kernel.should respond_to(:share_as)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "should raise an ArgumentError when adding a second shared behaviour with the same name" do
|
|
18
|
+
group = double_describe('example group')
|
|
19
|
+
group.share_examples_for('really important business value') { }
|
|
20
|
+
lambda do
|
|
21
|
+
group.share_examples_for('really important business value') { }
|
|
22
|
+
end.should raise_error(ArgumentError, "Shared example group 'really important business value' already exists")
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
describe "share_examples_for" do
|
|
26
|
+
|
|
27
|
+
it "should capture the given name and block in the Worlds collection of shared behaviours" do
|
|
28
|
+
Rspec::Core.world.shared_behaviours.expects(:[]=).with(:foo, anything)
|
|
29
|
+
share_examples_for(:foo) { }
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
describe "including shared behaviours using #it_should_behave_like" do
|
|
35
|
+
|
|
36
|
+
def cleanup_shared_behaviours
|
|
37
|
+
original_shared_behaviours = Rspec::Core.world.shared_behaviours
|
|
38
|
+
yield if block_given?
|
|
39
|
+
Rspec::Core.world.shared_behaviours.replace(original_shared_behaviours)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "should module_eval any found shared behaviours" do
|
|
43
|
+
group = double_describe('fake group')
|
|
44
|
+
block1 = lambda {}
|
|
45
|
+
block2 = lambda {
|
|
46
|
+
def extra_helper
|
|
47
|
+
'extra_helper'
|
|
48
|
+
end
|
|
49
|
+
}
|
|
50
|
+
Rspec::Core.world.stubs(:shared_behaviours).returns({ :a => block1, :shared_behaviour => block2 })
|
|
51
|
+
group.expects(:module_eval).once
|
|
52
|
+
group.it_should_behave_like :shared_behaviour
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it "should make any shared behaviour available at the correct level" do
|
|
56
|
+
group = double_describe('fake group')
|
|
57
|
+
block = lambda {
|
|
58
|
+
def self.class_helper; end
|
|
59
|
+
def extra_helper; end
|
|
60
|
+
}
|
|
61
|
+
Rspec::Core.world.stubs(:shared_behaviours).returns({ :shared_behaviour => block })
|
|
62
|
+
group.it_should_behave_like :shared_behaviour
|
|
63
|
+
with_ruby(1.8) do
|
|
64
|
+
group.instance_methods.should include('extra_helper')
|
|
65
|
+
group.singleton_methods.should include('class_helper')
|
|
66
|
+
end
|
|
67
|
+
with_ruby(1.9) do
|
|
68
|
+
group.instance_methods.should include(:extra_helper)
|
|
69
|
+
group.singleton_methods.should include(:class_helper)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it "should raise when named shared example_group can not be found"
|
|
74
|
+
|
|
75
|
+
it "adds examples to current example_group using it_should_behave_like" do
|
|
76
|
+
cleanup_shared_behaviours do
|
|
77
|
+
group = double_describe("example_group") do |g|
|
|
78
|
+
g.it("i was already here") {}
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
group.examples.size.should == 1
|
|
82
|
+
|
|
83
|
+
group.share_examples_for('shared example_group') do
|
|
84
|
+
it("shared example") {}
|
|
85
|
+
it("shared example 2") {}
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
group.it_should_behave_like("shared example_group")
|
|
89
|
+
|
|
90
|
+
group.examples.size.should == 3
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
it "adds examples to from two shared groups" do
|
|
95
|
+
cleanup_shared_behaviours do
|
|
96
|
+
group = double_describe("example_group") do |g|
|
|
97
|
+
g.it("i was already here") {}
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
group.examples.size.should == 1
|
|
101
|
+
|
|
102
|
+
group.share_examples_for('test 2 shared groups') do
|
|
103
|
+
it("shared example") {}
|
|
104
|
+
it("shared example 2") {}
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
group.share_examples_for('test 2 shared groups 2') do
|
|
108
|
+
it("shared example 3") {}
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
group.it_should_behave_like("test 2 shared groups")
|
|
112
|
+
group.it_should_behave_like("test 2 shared groups 2")
|
|
113
|
+
|
|
114
|
+
group.examples.size.should == 4
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
share_as('Cornucopia') do
|
|
119
|
+
it "should do foo"
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
it "adds examples to current example_group using include", :compat => 'rspec-1.2' do
|
|
123
|
+
group = double_describe('group') { include Cornucopia }
|
|
124
|
+
group.should have(1).example
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
it "adds examples to current example_group using it_should_behave_like with a module" do
|
|
128
|
+
cleanup_shared_behaviours do
|
|
129
|
+
group = double_describe("example_group") {}
|
|
130
|
+
|
|
131
|
+
shared_foo = group.share_as(:FooShared) do
|
|
132
|
+
it("shared example") {}
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
group.it_should_behave_like(::FooShared)
|
|
136
|
+
|
|
137
|
+
group.examples.size.should == 1
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
describe "running shared examples" do
|
|
142
|
+
module RunningSharedExamplesJustForTesting; end
|
|
143
|
+
|
|
144
|
+
share_examples_for("it runs shared examples") do
|
|
145
|
+
include RunningSharedExamplesJustForTesting
|
|
146
|
+
|
|
147
|
+
def magic
|
|
148
|
+
@magic ||= {}
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
before(:each) { magic[:before_each] = 'each' }
|
|
152
|
+
after(:each) { magic[:after_each] = 'each' }
|
|
153
|
+
before(:all) { magic[:before_all] = 'all' }
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
it_should_behave_like "it runs shared examples"
|
|
157
|
+
|
|
158
|
+
it "runs before(:each) from shared example_group", :compat => 'rspec-1.2' do
|
|
159
|
+
magic[:before_each].should == 'each'
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
it "runs after(:each) from shared example_group", :compat => 'rspec-1.2'
|
|
163
|
+
|
|
164
|
+
it "should run before(:all) only once from shared example_group", :compat => 'rspec-1.2' do
|
|
165
|
+
magic[:before_all].should == 'all'
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
it "should run after(:all) only once from shared example_group", :compat => 'rspec-1.2'
|
|
169
|
+
|
|
170
|
+
it "should include modules, included into shared example_group, into current example_group", :compat => 'rspec-1.2' do
|
|
171
|
+
running_example.behaviour.included_modules.should include(RunningSharedExamplesJustForTesting)
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
it "should make methods defined in the shared example_group available in consuming example_group", :compat => 'rspec-1.2' do
|
|
175
|
+
# TODO: Consider should have_method(...) simple matcher
|
|
176
|
+
with_ruby('1.8') { running_example.behaviour.methods.should include('magic') }
|
|
177
|
+
with_ruby('1.9') { running_example.behaviour.methods.should include(:magic) }
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
end
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
require 'spec/spec_helper'
|
|
2
|
+
|
|
3
|
+
class Bar; end
|
|
4
|
+
class Foo; end
|
|
5
|
+
|
|
6
|
+
describe Rspec::Core::World do
|
|
7
|
+
|
|
8
|
+
before do
|
|
9
|
+
@world = Rspec::Core::World.new
|
|
10
|
+
Rspec::Core.stubs(:world).returns(@world)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
describe "behaviour groups" do
|
|
14
|
+
|
|
15
|
+
it "should contain all defined behaviour groups" do
|
|
16
|
+
behaviour_group = Rspec::Core::ExampleGroup.describe(Bar, 'Empty Behaviour Group') { }
|
|
17
|
+
@world.behaviours.should include(behaviour_group)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
describe "applying inclusion filters" do
|
|
23
|
+
|
|
24
|
+
before(:all) do
|
|
25
|
+
options_1 = { :foo => 1, :color => 'blue', :feature => 'reporting' }
|
|
26
|
+
options_2 = { :pending => true, :feature => 'reporting' }
|
|
27
|
+
options_3 = { :array => [1,2,3,4], :color => 'blue', :feature => 'weather status' }
|
|
28
|
+
@bg1 = Rspec::Core::ExampleGroup.describe(Bar, "find group-1", options_1) { }
|
|
29
|
+
@bg2 = Rspec::Core::ExampleGroup.describe(Bar, "find group-2", options_2) { }
|
|
30
|
+
@bg3 = Rspec::Core::ExampleGroup.describe(Bar, "find group-3", options_3) { }
|
|
31
|
+
@bg4 = Rspec::Core::ExampleGroup.describe(Foo, "find these examples") do
|
|
32
|
+
it('I have no options') {}
|
|
33
|
+
it("this is awesome", :awesome => true) {}
|
|
34
|
+
it("this is too", :awesome => true) {}
|
|
35
|
+
it("not so awesome", :awesome => false) {}
|
|
36
|
+
it("I also have no options") {}
|
|
37
|
+
end
|
|
38
|
+
@behaviours = [@bg1, @bg2, @bg3, @bg4]
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
after(:all) do
|
|
42
|
+
Rspec::Core.world.behaviours.delete(@bg1)
|
|
43
|
+
Rspec::Core.world.behaviours.delete(@bg2)
|
|
44
|
+
Rspec::Core.world.behaviours.delete(@bg3)
|
|
45
|
+
Rspec::Core.world.behaviours.delete(@bg4)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it "should find awesome examples" do
|
|
49
|
+
@world.apply_inclusion_filters(@bg4.examples, :awesome => true).should == [@bg4.examples[1], @bg4.examples[2]]
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it "should find no groups when given no search parameters" do
|
|
53
|
+
@world.apply_inclusion_filters([]).should == []
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it "should find three groups when searching for :behaviour_describes => Bar" do
|
|
57
|
+
@world.apply_inclusion_filters(@behaviours, :behaviour => { :describes => Bar }).should == [@bg1, @bg2, @bg3]
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it "should find one group when searching for :description => 'find group-1'" do
|
|
61
|
+
@world.apply_inclusion_filters(@behaviours, :behaviour => { :description => 'find group-1' }).should == [@bg1]
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it "should find two groups when searching for :description => lambda { |v| v.include?('-1') || v.include?('-3') }" do
|
|
65
|
+
@world.apply_inclusion_filters(@behaviours, :behaviour => { :description => lambda { |v| v.include?('-1') || v.include?('-3') } }).should == [@bg1, @bg3]
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it "should find three groups when searching for :description => /find group/" do
|
|
69
|
+
@world.apply_inclusion_filters(@behaviours, :behaviour => { :description => /find group/ }).should == [@bg1, @bg2, @bg3]
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it "should find one group when searching for :foo => 1" do
|
|
73
|
+
@world.apply_inclusion_filters(@behaviours, :foo => 1 ).should == [@bg1]
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it "should find one group when searching for :pending => true" do
|
|
77
|
+
@world.apply_inclusion_filters(@behaviours, :pending => true ).should == [@bg2]
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it "should find one group when searching for :array => [1,2,3,4]" do
|
|
81
|
+
@world.apply_inclusion_filters(@behaviours, :array => [1,2,3,4]).should == [@bg3]
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it "should find no group when searching for :array => [4,3,2,1]" do
|
|
85
|
+
@world.apply_inclusion_filters(@behaviours, :array => [4,3,2,1]).should be_empty
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
it "should find two groups when searching for :color => 'blue'" do
|
|
89
|
+
@world.apply_inclusion_filters(@behaviours, :color => 'blue').should == [@bg1, @bg3]
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it "should find two groups when searching for :feature => 'reporting' }" do
|
|
93
|
+
@world.apply_inclusion_filters(@behaviours, :feature => 'reporting').should == [@bg1, @bg2]
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
describe "applying exclusion filters" do
|
|
99
|
+
|
|
100
|
+
it "should find nothing if all describes match the exclusion filter" do
|
|
101
|
+
options = { :network_access => true }
|
|
102
|
+
|
|
103
|
+
isolate_behaviour do
|
|
104
|
+
group1 = Rspec::Core::ExampleGroup.describe(Bar, "find group-1", options) do
|
|
105
|
+
it("foo") {}
|
|
106
|
+
it("bar") {}
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
@world.apply_exclusion_filters(group1.examples, :network_access => true).should == []
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
isolate_behaviour do
|
|
113
|
+
group2 = Rspec::Core::ExampleGroup.describe(Bar, "find group-1") do
|
|
114
|
+
it("foo", :network_access => true) {}
|
|
115
|
+
it("bar") {}
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
@world.apply_exclusion_filters(group2.examples, :network_access => true).should == [group2.examples.last]
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
it "should find nothing if a regexp matches the exclusion filter" do
|
|
124
|
+
isolate_behaviour do
|
|
125
|
+
group = Rspec::Core::ExampleGroup.describe(Bar, "find group-1", :name => "exclude me with a regex", :another => "foo") do
|
|
126
|
+
it("foo") {}
|
|
127
|
+
it("bar") {}
|
|
128
|
+
end
|
|
129
|
+
@world.apply_exclusion_filters(group.examples, :name => /exclude/).should == []
|
|
130
|
+
@world.apply_exclusion_filters(group.examples, :name => /exclude/, :another => "foo").should == []
|
|
131
|
+
@world.apply_exclusion_filters(group.examples, :name => /exclude/, :another => "foo", :behaviour => {
|
|
132
|
+
:describes => lambda { |b| b == Bar } } ).should == []
|
|
133
|
+
|
|
134
|
+
@world.apply_exclusion_filters(group.examples, :name => /exclude not/).should == group.examples
|
|
135
|
+
@world.apply_exclusion_filters(group.examples, :name => /exclude/, "another_condition" => "foo").should == group.examples
|
|
136
|
+
@world.apply_exclusion_filters(group.examples, :name => /exclude/, "another_condition" => "foo1").should == group.examples
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
describe "filtering behaviours" do
|
|
143
|
+
|
|
144
|
+
before(:all) do
|
|
145
|
+
@group1 = Rspec::Core::ExampleGroup.describe(Bar, "find these examples") do
|
|
146
|
+
it('I have no options', :color => :red, :awesome => true) {}
|
|
147
|
+
it("I also have no options", :color => :red, :awesome => true) {}
|
|
148
|
+
it("not so awesome", :color => :red, :awesome => false) {}
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
after(:all) do
|
|
153
|
+
Rspec::Core.world.behaviours.delete(@group1)
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
it "should run matches" do
|
|
157
|
+
Rspec::Core.world.stubs(:exclusion_filter).returns({ :awesome => false })
|
|
158
|
+
Rspec::Core.world.stubs(:filter).returns({ :color => :red })
|
|
159
|
+
Rspec::Core.world.stubs(:behaviours).returns([@group1])
|
|
160
|
+
filtered_behaviours = @world.filter_behaviours
|
|
161
|
+
filtered_behaviours.should == [@group1]
|
|
162
|
+
@group1.examples_to_run.should == @group1.examples[0..1]
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require 'spec/spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Rspec::Core do
|
|
4
|
+
|
|
5
|
+
describe "#configuration" do
|
|
6
|
+
|
|
7
|
+
it "should return an instance of Rspec::Core::Configuration" do
|
|
8
|
+
Rspec::Core.configuration.should be_an_instance_of(Rspec::Core::Configuration)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
describe "#configure" do
|
|
14
|
+
|
|
15
|
+
it "should yield the current configuration" do
|
|
16
|
+
Rspec::Core.configure do |config|
|
|
17
|
+
config.should == Rspec::Core.configuration
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "should be callable without a block" do
|
|
22
|
+
lambda { Rspec::Core.configure }.should_not raise_error
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
describe "#world" do
|
|
28
|
+
|
|
29
|
+
it "should return the Rspec::Core::World instance the current run is using" do
|
|
30
|
+
Rspec::Core.world.should be_instance_of(Rspec::Core::World)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
data/spec/ruby_forker.rb
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require 'rbconfig'
|
|
2
|
+
|
|
3
|
+
module RubyForker
|
|
4
|
+
# Forks a ruby interpreter with same type as ourself.
|
|
5
|
+
# juby will fork jruby, ruby will fork ruby etc.
|
|
6
|
+
def ruby(args, stderr=nil)
|
|
7
|
+
config = ::Config::CONFIG
|
|
8
|
+
interpreter = File::join(config['bindir'], config['ruby_install_name']) + config['EXEEXT']
|
|
9
|
+
cmd = "#{interpreter} #{args}"
|
|
10
|
+
cmd << " 2> #{stderr}" unless stderr.nil?
|
|
11
|
+
`#{cmd}`
|
|
12
|
+
end
|
|
13
|
+
end
|
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
dir = File.dirname(__FILE__)
|
|
2
|
+
lib_path = File.expand_path("#{dir}/../lib")
|
|
3
|
+
$LOAD_PATH.unshift lib_path unless $LOAD_PATH.include?(lib_path)
|
|
4
|
+
|
|
5
|
+
require 'rubygems'
|
|
6
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '/../../expectations/lib'))
|
|
7
|
+
require 'rspec/expectations'
|
|
8
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '/../../mocks/lib'))
|
|
9
|
+
require 'rspec/mocks'
|
|
10
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
11
|
+
require 'rspec/core'
|
|
12
|
+
|
|
13
|
+
Rspec::Core::ExampleGroup.send(:include, Rspec::Matchers)
|
|
14
|
+
|
|
15
|
+
def with_ruby(version)
|
|
16
|
+
yield if RUBY_PLATFORM =~ Regexp.compile("^#{version}")
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
require 'rubygems'
|
|
20
|
+
require 'mocha'
|
|
21
|
+
|
|
22
|
+
require File.expand_path(File.dirname(__FILE__) + "/resources/example_classes")
|
|
23
|
+
|
|
24
|
+
module Rspec
|
|
25
|
+
module Core
|
|
26
|
+
module Matchers
|
|
27
|
+
def fail
|
|
28
|
+
raise_error(::Rspec::Expectations::ExpectationNotMetError)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def fail_with(message)
|
|
32
|
+
raise_error(::Rspec::Expectations::ExpectationNotMetError, message)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def remove_last_describe_from_world
|
|
39
|
+
Rspec::Core.world.behaviours.pop
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def isolate_behaviour
|
|
43
|
+
if block_given?
|
|
44
|
+
yield
|
|
45
|
+
Rspec::Core.world.behaviours.pop
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def double_describe(*args)
|
|
50
|
+
group = Rspec::Core::ExampleGroup.describe(*args) {}
|
|
51
|
+
remove_last_describe_from_world
|
|
52
|
+
yield group if block_given?
|
|
53
|
+
group
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def use_formatter(new_formatter)
|
|
57
|
+
original_formatter = Rspec::Core.configuration.formatter
|
|
58
|
+
Rspec::Core.configuration.instance_variable_set(:@formatter, new_formatter)
|
|
59
|
+
yield
|
|
60
|
+
ensure
|
|
61
|
+
Rspec::Core.configuration.instance_variable_set(:@formatter, original_formatter)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def not_in_editor?
|
|
65
|
+
!(ENV.has_key?('TM_MODE') || ENV.has_key?('EMACS') || ENV.has_key?('VIM'))
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
Rspec::Core.configure do |c|
|
|
69
|
+
c.mock_framework = :mocha
|
|
70
|
+
c.filter_run :focused => true
|
|
71
|
+
c.color_enabled = not_in_editor?
|
|
72
|
+
end
|