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

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.
@@ -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