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.
@@ -11,12 +11,15 @@ module Rspec
11
11
  failed_examples.each_with_index do |failed_example, index|
12
12
  exception = failed_example.execution_result[:exception_encountered]
13
13
  padding = ' '
14
-
15
- output.puts "#{index.next}) #{failed_example}"
16
- output.puts "#{padding}Failure/Error: #{read_failed_line(exception, failed_example).strip}"
17
-
18
- exception.message.split("\n").each do |line|
19
- output.puts "#{padding}#{colorise(line, exception).strip}"
14
+ if exception.is_a?(Rspec::Core::PendingExampleFixedError)
15
+ output.puts "#{index.next}) #{failed_example} FIXED"
16
+ output.puts "#{padding}Expected pending '#{failed_example.metadata[:execution_result][:pending_message]}' to fail. No Error was raised."
17
+ else
18
+ output.puts "#{index.next}) #{failed_example}"
19
+ output.puts "#{padding}Failure/Error: #{read_failed_line(exception, failed_example).strip}"
20
+ exception.message.split("\n").each do |line|
21
+ output.puts "#{padding}#{colorise(line, exception).strip}"
22
+ end
20
23
  end
21
24
 
22
25
  format_backtrace(exception.backtrace, failed_example).each do |backtrace_info|
@@ -73,8 +76,8 @@ module Rspec
73
76
  unless pending_examples.empty?
74
77
  output.puts
75
78
  output.puts "Pending:"
76
- pending_examples.each do |pending_example, message|
77
- output.puts " #{pending_example}"
79
+ pending_examples.each do |pending_example|
80
+ output.puts " #{pending_example} (#{pending_example.metadata[:execution_result][:pending_message]})"
78
81
  output.puts grey(" # #{format_caller(pending_example.metadata[:location])}")
79
82
  end
80
83
  end
@@ -14,14 +14,14 @@ module Rspec
14
14
  def add_example_group(example_group)
15
15
  super
16
16
 
17
- described_example_group_chain.each_with_index do |nested_example_group, i|
17
+ example_group_chain.each_with_index do |nested_example_group, i|
18
18
  unless nested_example_group == @previous_nested_example_groups[i]
19
19
  output.puts if i == 0
20
20
  output.puts "#{' ' * i}#{nested_example_group.description}"
21
21
  end
22
22
  end
23
23
 
24
- @previous_nested_example_groups = described_example_group_chain
24
+ @previous_nested_example_groups = example_group_chain
25
25
  end
26
26
 
27
27
  def output_for(example)
@@ -67,8 +67,8 @@ module Rspec
67
67
  ' ' * @previous_nested_example_groups.size
68
68
  end
69
69
 
70
- def described_example_group_chain
71
- example_group.ancestors
70
+ def example_group_chain
71
+ example_group.ancestors.reverse
72
72
  end
73
73
 
74
74
  end
@@ -0,0 +1,19 @@
1
+ module Rspec
2
+ module Core
3
+ module Pending
4
+ def pending(message = 'No reason given')
5
+ running_example.metadata[:pending] = true
6
+ running_example.metadata[:execution_result][:pending_message] = message
7
+ if block_given?
8
+ begin
9
+ result = yield
10
+ running_example.metadata[:pending] = false
11
+ rescue Exception => e
12
+ end
13
+ raise Rspec::Core::PendingExampleFixedError.new if result
14
+ end
15
+ throw :pending_declared_in_example, message
16
+ end
17
+ end
18
+ end
19
+ end
@@ -69,7 +69,7 @@ module Rspec
69
69
 
70
70
  def implicit_subject
71
71
  described = describes || description
72
- Class === described ? lambda { described.new } : lambda { described }
72
+ Class === described ? proc { described.new } : proc { described }
73
73
  end
74
74
  end
75
75
  end
@@ -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.beta.7"
8
+ s.version = "2.0.0.beta.8"
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-04-17}
12
+ s.date = %q{2010-04-27}
13
13
  s.description = %q{Rspec runner and example group classes}
14
14
  s.email = %q{dchelimsky@gmail.com;chad.humphries@gmail.com}
15
15
  s.executables = ["rspec", "spec"]
@@ -105,6 +105,7 @@ Gem::Specification.new do |s|
105
105
  "lib/rspec/core/configuration.rb",
106
106
  "lib/rspec/core/configuration_options.rb",
107
107
  "lib/rspec/core/deprecation.rb",
108
+ "lib/rspec/core/errors.rb",
108
109
  "lib/rspec/core/example.rb",
109
110
  "lib/rspec/core/example_group.rb",
110
111
  "lib/rspec/core/formatters.rb",
@@ -123,6 +124,7 @@ Gem::Specification.new do |s|
123
124
  "lib/rspec/core/mocking/with_mocha.rb",
124
125
  "lib/rspec/core/mocking/with_rr.rb",
125
126
  "lib/rspec/core/mocking/with_rspec.rb",
127
+ "lib/rspec/core/pending.rb",
126
128
  "lib/rspec/core/rake_task.rb",
127
129
  "lib/rspec/core/ruby_project.rb",
128
130
  "lib/rspec/core/runner.rb",
@@ -144,8 +146,8 @@ Gem::Specification.new do |s|
144
146
  "spec/rspec/core/formatters/helpers_spec.rb",
145
147
  "spec/rspec/core/formatters/progress_formatter_spec.rb",
146
148
  "spec/rspec/core/kernel_extensions_spec.rb",
149
+ "spec/rspec/core/let_spec.rb",
147
150
  "spec/rspec/core/metadata_spec.rb",
148
- "spec/rspec/core/mocha_spec.rb",
149
151
  "spec/rspec/core/pending_example_spec.rb",
150
152
  "spec/rspec/core/resources/a_bar.rb",
151
153
  "spec/rspec/core/resources/a_foo.rb",
@@ -166,7 +168,7 @@ Gem::Specification.new do |s|
166
168
  s.homepage = %q{http://github.com/rspec/core}
167
169
  s.post_install_message = %q{**************************************************
168
170
 
169
- Thank you for installing rspec-core-2.0.0.beta.7
171
+ Thank you for installing rspec-core-2.0.0.beta.8
170
172
 
171
173
  This is beta software. If you are looking
172
174
  for a supported production release, please
@@ -178,7 +180,7 @@ Gem::Specification.new do |s|
178
180
  s.require_paths = ["lib"]
179
181
  s.rubyforge_project = %q{rspec}
180
182
  s.rubygems_version = %q{1.3.6}
181
- s.summary = %q{rspec-core-2.0.0.beta.7}
183
+ s.summary = %q{rspec-core-2.0.0.beta.8}
182
184
  s.test_files = [
183
185
  "spec/autotest/failed_results_re_spec.rb",
184
186
  "spec/autotest/rspec_spec.rb",
@@ -192,8 +194,8 @@ Gem::Specification.new do |s|
192
194
  "spec/rspec/core/formatters/helpers_spec.rb",
193
195
  "spec/rspec/core/formatters/progress_formatter_spec.rb",
194
196
  "spec/rspec/core/kernel_extensions_spec.rb",
197
+ "spec/rspec/core/let_spec.rb",
195
198
  "spec/rspec/core/metadata_spec.rb",
196
- "spec/rspec/core/mocha_spec.rb",
197
199
  "spec/rspec/core/pending_example_spec.rb",
198
200
  "spec/rspec/core/resources/a_bar.rb",
199
201
  "spec/rspec/core/resources/a_foo.rb",
@@ -216,19 +218,19 @@ Gem::Specification.new do |s|
216
218
  s.specification_version = 3
217
219
 
218
220
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
219
- s.add_development_dependency(%q<rspec-expectations>, [">= 2.0.0.beta.7"])
220
- s.add_development_dependency(%q<rspec-mocks>, [">= 2.0.0.beta.7"])
221
+ s.add_development_dependency(%q<rspec-expectations>, [">= 2.0.0.beta.8"])
222
+ s.add_development_dependency(%q<rspec-mocks>, [">= 2.0.0.beta.8"])
221
223
  s.add_development_dependency(%q<cucumber>, [">= 0.5.3"])
222
224
  s.add_development_dependency(%q<autotest>, [">= 4.2.9"])
223
225
  else
224
- s.add_dependency(%q<rspec-expectations>, [">= 2.0.0.beta.7"])
225
- s.add_dependency(%q<rspec-mocks>, [">= 2.0.0.beta.7"])
226
+ s.add_dependency(%q<rspec-expectations>, [">= 2.0.0.beta.8"])
227
+ s.add_dependency(%q<rspec-mocks>, [">= 2.0.0.beta.8"])
226
228
  s.add_dependency(%q<cucumber>, [">= 0.5.3"])
227
229
  s.add_dependency(%q<autotest>, [">= 4.2.9"])
228
230
  end
229
231
  else
230
- s.add_dependency(%q<rspec-expectations>, [">= 2.0.0.beta.7"])
231
- s.add_dependency(%q<rspec-mocks>, [">= 2.0.0.beta.7"])
232
+ s.add_dependency(%q<rspec-expectations>, [">= 2.0.0.beta.8"])
233
+ s.add_dependency(%q<rspec-mocks>, [">= 2.0.0.beta.8"])
232
234
  s.add_dependency(%q<cucumber>, [">= 0.5.3"])
233
235
  s.add_dependency(%q<autotest>, [">= 4.2.9"])
234
236
  end
@@ -136,7 +136,7 @@ module Rspec::Core
136
136
  it "includes the given module into each example group" do
137
137
  config.include(InstanceLevelMethods)
138
138
 
139
- group = ExampleGroup.create(config, 'does like, stuff and junk', :magic_key => :include) { }
139
+ group = ExampleGroup.describe(config, 'does like, stuff and junk', :magic_key => :include) { }
140
140
  group.should_not respond_to(:you_call_this_a_blt?)
141
141
  group.new.you_call_this_a_blt?.should == "egad man, where's the mayo?!?!?"
142
142
  end
@@ -147,7 +147,7 @@ module Rspec::Core
147
147
  it "includes the given module into each matching example group" do
148
148
  config.include(InstanceLevelMethods, :magic_key => :include)
149
149
 
150
- group = ExampleGroup.create(config, 'does like, stuff and junk', :magic_key => :include) { }
150
+ group = ExampleGroup.describe(config, 'does like, stuff and junk', :magic_key => :include) { }
151
151
  group.should_not respond_to(:you_call_this_a_blt?)
152
152
  group.new.you_call_this_a_blt?.should == "egad man, where's the mayo?!?!?"
153
153
  end
@@ -164,7 +164,7 @@ module Rspec::Core
164
164
 
165
165
  it "should extend the given module into each matching example group" do
166
166
  config.extend(ThatThingISentYou, :magic_key => :extend)
167
- group = ExampleGroup.create(config, ThatThingISentYou, :magic_key => :extend) { }
167
+ group = ExampleGroup.describe(config, ThatThingISentYou, :magic_key => :extend) { }
168
168
  group.should respond_to(:that_thing)
169
169
  end
170
170
 
@@ -14,35 +14,18 @@ module Rspec::Core
14
14
 
15
15
  describe ExampleGroup do
16
16
 
17
- describe "#describe" do
18
-
19
- it "raises an ArgumentError if no type or description is given" do
20
- lambda { ExampleGroup.describe() {} }.should raise_error(ArgumentError, "No arguments given. You must a least supply a type or description")
21
- end
22
-
23
- it "raises an ArgumentError if no block is given" do
24
- lambda { ExampleGroup.describe('foo') }.should raise_error(ArgumentError, "You must supply a block when calling describe")
25
- end
26
-
27
- end
28
-
29
-
30
17
  describe '#describes' do
31
18
 
32
19
  context "with a constant as the first parameter" do
33
-
34
20
  it "is that constant" do
35
- ExampleGroup.create(Object) { }.describes.should == Object
21
+ ExampleGroup.describe(Object) { }.describes.should == Object
36
22
  end
37
-
38
23
  end
39
24
 
40
25
  context "with a string as the first parameter" do
41
-
42
26
  it "is nil" do
43
- ExampleGroup.create("i'm a computer") { }.describes.should be_nil
27
+ ExampleGroup.describe("i'm a computer") { }.describes.should be_nil
44
28
  end
45
-
46
29
  end
47
30
 
48
31
  end
@@ -50,7 +33,7 @@ module Rspec::Core
50
33
  describe '#description' do
51
34
 
52
35
  it "grabs the description from the metadata" do
53
- group = ExampleGroup.create(Object, "my desc") { }
36
+ group = ExampleGroup.describe(Object, "my desc") { }
54
37
  group.description.should == group.metadata[:example_group][:description]
55
38
  end
56
39
 
@@ -59,39 +42,39 @@ module Rspec::Core
59
42
  describe '#metadata' do
60
43
 
61
44
  it "adds the third parameter to the metadata" do
62
- ExampleGroup.create(Object, nil, 'foo' => 'bar') { }.metadata.should include({ "foo" => 'bar' })
45
+ ExampleGroup.describe(Object, nil, 'foo' => 'bar') { }.metadata.should include({ "foo" => 'bar' })
63
46
  end
64
47
 
65
48
  it "adds the caller to metadata" do
66
- ExampleGroup.create(Object) { }.metadata[:example_group][:caller].any? {|f|
49
+ ExampleGroup.describe(Object) { }.metadata[:example_group][:caller].any? {|f|
67
50
  f =~ /#{__FILE__}/
68
51
  }.should be_true
69
52
  end
70
53
 
71
54
  it "adds the the file_path to metadata" do
72
- ExampleGroup.create(Object) { }.metadata[:example_group][:file_path].should == __FILE__
55
+ ExampleGroup.describe(Object) { }.metadata[:example_group][:file_path].should == __FILE__
73
56
  end
74
57
 
75
58
  it "has a reader for file_path" do
76
- ExampleGroup.create(Object) { }.file_path.should == __FILE__
59
+ ExampleGroup.describe(Object) { }.file_path.should == __FILE__
77
60
  end
78
61
 
79
62
  it "adds the line_number to metadata" do
80
- ExampleGroup.create(Object) { }.metadata[:example_group][:line_number].should == __LINE__
63
+ ExampleGroup.describe(Object) { }.metadata[:example_group][:line_number].should == __LINE__
81
64
  end
82
65
 
83
66
  end
84
67
 
85
- describe "adding before, after, and around hooks" do
68
+ describe "before, after, and around hooks" do
86
69
 
87
- it "should expose the before each blocks at before_eachs" do
88
- group = ExampleGroup.create
70
+ it "exposes the before each blocks at before_eachs" do
71
+ group = ExampleGroup.describe
89
72
  group.before(:each) { 'foo' }
90
73
  group.should have(1).before_eachs
91
74
  end
92
75
 
93
- it "should maintain the before each block order" do
94
- group = ExampleGroup.create
76
+ it "maintains the before each block order" do
77
+ group = ExampleGroup.describe
95
78
  group.before(:each) { 15 }
96
79
  group.before(:each) { 'A' }
97
80
  group.before(:each) { 33.5 }
@@ -101,14 +84,14 @@ module Rspec::Core
101
84
  group.before_eachs[2].call.should == 33.5
102
85
  end
103
86
 
104
- it "should expose the before all blocks at before_alls" do
105
- group = ExampleGroup.create
87
+ it "exposes the before all blocks at before_alls" do
88
+ group = ExampleGroup.describe
106
89
  group.before(:all) { 'foo' }
107
90
  group.should have(1).before_alls
108
91
  end
109
92
 
110
- it "should maintain the before all block order" do
111
- group = ExampleGroup.create
93
+ it "maintains the before all block order" do
94
+ group = ExampleGroup.describe
112
95
  group.before(:all) { 15 }
113
96
  group.before(:all) { 'A' }
114
97
  group.before(:all) { 33.5 }
@@ -118,14 +101,14 @@ module Rspec::Core
118
101
  group.before_alls[2].call.should == 33.5
119
102
  end
120
103
 
121
- it "should expose the after each blocks at after_eachs" do
122
- group = ExampleGroup.create
104
+ it "exposes the after each blocks at after_eachs" do
105
+ group = ExampleGroup.describe
123
106
  group.after(:each) { 'foo' }
124
107
  group.should have(1).after_eachs
125
108
  end
126
109
 
127
- it "should maintain the after each block order" do
128
- group = ExampleGroup.create
110
+ it "maintains the after each block order" do
111
+ group = ExampleGroup.describe
129
112
  group.after(:each) { 15 }
130
113
  group.after(:each) { 'A' }
131
114
  group.after(:each) { 33.5 }
@@ -135,14 +118,14 @@ module Rspec::Core
135
118
  group.after_eachs[2].call.should == 33.5
136
119
  end
137
120
 
138
- it "should expose the after all blocks at after_alls" do
139
- group = ExampleGroup.create
121
+ it "exposes the after all blocks at after_alls" do
122
+ group = ExampleGroup.describe
140
123
  group.after(:all) { 'foo' }
141
124
  group.should have(1).after_alls
142
125
  end
143
126
 
144
- it "should maintain the after each block order" do
145
- group = ExampleGroup.create
127
+ it "maintains the after each block order" do
128
+ group = ExampleGroup.describe
146
129
  group.after(:all) { 15 }
147
130
  group.after(:all) { 'A' }
148
131
  group.after(:all) { 33.5 }
@@ -152,8 +135,8 @@ module Rspec::Core
152
135
  group.after_alls[2].call.should == 33.5
153
136
  end
154
137
 
155
- it "should expose the around each blocks at after_alls" do
156
- group = ExampleGroup.create
138
+ it "exposes the around each blocks at after_alls" do
139
+ group = ExampleGroup.describe
157
140
  group.around(:each) { 'foo' }
158
141
  group.should have(1).around_eachs
159
142
  end
@@ -162,22 +145,22 @@ module Rspec::Core
162
145
 
163
146
  describe "adding examples" do
164
147
 
165
- it "should allow adding an example using 'it'" do
166
- group = ExampleGroup.create
148
+ it "allows adding an example using 'it'" do
149
+ group = ExampleGroup.describe
167
150
  group.it("should do something") { }
168
151
  group.examples.size.should == 1
169
152
  end
170
153
 
171
- it "should expose all examples at examples" do
172
- group = ExampleGroup.create
154
+ it "exposes all examples at examples" do
155
+ group = ExampleGroup.describe
173
156
  group.it("should do something 1") { }
174
157
  group.it("should do something 2") { }
175
158
  group.it("should do something 3") { }
176
159
  group.examples.size.should == 3
177
160
  end
178
161
 
179
- it "should maintain the example order" do
180
- group = ExampleGroup.create
162
+ it "maintains the example order" do
163
+ group = ExampleGroup.describe
181
164
  group.it("should 1") { }
182
165
  group.it("should 2") { }
183
166
  group.it("should 3") { }
@@ -211,54 +194,41 @@ module Rspec::Core
211
194
  end
212
195
 
213
196
  describe "#run_examples" do
214
- before do
215
- @fake_formatter = Formatters::BaseFormatter.new
216
- end
217
-
218
- def stub_example_group
219
- stub('example_group',
220
- :metadata => Metadata.new.process(
221
- 'example_group_name',
222
- :caller => ['foo_spec.rb:37']
223
- )
224
- ).as_null_object
225
- end
226
197
 
227
- it "should return true if all examples pass" do
228
- use_formatter(@fake_formatter) do
229
- passing_example1 = Example.new(stub_example_group, 'description', {}, (lambda { 1.should == 1 }))
230
- passing_example2 = Example.new(stub_example_group, 'description', {}, (lambda { 1.should == 1 }))
231
- ExampleGroup.stub(:examples_to_run).and_return([passing_example1, passing_example2])
198
+ let(:reporter) { double("reporter").as_null_object }
232
199
 
233
- ExampleGroup.run_examples(stub_example_group, mock('reporter').as_null_object).should be_true
200
+ it "returns true if all examples pass" do
201
+ group = ExampleGroup.describe('group') do
202
+ example('ex 1') { 1.should == 1 }
203
+ example('ex 2') { 1.should == 1 }
234
204
  end
205
+ group.stub(:examples_to_run) { group.examples }
206
+ group.run(reporter).should be_true
235
207
  end
236
208
 
237
- it "should return false if any of the examples return false" do
238
- use_formatter(@fake_formatter) do
239
- failing_example = Example.new(stub_example_group, 'description', {}, (lambda { 1.should == 2 }))
240
- passing_example = Example.new(stub_example_group, 'description', {}, (lambda { 1.should == 1 }))
241
- ExampleGroup.stub!(:examples_to_run).and_return([failing_example, passing_example])
242
-
243
- ExampleGroup.run_examples(stub_example_group, mock('reporter').as_null_object).should be_false
209
+ it "returns false if any of the examples fail" do
210
+ group = ExampleGroup.describe('group') do
211
+ example('ex 1') { 1.should == 1 }
212
+ example('ex 2') { 1.should == 2 }
244
213
  end
214
+ group.stub(:examples_to_run) { group.examples }
215
+ group.run(reporter).should be_false
245
216
  end
246
217
 
247
- it "should run all examples, regardless of any of them failing" do
248
- use_formatter(@fake_formatter) do
249
- failing_example = Example.new(stub_example_group, 'description', {}, (lambda { 1.should == 2 }))
250
- passing_example = Example.new(stub_example_group, 'description', {}, (lambda { 1.should == 1 }))
251
- ExampleGroup.stub!(:examples_to_run).and_return([failing_example, passing_example])
252
-
253
- passing_example.should_receive(:run)
254
-
255
- ExampleGroup.run_examples(stub_example_group, mock('reporter', :null_object => true))
218
+ it "runs all examples, regardless of any of them failing" do
219
+ group = ExampleGroup.describe('group') do
220
+ example('ex 1') { 1.should == 2 }
221
+ example('ex 2') { 1.should == 1 }
256
222
  end
223
+ group.stub(:examples_to_run) { group.examples }
224
+ group.examples_to_run.each do |example|
225
+ example.should_receive(:run)
226
+ end
227
+ group.run(reporter).should be_false
257
228
  end
258
-
259
229
  end
260
230
 
261
- describe "how instance variables inherit" do
231
+ describe "how instance variables are inherited" do
262
232
  before(:all) do
263
233
  @before_all_top_level = 'before_all_top_level'
264
234
  end
@@ -317,47 +287,6 @@ module Rspec::Core
317
287
  end
318
288
  end
319
289
 
320
- describe "#let" do
321
- let(:counter) do
322
- Class.new do
323
- def initialize
324
- @count = 0
325
- end
326
- def count
327
- @count += 1
328
- end
329
- end.new
330
- end
331
-
332
- it "generates an instance method" do
333
- counter.count.should == 1
334
- end
335
-
336
- it "caches the value" do
337
- counter.count.should == 1
338
- counter.count.should == 2
339
- end
340
- end
341
-
342
- describe "#let!" do
343
- let!(:creator) do
344
- class Creator
345
- @count = 0
346
- def self.count
347
- @count += 1
348
- end
349
- end
350
- end
351
-
352
- it "evaluates the value non-lazily" do
353
- lambda { Creator.count }.should_not raise_error
354
- end
355
-
356
- it "does not interfere between tests" do
357
- Creator.count.should == 1
358
- end
359
- end
360
-
361
290
  describe "#around" do
362
291
 
363
292
  around(:each) do |example|
@@ -374,6 +303,19 @@ module Rspec::Core
374
303
  SelfObserver.cache.length.should == 1
375
304
  end
376
305
  end
377
- end
378
306
 
307
+ describe "top_level_description" do
308
+ it "returns the description from the outermost example group" do
309
+ group = nil
310
+ ExampleGroup.describe("top") do
311
+ context "middle" do
312
+ group = describe "bottom" do
313
+ end
314
+ end
315
+ end
316
+
317
+ group.top_level_description.should == "top"
318
+ end
319
+ end
320
+ end
379
321
  end