rspec-core 2.0.0.beta.1 → 2.0.0.beta.2

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.
@@ -1,50 +1,68 @@
1
- # RSpec Core
1
+ # Rspec Core
2
2
 
3
- rspec-core includes the runner, output formatters, and the `rspec` command.
3
+ Rspec is an automated testing framework for Ruby, designed for use in Behaviour
4
+ Driven Development and Test Driven Development.
4
5
 
5
- rspec-core is currently in alpha release. While you are welcome to track, fork,
6
- explore, etc, we're too early in the process to start fielding pull requests
7
- and or issues from outside the core development team, so please don't waste
8
- your time until this notice changes.
6
+ rspec-core includes the Rspec runner, output formatters, and the `rspec`
7
+ command.
9
8
 
10
9
  ## Install
11
10
 
12
11
  [sudo] gem install rspec --prerelease
13
12
 
14
- This will install rspec, rspec-core, rspec-expectations and rspec-mocks.
13
+ This will install the rspec, rspec-core, rspec-expectations and rspec-mocks
14
+ gems.
15
15
 
16
- ## Known Issues
16
+ ## Get Started
17
17
 
18
- ### Ruby-1.9
18
+ Start with a simple example of behavior you expect from your system. Do
19
+ this before you write any code:
19
20
 
20
- Due to changes in scoping rules in 1.9, classes defined inside example groups
21
- are not visible to the examples. For example:
22
-
23
- describe "something" do
24
- class Foo
25
- end
26
-
27
- it "does something" do
28
- Foo.new
21
+ # in spec/calculator_spec.rb
22
+ describe Calculator, "add" do
23
+ it "returns the sum of its arguments" do
24
+ Calculator.new.add(1, 2).should eq(3)
29
25
  end
30
26
  end
31
27
 
32
- This runs without incident in ruby-1.8, but raises an `uninitialized constant`
33
- error in ruby-1.9. We had solved this in rspec-1.x, but rspec-2 has a slightly
34
- different object model, so this has (for the moment) reared its ugly head. We'll
35
- certainly resolve this before rspec-core-2.0.0 (final) is released.
28
+ Run this with the rspec command, and watch it fail:
36
29
 
37
- You can, of course, fully qualify the declaration and everything works fine:
30
+ $ rspec spec/calculator_spec.rb
31
+ ./spec/calculator_spec.rb:1: uninitialized constant Calculator
38
32
 
39
- describe "something" do
40
- class ::Foo
41
- end
33
+ Implement the simplest solution:
42
34
 
43
- it "does something" do
44
- Foo.new
35
+ # in lib/calculator.rb
36
+ class Calculator
37
+ def add(a,b)
38
+ a + b
45
39
  end
46
40
  end
47
41
 
42
+ Be sure to require the implementation file in the spec:
43
+
44
+ # in spec/calculator_spec.rb
45
+ # - Rspec adds ./lib to the $LOAD_PATH, so you can
46
+ # just require "calculator" directly
47
+ require "calculator"
48
+
49
+ Now run the spec again, and watch it pass:
50
+
51
+ $ rspec spec/calculator_spec.rb
52
+ .
53
+
54
+ Finished in 0.000315 seconds
55
+ 1 example, 0 failures
56
+
57
+ Use the documentation formatter to see the resulting spec:
58
+
59
+ $ rspec spec/calculator_spec.rb --format doc
60
+ Calculator add
61
+ returns the sum of its arguments
62
+
63
+ Finished in 0.000379 seconds
64
+ 1 example, 0 failures
65
+
48
66
  #### Also see
49
67
 
50
68
  * [http://github.com/rspec/rspec](http://github.com/rspec/rspec)
data/Rakefile CHANGED
@@ -59,20 +59,20 @@ task :clobber do
59
59
  end
60
60
 
61
61
  if RUBY_VERSION.to_f >= 1.9
62
- Cucumber::Rake::Task.new :features do |t|
62
+ Cucumber::Rake::Task.new(:cucumber) do |t|
63
63
  t.cucumber_opts = %w{--format progress}
64
64
  end
65
65
 
66
- task :default => [:check_dependencies, :spec, :features]
66
+ task :default => [:check_dependencies, :spec, :cucumber]
67
67
  else
68
- Cucumber::Rake::Task.new :features do |t|
68
+ Cucumber::Rake::Task.new(:cucumber) do |t|
69
69
  t.rcov = true
70
70
  t.rcov_opts = %[-Ilib -Ispec --exclude "mocks,expectations,gems/*,features,spec/ruby_forker,spec/rspec,spec/resources,spec/lib,spec/spec_helper.rb,db/*,/Library/Ruby/*,config/*"]
71
71
  t.rcov_opts << %[--text-report --sort coverage --aggregate coverage.data]
72
72
  t.cucumber_opts = %w{--format progress}
73
73
  end
74
74
 
75
- task :default => [:check_dependencies, :rcov, :features]
75
+ task :default => [:check_dependencies, :rcov, :cucumber]
76
76
  end
77
77
 
78
78
  Rake::RDocTask.new do |rdoc|
@@ -0,0 +1,94 @@
1
+ # Upgrade to rspec-core-2.0
2
+
3
+ ## What's changed
4
+
5
+ ### Rspec namespace
6
+
7
+ The root namespace is now `Rspec` instead of `Spec`, and the root directory
8
+ under `lib` is `rspec` instead of `spec`.
9
+
10
+ ### Configuration
11
+
12
+ Typically in `spec/spec_helper.rb`, configuration is now done like this:
13
+
14
+ Rspec.configure do |c|
15
+ # ....
16
+ end
17
+
18
+ ### rspec commmand
19
+
20
+ The command to run specs is now `rspec` instead of `spec`.
21
+
22
+ rspec ./spec
23
+
24
+ ## What's new
25
+
26
+ ### Runner
27
+
28
+ The new runner for rspec-2 comes from Micronaut.
29
+
30
+ ### Metadata!
31
+
32
+ In rspec-2, every example and example group comes with metadata information
33
+ like the file and line number on which it was declared, the arguments passed to
34
+ `describe` and `it`, etc. This metadata can be appended to through a hash
35
+ argument passed to `describe` or `it`, allowing us to pre and post-process
36
+ each example in a variety of ways.
37
+
38
+ The most obvious use is for filtering the run. For example:
39
+
40
+ # in spec/spec_helper.rb
41
+ Rspec.configure do |c|
42
+ c.filter_run :focus => true
43
+ end
44
+
45
+ # in any spec file
46
+ describe "something" do
47
+ it "does something", :focus => true do
48
+ # ....
49
+ end
50
+ end
51
+
52
+ When you run the `rspec` command, rspec will run only the examples that have
53
+ `:focus => true` in the hash.
54
+
55
+ You can also add `run_all_when_everything_filtered` to the config:
56
+
57
+ Rspec.configure do |c|
58
+ c.filter_run :focus => true
59
+ c.run_all_when_everything_filtered = true
60
+ end
61
+
62
+ Now if there are no examples tagged with `:focus => true`, all examples
63
+ will be run. This makes it really easy to focus on one example for a
64
+ while, but then go back to running all of the examples by removing that
65
+ argument from `it`. Works with `describe` too, in which case it runs
66
+ all of the examples in that group.
67
+
68
+ The configuration will accept a lambda, which provides a lot of flexibility
69
+ in filtering examples. Say, for example, you have a spec for functionality that
70
+ behaves slightly differently in Ruby 1.8 and Ruby 1.9. We have that in
71
+ rspec-core, and here's how we're getting the right stuff to run under the
72
+ right version:
73
+
74
+ # in spec/spec_helper.rb
75
+ Rspec.configure do |c|
76
+ c.exclusion_filter = { :ruby => lambda {|version|
77
+ !(RUBY_VERSION.to_s =~ /^#{version.to_s}/)
78
+ }}
79
+ end
80
+
81
+ # in any spec file
82
+ describe "something" do
83
+ it "does something", :ruby => 1.8 do
84
+ # ....
85
+ end
86
+
87
+ it "does something", :ruby => 1.9 do
88
+ # ....
89
+ end
90
+ end
91
+
92
+ In this case, we're using `exclusion_filter` instead of `filter_run` or
93
+ `filter`, which indicate _inclusion_ filters. So each of those examples is
94
+ excluded if we're _not_ running the version of Ruby they work with.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.0.0.beta.1
1
+ 2.0.0.beta.2
@@ -2,10 +2,9 @@ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
2
  $LOAD_PATH << File.expand_path('../../../rspec-expectations/lib', __FILE__)
3
3
  $LOAD_PATH << File.expand_path('../../../rspec-mocks/lib', __FILE__)
4
4
  require 'rspec/expectations'
5
- require 'rspec/autorun'
5
+ require 'rspec/core'
6
6
 
7
7
  Rspec.configure do |c|
8
8
  c.mock_with :rspec
9
- c.include Rspec::Matchers
10
9
  end
11
10
 
@@ -1,2 +1,2 @@
1
1
  require 'rspec/core'
2
- Rspec::Core.configuration.autorun!
2
+ Rspec::Core::Runner.autorun
@@ -7,7 +7,6 @@ require 'rspec/core/configuration'
7
7
  require 'rspec/core/command_line_options'
8
8
  require 'rspec/core/runner'
9
9
  require 'rspec/core/example'
10
- require 'rspec/core/metadata'
11
10
  require 'rspec/core/kernel_extensions'
12
11
  require 'rspec/core/shared_example_group'
13
12
  require 'rspec/core/example_group_subject'
@@ -1,26 +1,18 @@
1
1
  module Rspec
2
2
  module Core
3
3
  class Configuration
4
- # All of the defined advice in the configuration (before/after/around)
5
- attr_reader :advice
4
+ # Control what examples are run by filtering
5
+ attr_accessor :filter
6
6
 
7
- # Allows you to control what examples are ran by filtering
8
- attr_reader :filter
7
+ # Control what examples are not run by filtering
8
+ attr_accessor :exclusion_filter
9
9
 
10
- attr_reader :exclusion_filter
11
-
12
- # Modules that will be included or extended based on given filters
13
- attr_reader :include_or_extend_modules
14
-
15
- # Run all examples if the run is filtered, and no examples were found. Normally this is what you want -
16
- # when using focused examples for instance. Defaults to true
17
- attr_accessor :run_all_when_everything_filtered
18
-
19
- attr_reader :options
10
+ # Run all examples if the run is filtered, and no examples were found.
11
+ attr_writer :run_all_when_everything_filtered
20
12
 
21
13
  def initialize
22
14
  @run_all_when_everything_filtered = false
23
- @advice = {
15
+ @hooks = {
24
16
  :before => { :each => [], :all => [], :suite => [] },
25
17
  :after => { :each => [], :all => [], :suite => [] }
26
18
  }
@@ -47,15 +39,15 @@ module Rspec
47
39
  end
48
40
 
49
41
  def cleaned_from_backtrace?(line)
50
- options[:backtrace_clean_patterns].any? { |regex| line =~ regex }
42
+ @options[:backtrace_clean_patterns].any? { |regex| line =~ regex }
51
43
  end
52
44
 
53
45
  def backtrace_clean_patterns
54
- options[:backtrace_clean_patterns]
46
+ @options[:backtrace_clean_patterns]
55
47
  end
56
48
 
57
49
  def mock_framework=(use_me_to_mock)
58
- options[:mock_framework] = use_me_to_mock
50
+ @options[:mock_framework] = use_me_to_mock
59
51
 
60
52
  mock_framework_class = case use_me_to_mock.to_s
61
53
  when /rspec/i
@@ -75,24 +67,24 @@ module Rspec
75
67
  Rspec::Core::Mocking::WithAbsolutelyNothing
76
68
  end
77
69
 
78
- options[:mock_framework_class] = mock_framework_class
70
+ @options[:mock_framework_class] = mock_framework_class
79
71
  Rspec::Core::ExampleGroup.send(:include, mock_framework_class)
80
72
  end
81
73
 
82
74
  def mock_framework
83
- options[:mock_framework]
75
+ @options[:mock_framework]
84
76
  end
85
77
 
86
78
  def filename_pattern
87
- options[:filename_pattern]
79
+ @options[:filename_pattern]
88
80
  end
89
81
 
90
82
  def filename_pattern=(new_pattern)
91
- options[:filename_pattern] = new_pattern
83
+ @options[:filename_pattern] = new_pattern
92
84
  end
93
85
 
94
86
  def color_enabled=(on_or_off)
95
- options[:color_enabled] = on_or_off
87
+ @options[:color_enabled] = on_or_off
96
88
  end
97
89
 
98
90
  def full_backtrace=(bool)
@@ -118,7 +110,7 @@ EOM
118
110
  end
119
111
 
120
112
  def color_enabled?
121
- options[:color_enabled]
113
+ @options[:color_enabled]
122
114
  end
123
115
 
124
116
  def line_number=(line_number)
@@ -131,15 +123,15 @@ EOM
131
123
 
132
124
  # Enable profiling of example run - defaults to false
133
125
  def profile_examples
134
- options[:profile_examples]
126
+ @options[:profile_examples]
135
127
  end
136
128
 
137
129
  def profile_examples=(on_or_off)
138
- options[:profile_examples] = on_or_off
130
+ @options[:profile_examples] = on_or_off
139
131
  end
140
132
 
141
133
  def formatter_class
142
- options[:formatter_class]
134
+ @options[:formatter_class]
143
135
  end
144
136
 
145
137
  def formatter=(formatter_to_use)
@@ -151,7 +143,7 @@ EOM
151
143
  else
152
144
  raise ArgumentError, "Formatter '#{formatter_to_use}' unknown - maybe you meant 'documentation' or 'progress'?."
153
145
  end
154
- options[:formatter_class] = formatter_class
146
+ @options[:formatter_class] = formatter_class
155
147
  end
156
148
 
157
149
  def formatter
@@ -159,11 +151,11 @@ EOM
159
151
  end
160
152
 
161
153
  def files_to_run
162
- options[:files_to_run]
154
+ @options[:files_to_run]
163
155
  end
164
156
 
165
157
  def files_or_directories_to_run=(*files)
166
- options[:files_to_run] = files.flatten.inject([]) do |result, file|
158
+ @options[:files_to_run] = files.flatten.inject([]) do |result, file|
167
159
  if File.directory?(file)
168
160
  filename_pattern.split(",").each do |pattern|
169
161
  result += Dir["#{file}/#{pattern.strip}"]
@@ -183,10 +175,6 @@ EOM
183
175
  Rspec::Core::ExampleGroup.alias_example_to(new_name, extra_options)
184
176
  end
185
177
 
186
- def autorun!
187
- Rspec::Core::Runner.autorun
188
- end
189
-
190
178
  def filter_run(options={})
191
179
  @filter = options unless @filter and @filter[:line_number] || @filter[:full_description]
192
180
  end
@@ -209,29 +197,29 @@ EOM
209
197
  end
210
198
 
211
199
  def include(mod, options={})
212
- include_or_extend_modules << [:include, mod, options]
200
+ @include_or_extend_modules << [:include, mod, options]
213
201
  end
214
202
 
215
203
  def extend(mod, options={})
216
- include_or_extend_modules << [:extend, mod, options]
204
+ @include_or_extend_modules << [:extend, mod, options]
217
205
  end
218
206
 
219
207
  def find_modules(group)
220
- include_or_extend_modules.select do |include_or_extend, mod, filters|
208
+ @include_or_extend_modules.select do |include_or_extend, mod, filters|
221
209
  group.all_apply?(filters)
222
210
  end
223
211
  end
224
212
 
225
213
  def before(each_or_all=:each, options={}, &block)
226
- advice[:before][each_or_all] << [options, block]
214
+ @hooks[:before][each_or_all] << [options, block]
227
215
  end
228
216
 
229
217
  def after(each_or_all=:each, options={}, &block)
230
- advice[:after][each_or_all] << [options, block]
218
+ @hooks[:after][each_or_all] << [options, block]
231
219
  end
232
220
 
233
- def find_advice(desired_advice_type, desired_each_or_all, group)
234
- advice[desired_advice_type][desired_each_or_all].select do |filters, block|
221
+ def find_hook(hook, each_or_all, group)
222
+ @hooks[hook][each_or_all].select do |filters, block|
235
223
  group.all_apply?(filters)
236
224
  end.map { |filters, block| block }
237
225
  end
@@ -1,18 +1,19 @@
1
- require 'rspec/core/advice'
1
+ require 'rspec/core/hooks'
2
2
  require 'rspec/core/example_group_subject'
3
+ require 'rspec/core/let'
3
4
  require 'rspec/core/metadata'
4
5
 
5
6
  module Rspec
6
7
  module Core
7
8
  class ExampleGroup
8
- extend Advice
9
+ extend Hooks
9
10
  include ExampleGroupSubject
11
+ include Let
10
12
 
11
13
  attr_accessor :running_example
12
14
 
13
15
  def self.inherited(klass)
14
- super(klass)
15
- Rspec::Core.configuration.autorun!
16
+ Rspec::Core::Runner.autorun
16
17
  Rspec::Core.world.example_groups << klass
17
18
  end
18
19
 
@@ -83,8 +84,8 @@ module Rspec
83
84
  @metadata
84
85
  end
85
86
 
86
- def self.name(friendly=true)
87
- friendly ? metadata[:example_group][:name] : super()
87
+ def self.display_name
88
+ metadata[:example_group][:name]
88
89
  end
89
90
 
90
91
  def self.description
@@ -155,26 +156,26 @@ module Rspec
155
156
  if superclass.respond_to?(:before_all_ivars)
156
157
  superclass.before_all_ivars.each { |ivar, val| running_example.instance_variable_set(ivar, val) }
157
158
  end
158
- configuration.find_advice(:before, :all, self).each { |blk| running_example.instance_eval(&blk) }
159
+ configuration.find_hook(:before, :all, self).each { |blk| running_example.instance_eval(&blk) }
159
160
 
160
161
  before_alls.each { |blk| running_example.instance_eval(&blk) }
161
162
  running_example.instance_variables.each { |ivar| before_all_ivars[ivar] = running_example.instance_variable_get(ivar) }
162
163
  end
163
164
 
164
165
  def self.eval_before_eachs(running_example)
165
- configuration.find_advice(:before, :each, self).each { |blk| running_example.instance_eval(&blk) }
166
+ configuration.find_hook(:before, :each, self).each { |blk| running_example.instance_eval(&blk) }
166
167
  before_ancestors.each { |ancestor| ancestor.before_eachs.each { |blk| running_example.instance_eval(&blk) } }
167
168
  end
168
169
 
169
170
  def self.eval_after_alls(running_example)
170
171
  after_alls.each { |blk| running_example.instance_eval(&blk) }
171
- configuration.find_advice(:after, :all, self).each { |blk| running_example.instance_eval(&blk) }
172
+ configuration.find_hook(:after, :all, self).each { |blk| running_example.instance_eval(&blk) }
172
173
  before_all_ivars.keys.each { |ivar| before_all_ivars[ivar] = running_example.instance_variable_get(ivar) }
173
174
  end
174
175
 
175
176
  def self.eval_after_eachs(running_example)
176
177
  after_ancestors.each { |ancestor| ancestor.after_eachs.each { |blk| running_example.instance_eval(&blk) } }
177
- configuration.find_advice(:after, :each, self).each { |blk| running_example.instance_eval(&blk) }
178
+ configuration.find_hook(:after, :each, self).each { |blk| running_example.instance_eval(&blk) }
178
179
  end
179
180
 
180
181
  def self.run(reporter)
@@ -201,12 +202,6 @@ module Rspec
201
202
  self == Rspec::Core::ExampleGroup ? 'Rspec::Core::ExampleGroup' : name
202
203
  end
203
204
 
204
- def self.let(name, &block)
205
- define_method(name) do
206
- __memoized[name] ||= instance_eval(&block)
207
- end
208
- end
209
-
210
205
  def self.all_apply?(filters)
211
206
  metadata.all_apply?(filters)
212
207
  end
@@ -215,10 +210,6 @@ module Rspec
215
210
  self.class.describes
216
211
  end
217
212
 
218
- def __memoized
219
- @__memoized ||= {}
220
- end
221
-
222
213
  def __reset__
223
214
  instance_variables.each { |ivar| remove_instance_variable(ivar) }
224
215
  __memoized.clear
@@ -3,9 +3,9 @@ module Rspec
3
3
  module ExampleGroupSubject
4
4
 
5
5
  def self.included(kls)
6
- kls.extend ClassMethods
7
- kls.send :alias_method, :__should_for_example_group__, :should
8
- kls.send :alias_method, :__should_not_for_example_group__, :should_not
6
+ kls.extend ClassMethods
7
+ kls.__send__ :alias_method, :__should_for_example_group__, :should
8
+ kls.__send__ :alias_method, :__should_not_for_example_group__, :should_not
9
9
  end
10
10
 
11
11
  def subject
@@ -17,7 +17,7 @@ module Rspec
17
17
  described_example_group_chain.each_with_index do |nested_example_group, i|
18
18
  unless nested_example_group == @previous_nested_example_groups[i]
19
19
  at_root_level = (i == 0)
20
- desc_or_name = at_root_level ? nested_example_group.name : nested_example_group.description
20
+ desc_or_name = at_root_level ? nested_example_group.display_name : nested_example_group.description
21
21
  output.puts if at_root_level
22
22
  output.puts "#{' ' * i}#{desc_or_name}"
23
23
  end
@@ -79,4 +79,4 @@ module Rspec
79
79
 
80
80
  end
81
81
 
82
- end
82
+ end
@@ -1,6 +1,6 @@
1
1
  module Rspec
2
2
  module Core
3
- module Advice
3
+ module Hooks
4
4
  def before_blocks
5
5
  @before_blocks ||= { :all => [], :each => [] }
6
6
  end
@@ -0,0 +1,28 @@
1
+ module Rspec
2
+ module Core
3
+
4
+ module Let
5
+
6
+ module ClassMethods
7
+ def let(name, &block)
8
+ define_method(name) do
9
+ __memoized[name] ||= instance_eval(&block)
10
+ end
11
+ end
12
+ end
13
+
14
+ module InstanceMethods
15
+ def __memoized
16
+ @__memoized ||= {}
17
+ end
18
+ end
19
+
20
+ def self.included(mod)
21
+ mod.extend ClassMethods
22
+ mod.__send__ :include, InstanceMethods
23
+ end
24
+
25
+ end
26
+
27
+ end
28
+ end
@@ -164,10 +164,10 @@ module Rspec::Core
164
164
 
165
165
  end
166
166
 
167
- describe "run_all_when_everything_filtered" do
167
+ describe "run_all_when_everything_filtered?" do
168
168
 
169
169
  it "defaults to false" do
170
- config.run_all_when_everything_filtered.should == false
170
+ config.run_all_when_everything_filtered?.should == false
171
171
  end
172
172
 
173
173
  it "can be queried with question method" do
@@ -213,7 +213,7 @@ module Rspec::Core
213
213
  describe "full_backtrace=" do
214
214
  it "clears the backtrace clean patterns" do
215
215
  config.full_backtrace = true
216
- config.options[:backtrace_clean_patterns].should == []
216
+ config.backtrace_clean_patterns.should == []
217
217
  end
218
218
  end
219
219
 
@@ -1,5 +1,15 @@
1
1
  require 'spec_helper'
2
2
 
3
+ class SelfObserver
4
+ def self.cache
5
+ @cache ||= []
6
+ end
7
+
8
+ def initialize
9
+ self.class.cache << self
10
+ end
11
+ end
12
+
3
13
  module Rspec::Core
4
14
 
5
15
  describe ExampleGroup do
@@ -16,25 +26,25 @@ module Rspec::Core
16
26
 
17
27
  end
18
28
 
19
- describe '#name' do
29
+ describe '#display_name' do
20
30
 
21
31
  it "uses the first parameter as name" do
22
- ExampleGroup.create("my favorite pony") { }.name.should == 'my favorite pony'
32
+ ExampleGroup.create("my favorite pony") { }.display_name.should == 'my favorite pony'
23
33
  end
24
34
 
25
35
  it "accepts a constant as the first parameter" do
26
- ExampleGroup.create(Object) { }.name.should == 'Object'
36
+ ExampleGroup.create(Object) { }.display_name.should == 'Object'
27
37
  end
28
38
 
29
39
  it "concats nested names" do
30
40
  group = ExampleGroup.create(Object, 'test') {}
31
- group.name.should == 'Object test'
41
+ group.display_name.should == 'Object test'
32
42
 
33
43
  nested_group_one = group.describe('nested one') { }
34
- nested_group_one.name.should == 'Object test nested one'
44
+ nested_group_one.display_name.should == 'Object test nested one'
35
45
 
36
46
  nested_group_two = nested_group_one.describe('nested two') { }
37
- nested_group_two.name.should == 'Object test nested one nested two'
47
+ nested_group_two.display_name.should == 'Object test nested one nested two'
38
48
  end
39
49
 
40
50
  end
@@ -290,13 +300,12 @@ module Rspec::Core
290
300
  @before_all_top_level.should == 'before_all_top_level'
291
301
  end
292
302
 
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
303
+ it "should be able to access the before all ivars in the before_all_ivars hash", :ruby => 1.8 do
304
+ running_example.example_group.before_all_ivars.should include('@before_all_top_level' => 'before_all_top_level')
305
+ end
306
+
307
+ it "should be able to access the before all ivars in the before_all_ivars hash", :ruby => 1.9 do
308
+ running_example.example_group.before_all_ivars.should include(:@before_all_top_level => 'before_all_top_level')
300
309
  end
301
310
 
302
311
  describe "but now I am nested" do
@@ -356,28 +365,19 @@ module Rspec::Core
356
365
  end
357
366
 
358
367
  describe "#around" do
359
- class Thing
360
- def self.cache
361
- @cache ||= []
362
- end
363
-
364
- def initialize
365
- self.class.cache << self
366
- end
367
- end
368
368
 
369
369
  around(:each) do |example|
370
- Thing.new
370
+ SelfObserver.new
371
371
  example.run
372
- Thing.cache.clear
372
+ SelfObserver.cache.clear
373
373
  end
374
374
 
375
- it "has 1 Thing (1)" do
376
- Thing.cache.length.should == 1
375
+ it "has 1 SelfObserver (1)" do
376
+ SelfObserver.cache.length.should == 1
377
377
  end
378
378
 
379
- it "has 1 Thing (2)" do
380
- Thing.cache.length.should == 1
379
+ it "has 1 SelfObserver (2)" do
380
+ SelfObserver.cache.length.should == 1
381
381
  end
382
382
  end
383
383
  end
@@ -31,7 +31,7 @@ module Rspec::Core
31
31
 
32
32
  end
33
33
 
34
- describe "explicit subject" do
34
+ describe "explicit subject" do
35
35
  describe "defined in a top level group" do
36
36
  it "replaces the implicit subject in that group" do
37
37
  group = ExampleGroup.create(Array)
@@ -41,19 +41,20 @@ module Rspec::Core
41
41
  end
42
42
 
43
43
  describe "defined in a top level group" do
44
- before do
45
- @group = ExampleGroup.create
46
- @group.subject{ [4,5,6] }
44
+ let(:group) do
45
+ ExampleGroup.create do
46
+ subject{ [4,5,6] }
47
+ end
47
48
  end
48
49
 
49
50
  it "is available in a nested group (subclass)" do
50
- nested = @group.describe("I'm nested!") { }
51
- nested.subject.call.should == [4,5,6]
51
+ nested_group = group.describe("I'm nested!") { }
52
+ nested_group.subject.call.should == [4,5,6]
52
53
  end
53
54
 
54
55
  it "is available in a doubly nested group (subclass)" do
55
- nested_group = @group.describe("Nesting level 1") { }
56
- doubly_nested_group = nested_group.describe("Nesting level 1") { }
56
+ nested_group = group.describe("Nesting level 1") { }
57
+ doubly_nested_group = nested_group.describe("Nesting level 2") { }
57
58
  doubly_nested_group.subject.call.should == [4,5,6]
58
59
  end
59
60
  end
@@ -41,7 +41,7 @@ module Rspec::Core
41
41
  Rspec::Core.world.shared_example_groups.replace(original_shared_example_groups)
42
42
  end
43
43
 
44
- it "should make any shared example_group available at the correct level" do
44
+ it "should make any shared example_group available at the correct level", :ruby => 1.8 do
45
45
  group = ExampleGroup.create('fake group')
46
46
  block = lambda {
47
47
  def self.class_helper; end
@@ -49,14 +49,20 @@ module Rspec::Core
49
49
  }
50
50
  Rspec::Core.world.stub(:shared_example_groups).and_return({ :shared_example_group => block })
51
51
  group.it_should_behave_like :shared_example_group
52
- with_ruby(1.8) do
53
- group.instance_methods.should include('extra_helper')
54
- group.singleton_methods.should include('class_helper')
55
- end
56
- with_ruby(1.9) do
57
- group.instance_methods.should include(:extra_helper)
58
- group.singleton_methods.should include(:class_helper)
59
- end
52
+ group.instance_methods.should include('extra_helper')
53
+ group.singleton_methods.should include('class_helper')
54
+ end
55
+
56
+ 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 {
59
+ def self.class_helper; end
60
+ def extra_helper; end
61
+ }
62
+ Rspec::Core.world.stub(:shared_example_groups).and_return({ :shared_example_group => block })
63
+ group.it_should_behave_like :shared_example_group
64
+ group.instance_methods.should include(:extra_helper)
65
+ group.singleton_methods.should include(:class_helper)
60
66
  end
61
67
 
62
68
  it "should raise when named shared example_group can not be found"
@@ -82,8 +88,8 @@ module Rspec::Core
82
88
 
83
89
  it "adds examples to from two shared groups" do
84
90
  cleanup_shared_example_groups do
85
- group = ExampleGroup.create("example_group") do |g|
86
- g.it("i was already here") {}
91
+ group = ExampleGroup.create("example_group") do
92
+ it("i was already here") {}
87
93
  end
88
94
 
89
95
  group.examples.size.should == 1
@@ -8,10 +8,6 @@ require 'rspec/mocks'
8
8
 
9
9
  Rspec::Core::ExampleGroup.send(:include, Rspec::Matchers)
10
10
 
11
- def with_ruby(version)
12
- yield if RUBY_VERSION.to_s =~ Regexp.compile("^#{version}")
13
- end
14
-
15
11
  module Rspec
16
12
  module Core
17
13
  module Matchers
@@ -40,7 +36,8 @@ end
40
36
 
41
37
  Rspec.configure do |c|
42
38
  c.mock_framework = :rspec
43
- c.filter_run :focused => true
44
- c.run_all_when_everything_filtered = true
45
39
  c.color_enabled = !in_editor?
40
+ c.exclusion_filter = { :ruby => lambda {|version|
41
+ !(RUBY_VERSION.to_s =~ /^#{version.to_s}/)
42
+ }}
46
43
  end
metadata CHANGED
@@ -7,8 +7,8 @@ version: !ruby/object:Gem::Version
7
7
  - 0
8
8
  - 0
9
9
  - beta
10
- - 1
11
- version: 2.0.0.beta.1
10
+ - 2
11
+ version: 2.0.0.beta.2
12
12
  platform: ruby
13
13
  authors:
14
14
  - Chad Humphries
@@ -17,7 +17,7 @@ autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
19
 
20
- date: 2010-03-01 00:00:00 -06:00
20
+ date: 2010-03-04 00:00:00 -06:00
21
21
  default_executable:
22
22
  dependencies:
23
23
  - !ruby/object:Gem::Dependency
@@ -32,8 +32,8 @@ dependencies:
32
32
  - 0
33
33
  - 0
34
34
  - beta
35
- - 1
36
- version: 2.0.0.beta.1
35
+ - 2
36
+ version: 2.0.0.beta.2
37
37
  type: :development
38
38
  version_requirements: *id001
39
39
  - !ruby/object:Gem::Dependency
@@ -48,8 +48,8 @@ dependencies:
48
48
  - 0
49
49
  - 0
50
50
  - beta
51
- - 1
52
- version: 2.0.0.beta.1
51
+ - 2
52
+ version: 2.0.0.beta.2
53
53
  type: :development
54
54
  version_requirements: *id002
55
55
  - !ruby/object:Gem::Dependency
@@ -69,7 +69,6 @@ dependencies:
69
69
  description: Rspec runner and example group classes
70
70
  email: dchelimsky@gmail.com;chad.humphries@gmail.com
71
71
  executables:
72
- - autospec
73
72
  - rspec
74
73
  - spec
75
74
  extensions: []
@@ -84,8 +83,8 @@ files:
84
83
  - README.markdown
85
84
  - Rakefile
86
85
  - TODO.markdown
86
+ - Upgrade.markdown
87
87
  - VERSION
88
- - bin/autospec
89
88
  - bin/rspec
90
89
  - bin/spec
91
90
  - cucumber.yml
@@ -128,7 +127,6 @@ files:
128
127
  - example_specs/passing/predicate_example.rb
129
128
  - example_specs/passing/shared_example_group_example.rb
130
129
  - example_specs/passing/shared_stack_examples.rb
131
- - example_specs/passing/simple_matcher_example.rb
132
130
  - example_specs/passing/spec_helper.rb
133
131
  - example_specs/passing/stack.rb
134
132
  - example_specs/passing/stack_spec.rb
@@ -172,7 +170,6 @@ files:
172
170
  - features/support/env.rb
173
171
  - lib/rspec/autorun.rb
174
172
  - lib/rspec/core.rb
175
- - lib/rspec/core/advice.rb
176
173
  - lib/rspec/core/around_proxy.rb
177
174
  - lib/rspec/core/backward_compatibility.rb
178
175
  - lib/rspec/core/command_line_options.rb
@@ -186,7 +183,9 @@ files:
186
183
  - lib/rspec/core/formatters/base_text_formatter.rb
187
184
  - lib/rspec/core/formatters/documentation_formatter.rb
188
185
  - lib/rspec/core/formatters/progress_formatter.rb
186
+ - lib/rspec/core/hooks.rb
189
187
  - lib/rspec/core/kernel_extensions.rb
188
+ - lib/rspec/core/let.rb
190
189
  - lib/rspec/core/load_path.rb
191
190
  - lib/rspec/core/metadata.rb
192
191
  - lib/rspec/core/mocking/with_absolutely_nothing.rb
@@ -234,7 +233,7 @@ licenses: []
234
233
  post_install_message: |
235
234
  **************************************************
236
235
 
237
- Thank you for installing rspec-core-2.0.0.beta.1
236
+ Thank you for installing rspec-core-2.0.0.beta.2
238
237
 
239
238
  This is beta software. If you are looking
240
239
  for a supported production release, please
@@ -268,7 +267,7 @@ rubyforge_project: rspec
268
267
  rubygems_version: 1.3.6
269
268
  signing_key:
270
269
  specification_version: 3
271
- summary: rspec-core-2.0.0.beta.1
270
+ summary: rspec-core-2.0.0.beta.2
272
271
  test_files:
273
272
  - spec/rspec/core/command_line_options_spec.rb
274
273
  - spec/rspec/core/configuration_spec.rb
@@ -1,4 +0,0 @@
1
- #!/usr/bin/env ruby
2
- ENV['RSPEC'] = 'true' # allows autotest to discover rspec
3
- ENV['AUTOTEST'] = 'true' # allows autotest to run w/ color on linux
4
- system (RUBY_PLATFORM =~ /mswin|mingw/ ? 'autotest.bat' : 'autotest'), *ARGV
@@ -1,31 +0,0 @@
1
- require File.dirname(__FILE__) + '/spec_helper'
2
-
3
- describe "arrays" do
4
- def contain_same_elements_as(expected)
5
- simple_matcher "array with same elements in any order as #{expected.inspect}" do |actual|
6
- if actual.size == expected.size
7
- a, e = actual.dup, expected.dup
8
- until e.empty? do
9
- if i = a.index(e.pop) then a.delete_at(i) end
10
- end
11
- a.empty?
12
- else
13
- false
14
- end
15
- end
16
- end
17
-
18
- describe "can be matched by their contents disregarding order" do
19
- subject { [1,2,2,3] }
20
- it { should contain_same_elements_as([1,2,2,3]) }
21
- it { should contain_same_elements_as([2,3,2,1]) }
22
- it { should_not contain_same_elements_as([3,3,2,1]) }
23
- end
24
-
25
- describe "fail the match with different contents" do
26
- subject { [1,2,3] }
27
- it { should_not contain_same_elements_as([2,3,4])}
28
- it { should_not contain_same_elements_as([1,2,2,3])}
29
- it { should_not contain_same_elements_as([1,2])}
30
- end
31
- end