rspec-core 2.0.0.beta.7 → 2.0.0.beta.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,44 +1,41 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Rspec::Core::Example, :parent_metadata => 'sample' do
4
+ let(:example_group) do
5
+ Rspec::Core::ExampleGroup.describe('group description')
6
+ end
4
7
 
5
- before do
6
- example_group = stub('example_group',
7
- :metadata => Rspec::Core::Metadata.new.process(
8
- 'group description',
9
- :caller => ['foo_spec.rb:37']
10
- )
11
- ).as_null_object
12
- @example = Rspec::Core::Example.new(example_group, 'example description', {}, (lambda {}))
8
+ let(:example) do
9
+ example_group.example('example description')
13
10
  end
14
11
 
15
12
  describe "attr readers" do
16
13
  it "should have one for the parent example group" do
17
- @example.should respond_to(:example_group)
14
+ example.should respond_to(:example_group)
18
15
  end
19
16
 
20
17
  it "should have one for it's description" do
21
- @example.should respond_to(:description)
18
+ example.should respond_to(:description)
22
19
  end
23
20
 
24
21
  it "should have one for it's metadata" do
25
- @example.should respond_to(:metadata)
22
+ example.should respond_to(:metadata)
26
23
  end
27
24
 
28
25
  it "should have one for it's block" do
29
- @example.should respond_to(:example_block)
26
+ example.should respond_to(:example_block)
30
27
  end
31
28
  end
32
29
 
33
30
  describe '#inspect' do
34
31
  it "should return 'group description - description'" do
35
- @example.inspect.should == 'group description example description'
32
+ example.inspect.should == 'group description example description'
36
33
  end
37
34
  end
38
35
 
39
36
  describe '#to_s' do
40
37
  it "should return #inspect" do
41
- @example.to_s.should == @example.inspect
38
+ example.to_s.should == example.inspect
42
39
  end
43
40
  end
44
41
 
@@ -60,9 +57,34 @@ describe Rspec::Core::Example, :parent_metadata => 'sample' do
60
57
  end
61
58
 
62
59
  describe "#run" do
63
- pending "should run after(:each) when the example fails"
60
+ it "runs after(:each) when the example passes" do
61
+ after_run = false
62
+ group = Rspec::Core::ExampleGroup.describe do
63
+ after(:each) { after_run = true }
64
+ example('example') { 1.should == 1 }
65
+ end
66
+ group.run_all
67
+ after_run.should be_true, "expected after(:each) to be run"
68
+ end
64
69
 
65
- pending "should run after(:each) when the example raises an Exception"
66
- end
70
+ it "runs after(:each) when the example fails" do
71
+ after_run = false
72
+ group = Rspec::Core::ExampleGroup.describe do
73
+ after(:each) { after_run = true }
74
+ example('example') { 1.should == 2 }
75
+ end
76
+ group.run_all
77
+ after_run.should be_true, "expected after(:each) to be run"
78
+ end
67
79
 
80
+ it "runs after(:each) when the example raises an Exception" do
81
+ after_run = false
82
+ group = Rspec::Core::ExampleGroup.describe do
83
+ after(:each) { after_run = true }
84
+ example('example') { raise "this error" }
85
+ end
86
+ group.run_all
87
+ after_run.should be_true, "expected after(:each) to be run"
88
+ end
89
+ end
68
90
  end
@@ -5,9 +5,10 @@ describe Rspec::Core::Formatters::Helpers do
5
5
  let(:helper) { helper = Object.new.extend(Rspec::Core::Formatters::Helpers) }
6
6
 
7
7
  describe "format seconds" do
8
- pending "uses passed in precision if specified" do
9
- # can't get regex right to handle this case where we don't want it to consume all zeroes
10
- helper.format_seconds(0.00005, 2).should == "0.00"
8
+ it "uses passed in precision if specified" do
9
+ pending("get regex right to handle this case where we don't want it to consume all zeroes") do
10
+ helper.format_seconds(0.00005, 2).should == "0.00"
11
+ end
11
12
  end
12
13
 
13
14
  context "sub second times" do
@@ -35,4 +36,4 @@ describe Rspec::Core::Formatters::Helpers do
35
36
  end
36
37
 
37
38
 
38
- end
39
+ end
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+
3
+ describe "#let" do
4
+ let(:counter) do
5
+ Class.new do
6
+ def initialize
7
+ @count = 0
8
+ end
9
+ def count
10
+ @count += 1
11
+ end
12
+ end.new
13
+ end
14
+
15
+ it "generates an instance method" do
16
+ counter.count.should == 1
17
+ end
18
+
19
+ it "caches the value" do
20
+ counter.count.should == 1
21
+ counter.count.should == 2
22
+ end
23
+ end
24
+
25
+ describe "#let!" do
26
+ let!(:creator) do
27
+ class Creator
28
+ @count = 0
29
+ def self.count
30
+ @count += 1
31
+ end
32
+ end
33
+ end
34
+
35
+ it "evaluates the value non-lazily" do
36
+ lambda { Creator.count }.should_not raise_error
37
+ end
38
+
39
+ it "does not interfere between tests" do
40
+ Creator.count.should == 1
41
+ end
42
+ end
@@ -1,19 +1,85 @@
1
1
  require 'spec_helper'
2
2
 
3
- Rspec::Matchers.define :be_pending do
3
+ Rspec::Matchers.define :be_pending_with do |message|
4
4
  match do |example|
5
- example.metadata[:pending]
5
+ example.metadata[:pending] && example.metadata[:execution_result][:pending_message] == message
6
+ end
7
+
8
+ failure_message_for_should do |example|
9
+ "expected example to pending with #{message.inspect}, got #{example.metadata[:execution_result][:pending_message].inspect}"
6
10
  end
7
11
  end
8
12
 
9
13
  describe "an example" do
10
14
  context "with no block" do
11
- it "is listed as pending" do
12
- group = Rspec::Core::ExampleGroup.create('group') do
15
+ it "is listed as pending with 'Not Yet Implemented'" do
16
+ group = Rspec::Core::ExampleGroup.describe('group') do
13
17
  it "has no block"
14
18
  end
15
- group.run(stub('reporter').as_null_object)
16
- group.examples.first.should be_pending
19
+ example = group.examples.first
20
+ example.run(group.new, stub.as_null_object)
21
+ example.should be_pending_with('Not Yet Implemented')
22
+ end
23
+ end
24
+
25
+ context "with no args" do
26
+ it "is listed as pending with 'No reason given'" do
27
+ group = Rspec::Core::ExampleGroup.describe('group') do
28
+ it "does something" do
29
+ pending
30
+ end
31
+ end
32
+ example = group.examples.first
33
+ example.run(group.new, stub.as_null_object)
34
+ example.should be_pending_with('No reason given')
35
+ end
36
+ end
37
+
38
+ context "with a message" do
39
+ it "is listed as pending with the supplied message" do
40
+ group = Rspec::Core::ExampleGroup.describe('group') do
41
+ it "does something" do
42
+ pending("just because")
43
+ end
44
+ end
45
+ example = group.examples.first
46
+ example.run(group.new, stub.as_null_object)
47
+ example.should be_pending_with('just because')
17
48
  end
18
49
  end
50
+
51
+ context "with a block" do
52
+ context "that fails" do
53
+ it "is listed as pending with the supplied message" do
54
+ group = Rspec::Core::ExampleGroup.describe('group') do
55
+ it "does something" do
56
+ pending("just because") do
57
+ 3.should == 4
58
+ end
59
+ end
60
+ end
61
+ example = group.examples.first
62
+ example.run(group.new, stub.as_null_object)
63
+ example.should be_pending_with('just because')
64
+ end
65
+ end
66
+
67
+ context "that passes" do
68
+ it "raises a PendingExampleFixedError" do
69
+ group = Rspec::Core::ExampleGroup.describe('group') do
70
+ it "does something" do
71
+ pending("just because") do
72
+ 3.should == 3
73
+ end
74
+ end
75
+ end
76
+ example = group.examples.first
77
+ example.run(group.new, stub.as_null_object)
78
+ example.metadata[:pending].should be_false
79
+ example.metadata[:execution_result][:status].should == 'failed'
80
+ example.metadata[:execution_result][:exception_encountered].should be_a(Rspec::Core::PendingExampleFixedError)
81
+ end
82
+ end
83
+ end
84
+
19
85
  end
@@ -17,7 +17,7 @@ module Rspec::Core
17
17
  end
18
18
 
19
19
  it "should raise an ArgumentError when adding a second shared example group with the same name" do
20
- group = ExampleGroup.create('example group')
20
+ group = ExampleGroup.describe('example group')
21
21
  group.share_examples_for('really important business value') { }
22
22
  lambda do
23
23
  group.share_examples_for('really important business value') { }
@@ -35,14 +35,8 @@ module Rspec::Core
35
35
 
36
36
  describe "including shared example_groups using #it_should_behave_like" do
37
37
 
38
- def cleanup_shared_example_groups
39
- original_shared_example_groups = Rspec::Core.world.shared_example_groups
40
- yield if block_given?
41
- Rspec::Core.world.shared_example_groups.replace(original_shared_example_groups)
42
- end
43
-
44
38
  it "should make any shared example_group available at the correct level", :ruby => 1.8 do
45
- group = ExampleGroup.create('fake group')
39
+ group = ExampleGroup.describe('fake group')
46
40
  block = lambda {
47
41
  def self.class_helper; end
48
42
  def extra_helper; end
@@ -54,163 +48,153 @@ module Rspec::Core
54
48
  end
55
49
 
56
50
  it "should make any shared example_group available at the correct level", :ruby => 1.9 do
57
- group = ExampleGroup.create('fake group')
58
- block = lambda {
51
+ group = ExampleGroup.describe
52
+ shared_examples_for(:shared_example_group) do
59
53
  def self.class_helper; end
60
54
  def extra_helper; end
61
- }
62
- Rspec::Core.world.stub(:shared_example_groups).and_return({ :shared_example_group => block })
55
+ end
63
56
  group.it_should_behave_like :shared_example_group
64
57
  group.instance_methods.should include(:extra_helper)
65
58
  group.singleton_methods.should include(:class_helper)
66
59
  end
67
60
 
68
61
  it "raises when named shared example_group can not be found" do
69
- cleanup_shared_example_groups do
70
- group = ExampleGroup.create("example_group")
71
- lambda do
72
- group.it_should_behave_like("a group that does not exist")
73
- end.should raise_error(/Could not find shared example group named/)
74
- end
62
+ group = ExampleGroup.describe("example_group")
63
+ lambda do
64
+ group.it_should_behave_like("a group that does not exist")
65
+ end.should raise_error(/Could not find shared example group named/)
75
66
  end
76
67
 
77
68
  it "adds examples to current example_group using it_should_behave_like" do
78
- cleanup_shared_example_groups do
79
- group = ExampleGroup.create("example_group") do
80
- it("i was already here") {}
81
- end
69
+ group = ExampleGroup.describe("example_group") do
70
+ it("i was already here") {}
71
+ end
82
72
 
83
- group.examples.size.should == 1
73
+ group.examples.size.should == 1
84
74
 
85
- group.share_examples_for('shared example_group') do
86
- it("shared example") {}
87
- it("shared example 2") {}
88
- end
75
+ group.share_examples_for('shared example_group') do
76
+ it("shared example") {}
77
+ it("shared example 2") {}
78
+ end
89
79
 
90
- group.it_should_behave_like("shared example_group")
80
+ group.it_should_behave_like("shared example_group")
91
81
 
92
- group.examples.size.should == 3
93
- end
82
+ group.examples.size.should == 3
94
83
  end
95
84
 
96
85
  it "adds examples to from two shared groups" do
97
- cleanup_shared_example_groups do
98
- group = ExampleGroup.create("example_group") do
99
- it("i was already here") {}
100
- end
86
+ group = ExampleGroup.describe("example_group") do
87
+ it("i was already here") {}
88
+ end
101
89
 
102
- group.examples.size.should == 1
90
+ group.examples.size.should == 1
103
91
 
104
- group.share_examples_for('test 2 shared groups') do
105
- it("shared example") {}
106
- it("shared example 2") {}
107
- end
92
+ group.share_examples_for('test 2 shared groups') do
93
+ it("shared example") {}
94
+ it("shared example 2") {}
95
+ end
108
96
 
109
- group.share_examples_for('test 2 shared groups 2') do
110
- it("shared example 3") {}
111
- end
97
+ group.share_examples_for('test 2 shared groups 2') do
98
+ it("shared example 3") {}
99
+ end
112
100
 
113
- group.it_should_behave_like("test 2 shared groups")
114
- group.it_should_behave_like("test 2 shared groups 2")
101
+ group.it_should_behave_like("test 2 shared groups")
102
+ group.it_should_behave_like("test 2 shared groups 2")
115
103
 
116
- group.examples.size.should == 4
117
- end
104
+ group.examples.size.should == 4
118
105
  end
119
106
 
120
- share_as('Cornucopia') do
121
- it "is plentiful" do
122
- 5.should == 4
123
- end
124
- end
125
107
 
126
108
  it "adds examples to current example_group using include", :compat => 'rspec-1.2' do
127
- group = ExampleGroup.create('group') { include Cornucopia }
109
+ share_as('Cornucopia') do
110
+ it "is plentiful" do
111
+ 5.should == 4
112
+ end
113
+ end
114
+ group = ExampleGroup.describe('group') { include Cornucopia }
128
115
  group.examples.length.should == 1
129
116
  group.examples.first.metadata[:description].should == "is plentiful"
130
117
  end
131
118
 
132
119
  it "adds examples to current example_group using it_should_behave_like with a module" do
133
- cleanup_shared_example_groups do
134
- group = ExampleGroup.create("example_group") {}
120
+ group = ExampleGroup.describe("example_group") {}
135
121
 
136
- shared_foo = group.share_as(:FooShared) do
137
- it("shared example") {}
138
- end
122
+ shared_foo = group.share_as(:FooShared) do
123
+ it("shared example") {}
124
+ end
139
125
 
140
- group.it_should_behave_like(::FooShared)
126
+ group.it_should_behave_like(::FooShared)
141
127
 
142
- group.examples.size.should == 1
143
- end
128
+ group.examples.size.should == 1
144
129
  end
145
130
 
146
131
  describe "running shared examples" do
147
132
  module ::RunningSharedExamplesJustForTesting; end
148
133
 
149
- share_examples_for("it runs shared examples") do
150
- include ::RunningSharedExamplesJustForTesting
134
+ before(:each) do
135
+ share_examples_for("it runs shared examples") do
136
+ include ::RunningSharedExamplesJustForTesting
137
+
138
+ class << self
139
+ def magic
140
+ $magic ||= {}
141
+ end
142
+
143
+ def count(scope)
144
+ @counters ||= {
145
+ :before_all => 0,
146
+ :before_each => 0,
147
+ :after_each => 0,
148
+ :after_all => 0
149
+ }
150
+ @counters[scope] += 1
151
+ end
152
+ end
151
153
 
152
- class << self
153
154
  def magic
154
155
  $magic ||= {}
155
156
  end
156
157
 
157
158
  def count(scope)
158
- @counters ||= {
159
- :before_all => 0,
160
- :before_each => 0,
161
- :after_each => 0,
162
- :after_all => 0
163
- }
164
- @counters[scope] += 1
159
+ self.class.count(scope)
165
160
  end
166
- end
167
-
168
- def magic
169
- $magic ||= {}
170
- end
171
161
 
172
- def count(scope)
173
- self.class.count(scope)
162
+ before(:all) { magic[:before_all] = "before all #{count(:before_all)}" }
163
+ before(:each) { magic[:before_each] = "before each #{count(:before_each)}" }
164
+ after(:each) { magic[:after_each] = "after each #{count(:after_each)}" }
165
+ after(:all) { magic[:after_all] = "after all #{count(:after_all)}" }
174
166
  end
175
-
176
- before(:all) { magic[:before_all] = "before all #{count(:before_all)}" }
177
- before(:each) { magic[:before_each] = "before each #{count(:before_each)}" }
178
- after(:each) { magic[:after_each] = "after each #{count(:after_each)}" }
179
- after(:all) { magic[:after_all] = "after all #{count(:after_all)}" }
180
167
  end
181
168
 
182
169
  let(:group) do
183
- group = ExampleGroup.create("example group") do
170
+ group = ExampleGroup.describe("example group") do
184
171
  it_should_behave_like "it runs shared examples"
185
172
  it "has one example" do; end
186
173
  it "has another example" do; end
174
+ it "includes modules, included into shared example_group, into current example_group", :compat => 'rspec-1.2' do
175
+ raise "FAIL" unless running_example.example_group.included_modules.include?(RunningSharedExamplesJustForTesting)
176
+ end
187
177
  end
188
178
  end
189
179
 
190
- before { group.run(stub('reporter').as_null_object) }
180
+ before { group.run_all }
191
181
 
192
182
  it "runs before(:all) only once from shared example_group", :compat => 'rspec-1.2' do
193
183
  group.magic[:before_all].should eq("before all 1")
194
184
  end
195
185
 
196
186
  it "runs before(:each) from shared example_group", :compat => 'rspec-1.2' do
197
- group.magic[:before_each].should eq("before each 2")
187
+ group.magic[:before_each].should eq("before each 3")
198
188
  end
199
189
 
200
190
  it "runs after(:each) from shared example_group", :compat => 'rspec-1.2' do
201
- group.magic[:after_each].should eq("after each 2")
191
+ group.magic[:after_each].should eq("after each 3")
202
192
  end
203
193
 
204
- it "runs after(:all) only once from shared example_group", :compat => 'rspec-1.2' do
194
+ it "runs after(:all) only once from shared example_group", :pending => true, :compat => 'rspec-1.2' do
205
195
  group.magic[:after_all].should eq("after all 1")
206
196
  end
207
197
 
208
- it_should_behave_like "it runs shared examples"
209
-
210
- it "includes modules, included into shared example_group, into current example_group", :compat => 'rspec-1.2' do
211
- running_example.example_group.included_modules.should include(RunningSharedExamplesJustForTesting)
212
- end
213
-
214
198
  it "makes methods defined in the shared example_group available in consuming example_group", :compat => 'rspec-1.2' do
215
199
  group.magic.should be_a(Hash)
216
200
  end