rspec-core 2.0.0.a5 → 2.0.0.a6
Sign up to get free protection for your applications and to get access to all the features.
- data/example_specs/failing/diffing_spec.rb +3 -1
- data/example_specs/spec_helper.rb +1 -1
- data/features/configuration/spec_opts.feature +7 -7
- data/features/example_groups/describe_aliases.feature +1 -1
- data/features/example_groups/nested_groups.feature +3 -6
- data/features/{before_and_after_blocks/around.feature → hooks/around_hook.feature} +1 -1
- data/features/{before_and_after_blocks/before_and_after_blocks.feature → hooks/before_and_after_hooks.feature} +3 -3
- data/features/hooks/halt.feature +27 -0
- data/features/mock_framework_integration/use_flexmock.feature +1 -1
- data/features/mock_framework_integration/use_mocha.feature +1 -1
- data/features/mock_framework_integration/use_rr.feature +1 -1
- data/features/mock_framework_integration/use_rspec.feature +1 -1
- data/features/mocks/block_local_expectations.feature +2 -2
- data/features/mocks/mix_stubs_and_mocks.feature +1 -1
- data/lib/rspec/core.rb +6 -0
- data/lib/rspec/core/around_proxy.rb +14 -0
- data/lib/rspec/core/deprecation.rb +25 -26
- data/lib/rspec/core/example.rb +11 -21
- data/lib/rspec/core/example_group.rb +27 -22
- data/lib/rspec/core/runner.rb +12 -12
- data/lib/rspec/core/version.rb +1 -1
- data/rspec-core.gemspec +13 -11
- data/spec/rspec/core/configuration_spec.rb +2 -4
- data/spec/rspec/core/example_group_spec.rb +263 -292
- data/spec/rspec/core/example_group_subject_spec.rb +26 -31
- data/spec/rspec/core/mocha_spec.rb +8 -10
- data/spec/rspec/core/pending_example_spec.rb +1 -1
- data/spec/rspec/core/runner_spec.rb +2 -2
- data/spec/rspec/core/shared_example_group_spec.rb +120 -129
- data/spec/rspec/core/world_spec.rb +111 -116
- data/spec/rspec/core_spec.rb +2 -2
- data/spec/spec_helper.rb +2 -23
- metadata +9 -7
data/lib/rspec/core/runner.rb
CHANGED
@@ -17,7 +17,7 @@ module Rspec
|
|
17
17
|
Rspec::Core.configuration
|
18
18
|
end
|
19
19
|
|
20
|
-
def
|
20
|
+
def reporter
|
21
21
|
configuration.formatter
|
22
22
|
end
|
23
23
|
|
@@ -32,28 +32,28 @@ module Rspec
|
|
32
32
|
|
33
33
|
total_examples_to_run = Rspec::Core.world.total_examples_to_run
|
34
34
|
|
35
|
-
old_sync,
|
35
|
+
old_sync, reporter.output.sync = reporter.output.sync, true if reporter.output.respond_to?(:sync=)
|
36
36
|
|
37
37
|
suite_success = true
|
38
38
|
|
39
|
-
|
40
|
-
old_sync,
|
39
|
+
reporter_supports_sync = reporter.output.respond_to?(:sync=)
|
40
|
+
old_sync, reporter.output.sync = reporter.output.sync, true if reporter_supports_sync
|
41
41
|
|
42
|
-
|
42
|
+
reporter.start(total_examples_to_run) # start the clock
|
43
43
|
start = Time.now
|
44
44
|
|
45
45
|
Rspec::Core.world.example_groups_to_run.each do |example_group|
|
46
|
-
suite_success &= example_group.run(
|
46
|
+
suite_success &= example_group.run(reporter)
|
47
47
|
end
|
48
48
|
|
49
|
-
|
49
|
+
reporter.start_dump(Time.now - start)
|
50
50
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
51
|
+
reporter.dump_failures
|
52
|
+
reporter.dump_summary
|
53
|
+
reporter.dump_pending
|
54
|
+
reporter.close
|
55
55
|
|
56
|
-
|
56
|
+
reporter.output.sync = old_sync if reporter_supports_sync
|
57
57
|
|
58
58
|
suite_success
|
59
59
|
end
|
data/lib/rspec/core/version.rb
CHANGED
data/rspec-core.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{rspec-core}
|
8
|
-
s.version = "2.0.0.
|
8
|
+
s.version = "2.0.0.a6"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Chad Humphries", "David Chelimsky"]
|
12
|
-
s.date = %q{2010-02-
|
12
|
+
s.date = %q{2010-02-15}
|
13
13
|
s.default_executable = %q{rspec}
|
14
14
|
s.description = %q{Rspec runner and example group classes}
|
15
15
|
s.email = %q{dchelimsky@gmail.com;chad.humphries@gmail.com}
|
@@ -91,8 +91,6 @@ Gem::Specification.new do |s|
|
|
91
91
|
"features-pending/mocks/stub_implementation.feature",
|
92
92
|
"features-pending/pending/pending_examples.feature",
|
93
93
|
"features-pending/runner/specify_line_number.feature",
|
94
|
-
"features/before_and_after_blocks/around.feature",
|
95
|
-
"features/before_and_after_blocks/before_and_after_blocks.feature",
|
96
94
|
"features/command_line/example_name_option.feature",
|
97
95
|
"features/command_line/line_number_appended_to_path.feature",
|
98
96
|
"features/command_line/line_number_option.feature",
|
@@ -100,6 +98,9 @@ Gem::Specification.new do |s|
|
|
100
98
|
"features/example_groups/describe_aliases.feature",
|
101
99
|
"features/example_groups/nested_groups.feature",
|
102
100
|
"features/expectations/customized_message.feature",
|
101
|
+
"features/hooks/around_hook.feature",
|
102
|
+
"features/hooks/before_and_after_hooks.feature",
|
103
|
+
"features/hooks/halt.feature",
|
103
104
|
"features/matchers/define_matcher.feature",
|
104
105
|
"features/matchers/define_matcher_outside_rspec.feature",
|
105
106
|
"features/mock_framework_integration/use_flexmock.feature",
|
@@ -116,6 +117,7 @@ Gem::Specification.new do |s|
|
|
116
117
|
"lib/rspec/autorun.rb",
|
117
118
|
"lib/rspec/core.rb",
|
118
119
|
"lib/rspec/core/advice.rb",
|
120
|
+
"lib/rspec/core/around_proxy.rb",
|
119
121
|
"lib/rspec/core/backward_compatibility.rb",
|
120
122
|
"lib/rspec/core/command_line_options.rb",
|
121
123
|
"lib/rspec/core/configuration.rb",
|
@@ -176,7 +178,7 @@ Gem::Specification.new do |s|
|
|
176
178
|
s.require_paths = ["lib"]
|
177
179
|
s.rubyforge_project = %q{rspec}
|
178
180
|
s.rubygems_version = %q{1.3.5}
|
179
|
-
s.summary = %q{rspec-core 2.0.0.
|
181
|
+
s.summary = %q{rspec-core 2.0.0.a6}
|
180
182
|
s.test_files = [
|
181
183
|
"spec/rspec/core/command_line_options_spec.rb",
|
182
184
|
"spec/rspec/core/configuration_spec.rb",
|
@@ -209,17 +211,17 @@ Gem::Specification.new do |s|
|
|
209
211
|
s.specification_version = 3
|
210
212
|
|
211
213
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
212
|
-
s.add_development_dependency(%q<rspec-expectations>, [">= 2.0.0.
|
213
|
-
s.add_development_dependency(%q<rspec-mocks>, [">= 2.0.0.
|
214
|
+
s.add_development_dependency(%q<rspec-expectations>, [">= 2.0.0.a6"])
|
215
|
+
s.add_development_dependency(%q<rspec-mocks>, [">= 2.0.0.a6"])
|
214
216
|
s.add_development_dependency(%q<cucumber>, [">= 0.5.3"])
|
215
217
|
else
|
216
|
-
s.add_dependency(%q<rspec-expectations>, [">= 2.0.0.
|
217
|
-
s.add_dependency(%q<rspec-mocks>, [">= 2.0.0.
|
218
|
+
s.add_dependency(%q<rspec-expectations>, [">= 2.0.0.a6"])
|
219
|
+
s.add_dependency(%q<rspec-mocks>, [">= 2.0.0.a6"])
|
218
220
|
s.add_dependency(%q<cucumber>, [">= 0.5.3"])
|
219
221
|
end
|
220
222
|
else
|
221
|
-
s.add_dependency(%q<rspec-expectations>, [">= 2.0.0.
|
222
|
-
s.add_dependency(%q<rspec-mocks>, [">= 2.0.0.
|
223
|
+
s.add_dependency(%q<rspec-expectations>, [">= 2.0.0.a6"])
|
224
|
+
s.add_dependency(%q<rspec-mocks>, [">= 2.0.0.a6"])
|
223
225
|
s.add_dependency(%q<cucumber>, [">= 0.5.3"])
|
224
226
|
end
|
225
227
|
end
|
@@ -133,7 +133,7 @@ describe Rspec::Core::Configuration do
|
|
133
133
|
it "should include the given module into each matching example group" do
|
134
134
|
Rspec::Core.configuration.include(InstanceLevelMethods, :magic_key => :include)
|
135
135
|
|
136
|
-
group =
|
136
|
+
group = Rspec::Core::ExampleGroup.create('does like, stuff and junk', :magic_key => :include) { }
|
137
137
|
group.should_not respond_to(:you_call_this_a_blt?)
|
138
138
|
group.new.you_call_this_a_blt?.should == "egad man, where's the mayo?!?!?"
|
139
139
|
end
|
@@ -151,10 +151,8 @@ describe Rspec::Core::Configuration do
|
|
151
151
|
|
152
152
|
it "should extend the given module into each matching example group" do
|
153
153
|
Rspec::Core.configuration.extend(ThatThingISentYou, :magic_key => :extend)
|
154
|
-
group = Rspec::Core::ExampleGroup.
|
155
|
-
|
154
|
+
group = Rspec::Core::ExampleGroup.create(ThatThingISentYou, :magic_key => :extend) { }
|
156
155
|
group.should respond_to(:that_thing)
|
157
|
-
remove_last_example_group_from_world
|
158
156
|
end
|
159
157
|
|
160
158
|
end
|
@@ -1,414 +1,385 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
|
3
|
+
module Rspec::Core
|
4
4
|
|
5
|
-
describe
|
5
|
+
describe ExampleGroup do
|
6
6
|
|
7
|
-
|
8
|
-
lambda { Rspec::Core::ExampleGroup.describe() {} }.should raise_error(ArgumentError, "No arguments given. You must a least supply a type or description")
|
9
|
-
end
|
7
|
+
describe "#describe" do
|
10
8
|
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
it "raises an ArgumentError if no type or description is given" do
|
10
|
+
lambda { ExampleGroup.describe() {} }.should raise_error(ArgumentError, "No arguments given. You must a least supply a type or description")
|
11
|
+
end
|
14
12
|
|
15
|
-
|
13
|
+
it "raises an ArgumentError if no block is given" do
|
14
|
+
lambda { ExampleGroup.describe('foo') }.should raise_error(ArgumentError, "You must supply a block when calling describe")
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
16
18
|
|
17
|
-
|
19
|
+
describe '#name' do
|
18
20
|
|
19
|
-
|
20
|
-
|
21
|
-
Rspec::Core::ExampleGroup.describe("my favorite pony") { }.name.should == 'my favorite pony'
|
21
|
+
it "uses the first parameter as name" do
|
22
|
+
ExampleGroup.create("my favorite pony") { }.name.should == 'my favorite pony'
|
22
23
|
end
|
23
|
-
end
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
Rspec::Core::ExampleGroup.describe(Object) { }.name.should == 'Object'
|
25
|
+
it "accepts a constant as the first parameter" do
|
26
|
+
ExampleGroup.create(Object) { }.name.should == 'Object'
|
28
27
|
end
|
29
|
-
end
|
30
28
|
|
31
|
-
|
32
|
-
|
33
|
-
|
29
|
+
it "concats nested names" do
|
30
|
+
group = ExampleGroup.create(Object, 'test') {}
|
31
|
+
group.name.should == 'Object test'
|
34
32
|
|
35
|
-
|
36
|
-
|
33
|
+
nested_group_one = group.describe('nested one') { }
|
34
|
+
nested_group_one.name.should == 'Object test nested one'
|
37
35
|
|
38
|
-
|
39
|
-
|
40
|
-
|
36
|
+
nested_group_two = nested_group_one.describe('nested two') { }
|
37
|
+
nested_group_two.name.should == 'Object test nested one nested two'
|
38
|
+
end
|
41
39
|
|
42
|
-
|
40
|
+
end
|
43
41
|
|
44
|
-
|
42
|
+
describe '#describes' do
|
45
43
|
|
46
|
-
|
44
|
+
context "with a constant as the first parameter" do
|
47
45
|
|
48
|
-
|
49
|
-
|
50
|
-
Rspec::Core::ExampleGroup.describe(Object) { }.describes.should == Object
|
46
|
+
it "is that constant" do
|
47
|
+
ExampleGroup.create(Object) { }.describes.should == Object
|
51
48
|
end
|
52
|
-
end
|
53
49
|
|
54
|
-
|
50
|
+
end
|
55
51
|
|
56
|
-
|
52
|
+
context "with a string as the first parameter" do
|
57
53
|
|
58
|
-
|
59
|
-
|
60
|
-
Rspec::Core::ExampleGroup.describe("i'm a computer") { }.describes.should be_nil
|
54
|
+
it "is nil" do
|
55
|
+
ExampleGroup.create("i'm a computer") { }.describes.should be_nil
|
61
56
|
end
|
57
|
+
|
62
58
|
end
|
63
59
|
|
64
60
|
end
|
65
61
|
|
66
|
-
|
67
|
-
|
68
|
-
describe '#description' do
|
62
|
+
describe '#description' do
|
69
63
|
|
70
|
-
|
71
|
-
|
72
|
-
Rspec::Core::ExampleGroup.describe(Object, "my desc") { }.description.should == 'my desc'
|
64
|
+
it "exposes the second parameter as description" do
|
65
|
+
ExampleGroup.create(Object, "my desc") { }.description.should == 'my desc'
|
73
66
|
end
|
74
|
-
end
|
75
67
|
|
76
|
-
|
77
|
-
|
78
|
-
Rspec::Core::ExampleGroup.describe(Object, nil) { }.description.should == ""
|
68
|
+
it "allows the second parameter to be nil" do
|
69
|
+
ExampleGroup.create(Object, nil) { }.description.should == ""
|
79
70
|
end
|
80
|
-
end
|
81
71
|
|
82
|
-
|
72
|
+
end
|
83
73
|
|
84
|
-
|
74
|
+
describe '#metadata' do
|
85
75
|
|
86
|
-
|
87
|
-
|
88
|
-
Rspec::Core::ExampleGroup.describe(Object, nil, 'foo' => 'bar') { }.metadata.should include({ "foo" => 'bar' })
|
76
|
+
it "adds the third parameter to the metadata" do
|
77
|
+
ExampleGroup.create(Object, nil, 'foo' => 'bar') { }.metadata.should include({ "foo" => 'bar' })
|
89
78
|
end
|
90
|
-
end
|
91
79
|
|
92
|
-
|
93
|
-
|
94
|
-
Rspec::Core::ExampleGroup.describe(Object) { }.metadata[:example_group][:caller].any? {|f|
|
80
|
+
it "adds the caller to metadata" do
|
81
|
+
ExampleGroup.create(Object) { }.metadata[:example_group][:caller].any? {|f|
|
95
82
|
f =~ /#{__FILE__}/
|
96
83
|
}.should be_true
|
97
84
|
end
|
98
|
-
end
|
99
85
|
|
100
|
-
|
101
|
-
|
102
|
-
Rspec::Core::ExampleGroup.describe(Object) { }.metadata[:example_group][:file_path].should == __FILE__
|
86
|
+
it "adds the the file_path to metadata" do
|
87
|
+
ExampleGroup.create(Object) { }.metadata[:example_group][:file_path].should == __FILE__
|
103
88
|
end
|
104
|
-
end
|
105
89
|
|
106
|
-
|
107
|
-
|
108
|
-
Rspec::Core::ExampleGroup.describe(Object) { }.file_path.should == __FILE__
|
90
|
+
it "has a reader for file_path" do
|
91
|
+
ExampleGroup.create(Object) { }.file_path.should == __FILE__
|
109
92
|
end
|
110
|
-
end
|
111
93
|
|
112
|
-
|
113
|
-
|
114
|
-
Rspec::Core::ExampleGroup.describe(Object) { }.metadata[:example_group][:line_number].should == __LINE__
|
94
|
+
it "adds the line_number to metadata" do
|
95
|
+
ExampleGroup.create(Object) { }.metadata[:example_group][:line_number].should == __LINE__
|
115
96
|
end
|
97
|
+
|
116
98
|
end
|
117
99
|
|
118
|
-
|
119
|
-
Rspec::Core::ExampleGroup.describe(Object) do
|
120
|
-
Rspec::Core::ExampleGroup.describe("foo") do
|
121
|
-
Rspec::Core::ExampleGroup.describe(Object) { }.metadata[:example_group][:file_path].should == __FILE__
|
122
|
-
Rspec::Core::ExampleGroup.describe(Object) { }.metadata[:example_group][:line_number].should == __LINE__
|
123
|
-
end
|
124
|
-
end
|
100
|
+
describe "adding before, after, and around hooks" do
|
125
101
|
|
126
|
-
|
127
|
-
|
102
|
+
it "should expose the before each blocks at before_eachs" do
|
103
|
+
group = ExampleGroup.create
|
104
|
+
group.before(:each) { 'foo' }
|
105
|
+
group.should have(1).before_eachs
|
106
|
+
end
|
128
107
|
|
129
|
-
|
108
|
+
it "should maintain the before each block order" do
|
109
|
+
group = ExampleGroup.create
|
110
|
+
group.before(:each) { 15 }
|
111
|
+
group.before(:each) { 'A' }
|
112
|
+
group.before(:each) { 33.5 }
|
130
113
|
|
131
|
-
|
114
|
+
group.before_eachs[0].call.should == 15
|
115
|
+
group.before_eachs[1].call.should == 'A'
|
116
|
+
group.before_eachs[2].call.should == 33.5
|
117
|
+
end
|
132
118
|
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
119
|
+
it "should expose the before all blocks at before_alls" do
|
120
|
+
group = ExampleGroup.create
|
121
|
+
group.before(:all) { 'foo' }
|
122
|
+
group.should have(1).before_alls
|
123
|
+
end
|
138
124
|
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
125
|
+
it "should maintain the before all block order" do
|
126
|
+
group = ExampleGroup.create
|
127
|
+
group.before(:all) { 15 }
|
128
|
+
group.before(:all) { 'A' }
|
129
|
+
group.before(:all) { 33.5 }
|
144
130
|
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
131
|
+
group.before_alls[0].call.should == 15
|
132
|
+
group.before_alls[1].call.should == 'A'
|
133
|
+
group.before_alls[2].call.should == 33.5
|
134
|
+
end
|
149
135
|
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
136
|
+
it "should expose the after each blocks at after_eachs" do
|
137
|
+
group = ExampleGroup.create
|
138
|
+
group.after(:each) { 'foo' }
|
139
|
+
group.should have(1).after_eachs
|
140
|
+
end
|
155
141
|
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
142
|
+
it "should maintain the after each block order" do
|
143
|
+
group = ExampleGroup.create
|
144
|
+
group.after(:each) { 15 }
|
145
|
+
group.after(:each) { 'A' }
|
146
|
+
group.after(:each) { 33.5 }
|
161
147
|
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
148
|
+
group.after_eachs[0].call.should == 15
|
149
|
+
group.after_eachs[1].call.should == 'A'
|
150
|
+
group.after_eachs[2].call.should == 33.5
|
151
|
+
end
|
166
152
|
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
153
|
+
it "should expose the after all blocks at after_alls" do
|
154
|
+
group = ExampleGroup.create
|
155
|
+
group.after(:all) { 'foo' }
|
156
|
+
group.should have(1).after_alls
|
157
|
+
end
|
172
158
|
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
159
|
+
it "should maintain the after each block order" do
|
160
|
+
group = ExampleGroup.create
|
161
|
+
group.after(:all) { 15 }
|
162
|
+
group.after(:all) { 'A' }
|
163
|
+
group.after(:all) { 33.5 }
|
178
164
|
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
165
|
+
group.after_alls[0].call.should == 15
|
166
|
+
group.after_alls[1].call.should == 'A'
|
167
|
+
group.after_alls[2].call.should == 33.5
|
168
|
+
end
|
183
169
|
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
170
|
+
it "should expose the around each blocks at after_alls" do
|
171
|
+
group = ExampleGroup.create
|
172
|
+
group.around(:each) { 'foo' }
|
173
|
+
group.should have(1).around_eachs
|
174
|
+
end
|
175
|
+
|
188
176
|
end
|
189
177
|
|
190
|
-
|
191
|
-
group = isolated_example_group
|
192
|
-
group.after(:all) { 15 }
|
193
|
-
group.after(:all) { 'A' }
|
194
|
-
group.after(:all) { 33.5 }
|
178
|
+
describe "adding examples" do
|
195
179
|
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
180
|
+
it "should allow adding an example using 'it'" do
|
181
|
+
group = ExampleGroup.create
|
182
|
+
group.it("should do something") { }
|
183
|
+
group.examples.size.should == 1
|
184
|
+
end
|
200
185
|
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
186
|
+
it "should expose all examples at examples" do
|
187
|
+
group = ExampleGroup.create
|
188
|
+
group.it("should do something 1") { }
|
189
|
+
group.it("should do something 2") { }
|
190
|
+
group.it("should do something 3") { }
|
191
|
+
group.examples.size.should == 3
|
192
|
+
end
|
208
193
|
|
209
|
-
|
194
|
+
it "should maintain the example order" do
|
195
|
+
group = ExampleGroup.create
|
196
|
+
group.it("should 1") { }
|
197
|
+
group.it("should 2") { }
|
198
|
+
group.it("should 3") { }
|
199
|
+
group.examples[0].description.should == 'should 1'
|
200
|
+
group.examples[1].description.should == 'should 2'
|
201
|
+
group.examples[2].description.should == 'should 3'
|
202
|
+
end
|
210
203
|
|
211
|
-
it "should allow adding an example using 'it'" do
|
212
|
-
group = isolated_example_group
|
213
|
-
group.it("should do something") { }
|
214
|
-
group.examples.size.should == 1
|
215
204
|
end
|
216
205
|
|
217
|
-
|
218
|
-
group = isolated_example_group
|
219
|
-
group.it("should do something 1") { }
|
220
|
-
group.it("should do something 2") { }
|
221
|
-
group.it("should do something 3") { }
|
222
|
-
group.examples.size.should == 3
|
223
|
-
end
|
206
|
+
describe Object, "describing nested example_groups", :little_less_nested => 'yep' do
|
224
207
|
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
group.it("should 3") { }
|
230
|
-
group.examples[0].description.should == 'should 1'
|
231
|
-
group.examples[1].description.should == 'should 2'
|
232
|
-
group.examples[2].description.should == 'should 3'
|
233
|
-
end
|
208
|
+
describe "A sample nested group", :nested_describe => "yep" do
|
209
|
+
it "sets the described class to the constant Object" do
|
210
|
+
running_example.example_group.describes.should == Object
|
211
|
+
end
|
234
212
|
|
235
|
-
|
213
|
+
it "sets the description to 'A sample nested describe'" do
|
214
|
+
running_example.example_group.description.should == 'A sample nested group'
|
215
|
+
end
|
236
216
|
|
237
|
-
|
217
|
+
it "has top level metadata from the example_group and its ancestors" do
|
218
|
+
running_example.example_group.metadata.should include(:little_less_nested => 'yep', :nested_describe => 'yep')
|
219
|
+
end
|
238
220
|
|
239
|
-
|
240
|
-
|
241
|
-
|
221
|
+
it "exposes the parent metadata to the contained examples" do
|
222
|
+
running_example.metadata.should include(:little_less_nested => 'yep', :nested_describe => 'yep')
|
223
|
+
end
|
242
224
|
end
|
243
225
|
|
244
|
-
|
245
|
-
|
226
|
+
end
|
227
|
+
|
228
|
+
describe "#run_examples" do
|
229
|
+
before do
|
230
|
+
@fake_formatter = Formatters::BaseFormatter.new
|
246
231
|
end
|
247
232
|
|
248
|
-
|
249
|
-
|
233
|
+
def stub_example_group
|
234
|
+
stub('example_group',
|
235
|
+
:metadata => Metadata.new.process(
|
236
|
+
'example_group_name',
|
237
|
+
:caller => ['foo_spec.rb:37']
|
238
|
+
)
|
239
|
+
).as_null_object
|
250
240
|
end
|
251
241
|
|
252
|
-
it "
|
253
|
-
|
242
|
+
it "should return true if all examples pass" do
|
243
|
+
use_formatter(@fake_formatter) do
|
244
|
+
passing_example1 = Example.new(stub_example_group, 'description', {}, (lambda { 1.should == 1 }))
|
245
|
+
passing_example2 = Example.new(stub_example_group, 'description', {}, (lambda { 1.should == 1 }))
|
246
|
+
ExampleGroup.stub(:examples_to_run).and_return([passing_example1, passing_example2])
|
247
|
+
|
248
|
+
ExampleGroup.run_examples(stub_example_group, mock('reporter').as_null_object).should be_true
|
249
|
+
end
|
254
250
|
end
|
255
|
-
end
|
256
251
|
|
257
|
-
|
252
|
+
it "should return false if any of the examples return false" do
|
253
|
+
use_formatter(@fake_formatter) do
|
254
|
+
failing_example = Example.new(stub_example_group, 'description', {}, (lambda { 1.should == 2 }))
|
255
|
+
passing_example = Example.new(stub_example_group, 'description', {}, (lambda { 1.should == 1 }))
|
256
|
+
ExampleGroup.stub!(:examples_to_run).and_return([failing_example, passing_example])
|
258
257
|
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
end
|
258
|
+
ExampleGroup.run_examples(stub_example_group, mock('reporter').as_null_object).should be_false
|
259
|
+
end
|
260
|
+
end
|
263
261
|
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
'
|
268
|
-
:
|
269
|
-
)
|
270
|
-
).as_null_object
|
271
|
-
end
|
262
|
+
it "should run all examples, regardless of any of them failing" do
|
263
|
+
use_formatter(@fake_formatter) do
|
264
|
+
failing_example = Example.new(stub_example_group, 'description', {}, (lambda { 1.should == 2 }))
|
265
|
+
passing_example = Example.new(stub_example_group, 'description', {}, (lambda { 1.should == 1 }))
|
266
|
+
ExampleGroup.stub!(:examples_to_run).and_return([failing_example, passing_example])
|
272
267
|
|
273
|
-
|
274
|
-
use_formatter(@fake_formatter) do
|
275
|
-
passing_example1 = Rspec::Core::Example.new(stub_example_group, 'description', {}, (lambda { 1.should == 1 }))
|
276
|
-
passing_example2 = Rspec::Core::Example.new(stub_example_group, 'description', {}, (lambda { 1.should == 1 }))
|
277
|
-
Rspec::Core::ExampleGroup.stub!(:examples_to_run).and_return([passing_example1, passing_example2])
|
268
|
+
passing_example.should_receive(:run)
|
278
269
|
|
279
|
-
|
270
|
+
ExampleGroup.run_examples(stub_example_group, mock('reporter', :null_object => true))
|
271
|
+
end
|
280
272
|
end
|
273
|
+
|
281
274
|
end
|
282
275
|
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
Rspec::Core::ExampleGroup.stub!(:examples_to_run).and_return([failing_example, passing_example])
|
276
|
+
describe "how instance variables inherit" do
|
277
|
+
before(:all) do
|
278
|
+
@before_all_top_level = 'before_all_top_level'
|
279
|
+
end
|
288
280
|
|
289
|
-
|
281
|
+
before(:each) do
|
282
|
+
@before_each_top_level = 'before_each_top_level'
|
290
283
|
end
|
291
|
-
end
|
292
284
|
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
passing_example = Rspec::Core::Example.new(stub_example_group, 'description', {}, (lambda { 1.should == 1 }))
|
297
|
-
Rspec::Core::ExampleGroup.stub!(:examples_to_run).and_return([failing_example, passing_example])
|
285
|
+
it "should be able to access a before each ivar at the same level" do
|
286
|
+
@before_each_top_level.should == 'before_each_top_level'
|
287
|
+
end
|
298
288
|
|
299
|
-
|
289
|
+
it "should be able to access a before all ivar at the same level" do
|
290
|
+
@before_all_top_level.should == 'before_all_top_level'
|
291
|
+
end
|
300
292
|
|
301
|
-
|
293
|
+
it "should be able to access the before all ivars in the before_all_ivars hash" do
|
294
|
+
with_ruby('1.8') do
|
295
|
+
running_example.example_group.before_all_ivars.should include('@before_all_top_level' => 'before_all_top_level')
|
296
|
+
end
|
297
|
+
with_ruby('1.9') do
|
298
|
+
running_example.example_group.before_all_ivars.should include(:@before_all_top_level => 'before_all_top_level')
|
299
|
+
end
|
302
300
|
end
|
303
|
-
end
|
304
301
|
|
305
|
-
|
302
|
+
describe "but now I am nested" do
|
303
|
+
it "should be able to access a parent example groups before each ivar at a nested level" do
|
304
|
+
@before_each_top_level.should == 'before_each_top_level'
|
305
|
+
end
|
306
306
|
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
end
|
307
|
+
it "should be able to access a parent example groups before all ivar at a nested level" do
|
308
|
+
@before_all_top_level.should == "before_all_top_level"
|
309
|
+
end
|
311
310
|
|
312
|
-
|
313
|
-
|
314
|
-
|
311
|
+
it "changes to before all ivars from within an example do not persist outside the current describe" do
|
312
|
+
@before_all_top_level = "ive been changed"
|
313
|
+
end
|
315
314
|
|
316
|
-
|
317
|
-
|
318
|
-
|
315
|
+
describe "accessing a before_all ivar that was changed in a parent example_group" do
|
316
|
+
it "does not have access to the modified version" do
|
317
|
+
@before_all_top_level.should == 'before_all_top_level'
|
318
|
+
end
|
319
|
+
end
|
320
|
+
end
|
319
321
|
|
320
|
-
it "should be able to access a before all ivar at the same level" do
|
321
|
-
@before_all_top_level.should == 'before_all_top_level'
|
322
322
|
end
|
323
323
|
|
324
|
-
|
325
|
-
|
326
|
-
|
324
|
+
describe "ivars are not shared across examples" do
|
325
|
+
it "(first example)" do
|
326
|
+
@a = 1
|
327
|
+
@b.should be_nil
|
327
328
|
end
|
328
|
-
with_ruby('1.9') do
|
329
|
-
running_example.example_group.before_all_ivars.should include(:@before_all_top_level => 'before_all_top_level')
|
330
|
-
end
|
331
|
-
end
|
332
329
|
|
333
|
-
|
334
|
-
|
335
|
-
@
|
330
|
+
it "(second example)" do
|
331
|
+
@b = 2
|
332
|
+
@a.should be_nil
|
336
333
|
end
|
334
|
+
end
|
337
335
|
|
338
|
-
|
339
|
-
|
336
|
+
describe "#let" do
|
337
|
+
let(:counter) do
|
338
|
+
Class.new do
|
339
|
+
def initialize
|
340
|
+
@count = 0
|
341
|
+
end
|
342
|
+
def count
|
343
|
+
@count += 1
|
344
|
+
end
|
345
|
+
end.new
|
340
346
|
end
|
341
347
|
|
342
|
-
it "
|
343
|
-
|
348
|
+
it "generates an instance method" do
|
349
|
+
counter.count.should == 1
|
344
350
|
end
|
345
351
|
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
end
|
352
|
+
it "caches the value" do
|
353
|
+
counter.count.should == 1
|
354
|
+
counter.count.should == 2
|
350
355
|
end
|
351
356
|
end
|
352
357
|
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
@b.should be_nil
|
359
|
-
end
|
360
|
-
|
361
|
-
it "(second example)" do
|
362
|
-
@b = 2
|
363
|
-
@a.should be_nil
|
364
|
-
end
|
365
|
-
end
|
358
|
+
describe "#around" do
|
359
|
+
class Thing
|
360
|
+
def self.cache
|
361
|
+
@cache ||= []
|
362
|
+
end
|
366
363
|
|
367
|
-
describe "#let" do
|
368
|
-
let(:counter) do
|
369
|
-
Class.new do
|
370
364
|
def initialize
|
371
|
-
|
372
|
-
end
|
373
|
-
def count
|
374
|
-
@count += 1
|
365
|
+
self.class.cache << self
|
375
366
|
end
|
376
|
-
end.new
|
377
|
-
end
|
378
|
-
|
379
|
-
it "generates an instance method" do
|
380
|
-
counter.count.should == 1
|
381
|
-
end
|
382
|
-
|
383
|
-
it "caches the value" do
|
384
|
-
counter.count.should == 1
|
385
|
-
counter.count.should == 2
|
386
|
-
end
|
387
|
-
end
|
388
|
-
|
389
|
-
describe "#around" do
|
390
|
-
class Thing
|
391
|
-
def self.cache
|
392
|
-
@cache ||= []
|
393
367
|
end
|
394
368
|
|
395
|
-
|
396
|
-
|
369
|
+
around(:each) do |example|
|
370
|
+
Thing.new
|
371
|
+
example.run
|
372
|
+
Thing.cache.clear
|
397
373
|
end
|
398
|
-
end
|
399
|
-
|
400
|
-
around(:each) do |example|
|
401
|
-
Thing.new
|
402
|
-
example.run
|
403
|
-
Thing.cache.clear
|
404
|
-
end
|
405
374
|
|
406
|
-
|
407
|
-
|
408
|
-
|
375
|
+
it "has 1 Thing (1)" do
|
376
|
+
Thing.cache.length.should == 1
|
377
|
+
end
|
409
378
|
|
410
|
-
|
411
|
-
|
379
|
+
it "has 1 Thing (2)" do
|
380
|
+
Thing.cache.length.should == 1
|
381
|
+
end
|
412
382
|
end
|
413
383
|
end
|
384
|
+
|
414
385
|
end
|