rspec-core 2.0.0.a2 → 2.0.0.a3

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.
Files changed (55) hide show
  1. data/.document +2 -2
  2. data/.gitignore +1 -0
  3. data/README.markdown +18 -4
  4. data/Rakefile +6 -17
  5. data/bin/rspec +0 -8
  6. data/example_specs/failing/README.txt +1 -1
  7. data/example_specs/failing/spec_helper.rb +7 -2
  8. data/example_specs/failing/team_spec.rb +0 -1
  9. data/features/before_and_after_blocks/around.feature +2 -0
  10. data/features/command_line/example_name_option.feature +54 -0
  11. data/features/command_line/line_number_appended_to_path.feature +39 -0
  12. data/features/command_line/line_number_option.feature +40 -0
  13. data/features/matchers/define_matcher.feature +18 -4
  14. data/features/matchers/define_matcher_outside_rspec.feature +1 -2
  15. data/features/mocks/mix_stubs_and_mocks.feature +2 -0
  16. data/features/subject/explicit_subject.feature +4 -0
  17. data/features/subject/implicit_subject.feature +4 -0
  18. data/features/support/env.rb +15 -1
  19. data/lib/rspec/core.rb +1 -1
  20. data/lib/rspec/core/command_line_options.rb +9 -0
  21. data/lib/rspec/core/configuration.rb +18 -8
  22. data/lib/rspec/core/example.rb +14 -23
  23. data/lib/rspec/core/example_group.rb +39 -30
  24. data/lib/rspec/core/formatters/base_formatter.rb +9 -7
  25. data/lib/rspec/core/formatters/base_text_formatter.rb +2 -2
  26. data/lib/rspec/core/formatters/documentation_formatter.rb +10 -12
  27. data/lib/rspec/core/kernel_extensions.rb +2 -2
  28. data/lib/rspec/core/load_path.rb +1 -2
  29. data/lib/rspec/core/metadata.rb +65 -27
  30. data/lib/rspec/core/ruby_project.rb +24 -10
  31. data/lib/rspec/core/runner.rb +3 -3
  32. data/lib/rspec/core/{shared_behaviour.rb → shared_example_group.rb} +5 -5
  33. data/lib/rspec/core/{shared_behaviour_kernel_extensions.rb → shared_example_group_kernel_extensions.rb} +3 -3
  34. data/lib/rspec/core/version.rb +1 -1
  35. data/lib/rspec/core/world.rb +29 -50
  36. data/rspec-core.gemspec +22 -21
  37. data/spec/rspec/core/command_line_options_spec.rb +14 -0
  38. data/spec/rspec/core/configuration_spec.rb +51 -13
  39. data/spec/rspec/core/example_group_spec.rb +61 -68
  40. data/spec/rspec/core/example_group_subject_spec.rb +1 -1
  41. data/spec/rspec/core/example_spec.rb +19 -8
  42. data/spec/rspec/core/formatters/base_formatter_spec.rb +2 -2
  43. data/spec/rspec/core/metadata_spec.rb +52 -17
  44. data/spec/rspec/core/mocha_spec.rb +4 -4
  45. data/spec/rspec/core/pending_example_spec.rb +19 -0
  46. data/spec/rspec/core/ruby_project_spec.rb +24 -0
  47. data/spec/rspec/core/{shared_behaviour_spec.rb → shared_example_group_spec.rb} +31 -31
  48. data/spec/rspec/core/world_spec.rb +64 -83
  49. data/spec/spec_helper.rb +19 -30
  50. metadata +17 -17
  51. data/features-pending/command_line/line_number_option.feature +0 -56
  52. data/features-pending/command_line/line_number_option_with_example_with_no_name.feature +0 -22
  53. data/lib/rspec/core/extensions/instance_exec.rb +0 -31
  54. data/spec/resources/example_classes.rb +0 -67
  55. data/spec/rspec/core/resources/example_classes.rb +0 -67
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  def describe_double(describes=Object)
4
4
  group = Rspec::Core::ExampleGroup.describe(describes) {}
5
- remove_last_describe_from_world
5
+ remove_last_example_group_from_world
6
6
  yield group if block_given?
7
7
  group
8
8
  end
@@ -3,13 +3,18 @@ require 'spec_helper'
3
3
  describe Rspec::Core::Example, :parent_metadata => 'sample' do
4
4
 
5
5
  before do
6
- behaviour = stub('behaviour', :metadata => { :behaviour => { :name => 'behaviour_name' }})
7
- @example = Rspec::Core::Example.new(behaviour, 'description', {}, (lambda {}))
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
13
  end
9
14
 
10
15
  describe "attr readers" do
11
- it "should have one for the parent behaviour" do
12
- @example.should respond_to(:behaviour)
16
+ it "should have one for the parent example group" do
17
+ @example.should respond_to(:example_group)
13
18
  end
14
19
 
15
20
  it "should have one for it's description" do
@@ -26,8 +31,8 @@ describe Rspec::Core::Example, :parent_metadata => 'sample' do
26
31
  end
27
32
 
28
33
  describe '#inspect' do
29
- it "should return 'behaviour_name - description'" do
30
- @example.inspect.should == 'behaviour_name - description'
34
+ it "should return 'group description - description'" do
35
+ @example.inspect.should == 'group description example description'
31
36
  end
32
37
  end
33
38
 
@@ -37,13 +42,19 @@ describe Rspec::Core::Example, :parent_metadata => 'sample' do
37
42
  end
38
43
  end
39
44
 
45
+ describe '#described_class' do
46
+ it "returns the class (if any) of the outermost example group" do
47
+ described_class.should == Rspec::Core::Example
48
+ end
49
+ end
50
+
40
51
  describe "accessing metadata within a running example" do
41
52
  it "should have a reference to itself when running" do
42
53
  running_example.description.should == "should have a reference to itself when running"
43
54
  end
44
55
 
45
- it "should be able to access the behaviours top level metadata as if it were its own" do
46
- running_example.behaviour.metadata.should include(:parent_metadata => 'sample')
56
+ it "should be able to access the example group's top level metadata as if it were its own" do
57
+ running_example.example_group.metadata.should include(:parent_metadata => 'sample')
47
58
  running_example.metadata.should include(:parent_metadata => 'sample')
48
59
  end
49
60
  end
@@ -68,8 +68,8 @@ describe Rspec::Core::Formatters::BaseFormatter do
68
68
  @formatter.should have_interface_for(:start).with(1).argument
69
69
  end
70
70
 
71
- it "should have add_behaviour as an interface with one argument" do
72
- @formatter.should have_interface_for(:add_behaviour).with(1).argument
71
+ it "should have add_example_group as an interface with one argument" do
72
+ @formatter.should have_interface_for(:add_example_group).with(1).argument
73
73
  end
74
74
 
75
75
  it "should have example_finished as an interface with one argument" do
@@ -3,29 +3,41 @@ require 'spec_helper'
3
3
  module Rspec
4
4
  module Core
5
5
  describe Metadata do
6
- describe "#generated_name" do
6
+ describe "[:example_group][:name]" do
7
7
  it "generates name for top level example group" do
8
8
  m = Metadata.new
9
9
  m.process("description", :caller => caller(0))
10
- m[:behaviour][:name].should == "description"
10
+ m[:example_group][:name].should == "description"
11
11
  end
12
12
 
13
13
  it "concats args to describe()" do
14
14
  m = Metadata.new
15
15
  m.process(String, "with dots", :caller => caller(0))
16
- m[:behaviour][:name].should == "String with dots"
16
+ m[:example_group][:name].should == "String with dots"
17
17
  end
18
18
 
19
19
  it "concats nested names" do
20
- m = Metadata.new(:behaviour => {:name => 'parent'})
21
- m.process(String, "child", :caller => caller(0))
22
- m[:behaviour][:name].should == "parent child"
20
+ parent = Metadata.new
21
+ parent.process("parent", :caller => caller(0))
22
+ m = Metadata.new(parent)
23
+ m.process("child", :caller => caller(0))
24
+ m[:example_group][:name].should == "parent child"
23
25
  end
24
26
 
25
27
  it "strips the name" do
26
28
  m = Metadata.new
27
29
  m.process(" description \n", :caller => caller(0))
28
- m[:behaviour][:name].should == "description"
30
+ m[:example_group][:name].should == "description"
31
+ end
32
+ end
33
+
34
+ describe "[:full_description]" do
35
+ it "concats the example group name and description" do
36
+ m = Metadata.new
37
+ m[:example_group][:name] = "group"
38
+
39
+ m = m.for_example("example", {})
40
+ m[:full_description].should == "group example"
29
41
  end
30
42
  end
31
43
 
@@ -38,7 +50,7 @@ module Rspec
38
50
  "bar_spec.rb:23",
39
51
  "baz"
40
52
  ])
41
- m[:behaviour][:file_path].should == __FILE__
53
+ m[:example_group][:file_path].should == __FILE__
42
54
  end
43
55
  end
44
56
 
@@ -51,7 +63,7 @@ module Rspec
51
63
  "bar_spec.rb:23",
52
64
  "baz"
53
65
  ])
54
- m[:behaviour][:line_number].should == __LINE__ - 4
66
+ m[:example_group][:line_number].should == __LINE__ - 4
55
67
  end
56
68
  it "uses the number after the first : for ruby 1.9" do
57
69
  m = Metadata.new
@@ -61,18 +73,22 @@ module Rspec
61
73
  "bar_spec.rb:23",
62
74
  "baz"
63
75
  ])
64
- m[:behaviour][:line_number].should == __LINE__ - 4
76
+ m[:example_group][:line_number].should == __LINE__ - 4
65
77
  end
66
78
  end
67
79
 
68
80
  describe "#metadata_for_example" do
69
- let(:caller_to_use) { caller(0) }
70
- let(:caller_line_number) { __LINE__ - 1 }
71
- let(:metadata) { Metadata.new.process(:caller => caller_to_use) }
72
- let(:mfe) { metadata.for_example("this description", {:caller => caller_to_use, :arbitrary => :options}) }
81
+ let(:caller_for_example) { caller(0) }
82
+ let(:line_number) { __LINE__ - 1 }
83
+ let(:metadata) { Metadata.new.process("group description", :caller => caller(0)) }
84
+ let(:mfe) { metadata.for_example("example description", {:caller => caller_for_example, :arbitrary => :options}) }
73
85
 
74
86
  it "stores the description" do
75
- mfe[:description].should == "this description"
87
+ mfe[:description].should == "example description"
88
+ end
89
+
90
+ it "stores the full_description (group description + example description)" do
91
+ mfe[:full_description].should == "group description example description"
76
92
  end
77
93
 
78
94
  it "creates an empty execution result" do
@@ -80,7 +96,7 @@ module Rspec
80
96
  end
81
97
 
82
98
  it "stores the caller" do
83
- mfe[:caller].should == caller_to_use
99
+ mfe[:caller].should == caller_for_example
84
100
  end
85
101
 
86
102
  it "extracts file path from caller" do
@@ -88,14 +104,33 @@ module Rspec
88
104
  end
89
105
 
90
106
  it "extracts line number from caller" do
91
- mfe[:line_number].should == caller_line_number
107
+ mfe[:line_number].should == line_number
108
+ end
109
+
110
+ it "extracts location from caller" do
111
+ mfe[:location].should == "#{__FILE__}:#{line_number}"
92
112
  end
93
113
 
94
114
  it "merges arbitrary options" do
95
115
  mfe[:arbitrary].should == :options
96
116
  end
117
+ end
97
118
 
119
+ describe "#apply_condition" do
120
+ let(:group_metadata) { Metadata.new.process('group', :caller => ["foo_spec.rb:#{__LINE__}"]) }
121
+ let(:group_line_number) { __LINE__ -1 }
122
+ let(:example_metadata) { group_metadata.for_example('example', :caller => ["foo_spec.rb:#{__LINE__}"]) }
123
+ let(:example_line_number) { __LINE__ -1 }
124
+
125
+ it "matches when the line_number matches the group" do
126
+ group_metadata.apply_condition(:line_number, group_line_number).should be_true
127
+ end
128
+
129
+ it "matches when the line_number matches the example" do
130
+ example_metadata.apply_condition(:line_number, example_line_number).should be_true
131
+ end
98
132
  end
133
+
99
134
  end
100
135
  end
101
136
  end
@@ -10,15 +10,15 @@ describe "Mocha Regression involving double reporting of errors" do
10
10
 
11
11
  use_formatter(formatter) do
12
12
 
13
- isolate_example_group do
14
- desc = Rspec::Core::ExampleGroup.describe("my favorite pony") do
13
+ disconnect_from_world do
14
+ group = Rspec::Core::ExampleGroup.describe("my favorite pony") do
15
15
  example("showing a double fail") do
16
16
  foo = "string"
17
17
  foo.expects(:something)
18
18
  end
19
19
  end
20
- desc.examples_to_run.replace(desc.examples)
21
- desc.run(formatter)
20
+ group.examples_to_run.replace(group.examples)
21
+ group.run(formatter)
22
22
  end
23
23
 
24
24
  end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ Rspec::Matchers.define :be_pending do
4
+ match do |example|
5
+ example.metadata[:pending]
6
+ end
7
+ end
8
+
9
+ describe "an example" do
10
+ context "with no block" do
11
+ it "is listed as pending" do
12
+ group = isolated_example_group do
13
+ it "has no block"
14
+ end
15
+ group.run(stub('reporter').as_null_object)
16
+ group.examples.first.should be_pending
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,24 @@
1
+ module Rspec
2
+ module Core
3
+ describe RubyProject do
4
+
5
+ describe "#determine_root" do
6
+
7
+ context "with ancestor containing spec directory" do
8
+ it "returns ancestor containing the spec directory" do
9
+ RubyProject.stub(:ascend_until).and_return('foodir')
10
+ RubyProject.determine_root.should == 'foodir'
11
+ end
12
+ end
13
+
14
+ context "without ancestor containing spec directory" do
15
+ it "returns current working directory" do
16
+ RubyProject.stub(:find_first_parent_containing).and_return(nil)
17
+ RubyProject.determine_root.should == '.'
18
+ end
19
+ end
20
+
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Rspec::Core::SharedBehaviour do
3
+ describe Rspec::Core::SharedExampleGroup do
4
4
 
5
5
  it "should add the 'share_examples_for' method to the global namespace" do
6
6
  Kernel.should respond_to(:share_examples_for)
@@ -14,8 +14,8 @@ describe Rspec::Core::SharedBehaviour do
14
14
  Kernel.should respond_to(:share_as)
15
15
  end
16
16
 
17
- it "should raise an ArgumentError when adding a second shared behaviour with the same name" do
18
- group = double_describe('example group')
17
+ it "should raise an ArgumentError when adding a second shared example group with the same name" do
18
+ group = isolated_example_group('example group')
19
19
  group.share_examples_for('really important business value') { }
20
20
  lambda do
21
21
  group.share_examples_for('really important business value') { }
@@ -24,42 +24,42 @@ describe Rspec::Core::SharedBehaviour do
24
24
 
25
25
  describe "share_examples_for" do
26
26
 
27
- it "should capture the given name and block in the Worlds collection of shared behaviours" do
28
- Rspec::Core.world.shared_behaviours.should_receive(:[]=).with(:foo, anything)
27
+ it "should capture the given name and block in the Worlds collection of shared example groups" do
28
+ Rspec::Core.world.shared_example_groups.should_receive(:[]=).with(:foo, anything)
29
29
  share_examples_for(:foo) { }
30
30
  end
31
31
 
32
32
  end
33
33
 
34
- describe "including shared behaviours using #it_should_behave_like" do
34
+ describe "including shared example_groups using #it_should_behave_like" do
35
35
 
36
- def cleanup_shared_behaviours
37
- original_shared_behaviours = Rspec::Core.world.shared_behaviours
36
+ def cleanup_shared_example_groups
37
+ original_shared_example_groups = Rspec::Core.world.shared_example_groups
38
38
  yield if block_given?
39
- Rspec::Core.world.shared_behaviours.replace(original_shared_behaviours)
39
+ Rspec::Core.world.shared_example_groups.replace(original_shared_example_groups)
40
40
  end
41
41
 
42
- it "should module_eval any found shared behaviours" do
43
- group = double_describe('fake group')
42
+ it "should module_eval any found shared example_groups" do
43
+ group = isolated_example_group('fake group')
44
44
  block1 = lambda {}
45
45
  block2 = lambda {
46
46
  def extra_helper
47
47
  'extra_helper'
48
48
  end
49
49
  }
50
- Rspec::Core.world.stub!(:shared_behaviours).and_return({ :a => block1, :shared_behaviour => block2 })
50
+ Rspec::Core.world.stub!(:shared_example_groups).and_return({ :a => block1, :shared_example_group => block2 })
51
51
  group.should_receive(:module_eval).once
52
- group.it_should_behave_like :shared_behaviour
52
+ group.it_should_behave_like :shared_example_group
53
53
  end
54
54
 
55
- it "should make any shared behaviour available at the correct level" do
56
- group = double_describe('fake group')
55
+ it "should make any shared example_group available at the correct level" do
56
+ group = isolated_example_group('fake group')
57
57
  block = lambda {
58
58
  def self.class_helper; end
59
59
  def extra_helper; end
60
60
  }
61
- Rspec::Core.world.stub!(:shared_behaviours).and_return({ :shared_behaviour => block })
62
- group.it_should_behave_like :shared_behaviour
61
+ Rspec::Core.world.stub!(:shared_example_groups).and_return({ :shared_example_group => block })
62
+ group.it_should_behave_like :shared_example_group
63
63
  with_ruby(1.8) do
64
64
  group.instance_methods.should include('extra_helper')
65
65
  group.singleton_methods.should include('class_helper')
@@ -73,9 +73,9 @@ describe Rspec::Core::SharedBehaviour do
73
73
  it "should raise when named shared example_group can not be found"
74
74
 
75
75
  it "adds examples to current example_group using it_should_behave_like" do
76
- cleanup_shared_behaviours do
77
- group = double_describe("example_group") do |g|
78
- g.it("i was already here") {}
76
+ cleanup_shared_example_groups do
77
+ group = isolated_example_group("example_group") do
78
+ it("i was already here") {}
79
79
  end
80
80
 
81
81
  group.examples.size.should == 1
@@ -92,8 +92,8 @@ describe Rspec::Core::SharedBehaviour do
92
92
  end
93
93
 
94
94
  it "adds examples to from two shared groups" do
95
- cleanup_shared_behaviours do
96
- group = double_describe("example_group") do |g|
95
+ cleanup_shared_example_groups do
96
+ group = isolated_example_group("example_group") do |g|
97
97
  g.it("i was already here") {}
98
98
  end
99
99
 
@@ -116,17 +116,17 @@ describe Rspec::Core::SharedBehaviour do
116
116
  end
117
117
 
118
118
  share_as('Cornucopia') do
119
- it "should do foo"
119
+ it "should do foo" do; end
120
120
  end
121
121
 
122
- it "adds examples to current example_group using include", :compat => 'rspec-1.2' do
123
- group = double_describe('group') { include Cornucopia }
124
- group.should have(1).example
122
+ pending "adds examples to current example_group using include", :compat => 'rspec-1.2' do
123
+ group = isolated_example_group('group') { include Cornucopia }
124
+ group.examples.length.should == 1
125
125
  end
126
126
 
127
127
  it "adds examples to current example_group using it_should_behave_like with a module" do
128
- cleanup_shared_behaviours do
129
- group = double_describe("example_group") {}
128
+ cleanup_shared_example_groups do
129
+ group = isolated_example_group("example_group") {}
130
130
 
131
131
  shared_foo = group.share_as(:FooShared) do
132
132
  it("shared example") {}
@@ -168,13 +168,13 @@ describe Rspec::Core::SharedBehaviour do
168
168
  it "should run after(:all) only once from shared example_group", :compat => 'rspec-1.2'
169
169
 
170
170
  it "should include modules, included into shared example_group, into current example_group", :compat => 'rspec-1.2' do
171
- running_example.behaviour.included_modules.should include(RunningSharedExamplesJustForTesting)
171
+ running_example.example_group.included_modules.should include(RunningSharedExamplesJustForTesting)
172
172
  end
173
173
 
174
174
  it "should make methods defined in the shared example_group available in consuming example_group", :compat => 'rspec-1.2' do
175
175
  # TODO: Consider should have_method(...) simple matcher
176
- with_ruby('1.8') { running_example.behaviour.methods.should include('magic') }
177
- with_ruby('1.9') { running_example.behaviour.methods.should include(:magic) }
176
+ with_ruby('1.8') { running_example.example_group.methods.should include('magic') }
177
+ with_ruby('1.9') { running_example.example_group.methods.should include(:magic) }
178
178
  end
179
179
 
180
180
  end
@@ -7,14 +7,16 @@ describe Rspec::Core::World do
7
7
 
8
8
  before do
9
9
  @world = Rspec::Core::World.new
10
- Rspec::Core.stub!(:world).and_return(@world)
10
+ Rspec::Core.stub(:world).and_return(@world)
11
11
  end
12
12
 
13
- describe "behaviour groups" do
13
+ describe "example groups" do
14
14
 
15
- it "should contain all defined behaviour groups" do
16
- behaviour_group = Rspec::Core::ExampleGroup.describe(Bar, 'Empty Behaviour Group') { }
17
- @world.behaviours.should include(behaviour_group)
15
+ it "should contain all defined example groups" do
16
+ disconnect_from_world do
17
+ example_group = Rspec::Core::ExampleGroup.describe(Bar, 'Empty Example Group') { }
18
+ @world.example_groups.should include(example_group)
19
+ end
18
20
  end
19
21
 
20
22
  end
@@ -24,7 +26,7 @@ describe Rspec::Core::World do
24
26
  before(:all) do
25
27
  options_1 = { :foo => 1, :color => 'blue', :feature => 'reporting' }
26
28
  options_2 = { :pending => true, :feature => 'reporting' }
27
- options_3 = { :array => [1,2,3,4], :color => 'blue', :feature => 'weather status' }
29
+ options_3 = { :array => [1,2,3,4], :color => 'blue' }
28
30
  @bg1 = Rspec::Core::ExampleGroup.describe(Bar, "find group-1", options_1) { }
29
31
  @bg2 = Rspec::Core::ExampleGroup.describe(Bar, "find group-2", options_2) { }
30
32
  @bg3 = Rspec::Core::ExampleGroup.describe(Bar, "find group-3", options_3) { }
@@ -35,64 +37,56 @@ describe Rspec::Core::World do
35
37
  it("not so awesome", :awesome => false) {}
36
38
  it("I also have no options") {}
37
39
  end
38
- @behaviours = [@bg1, @bg2, @bg3, @bg4]
40
+ @example_groups = [@bg1, @bg2, @bg3, @bg4]
39
41
  end
40
42
 
41
43
  after(:all) do
42
- Rspec::Core.world.behaviours.delete(@bg1)
43
- Rspec::Core.world.behaviours.delete(@bg2)
44
- Rspec::Core.world.behaviours.delete(@bg3)
45
- Rspec::Core.world.behaviours.delete(@bg4)
44
+ Rspec::Core.world.example_groups.delete(@bg1)
45
+ Rspec::Core.world.example_groups.delete(@bg2)
46
+ Rspec::Core.world.example_groups.delete(@bg3)
47
+ Rspec::Core.world.example_groups.delete(@bg4)
46
48
  end
47
49
 
48
- it "should find awesome examples" do
49
- @world.apply_inclusion_filters(@bg4.examples, :awesome => true).should == [@bg4.examples[1], @bg4.examples[2]]
50
- end
51
-
52
- it "should find no groups when given no search parameters" do
50
+ it "finds no groups when given no search parameters" do
53
51
  @world.apply_inclusion_filters([]).should == []
54
52
  end
55
53
 
56
- it "should find three groups when searching for :behaviour_describes => Bar" do
57
- @world.apply_inclusion_filters(@behaviours, :behaviour => { :describes => Bar }).should == [@bg1, @bg2, @bg3]
58
- end
59
-
60
- it "should find one group when searching for :description => 'find group-1'" do
61
- @world.apply_inclusion_filters(@behaviours, :behaviour => { :description => 'find group-1' }).should == [@bg1]
54
+ it "finds matching groups when filtering on :describes (described class or module)" do
55
+ @world.apply_inclusion_filters(@example_groups, :example_group => { :describes => Bar }).should == [@bg1, @bg2, @bg3]
62
56
  end
63
57
 
64
- it "should find two groups when searching for :description => lambda { |v| v.include?('-1') || v.include?('-3') }" do
65
- @world.apply_inclusion_filters(@behaviours, :behaviour => { :description => lambda { |v| v.include?('-1') || v.include?('-3') } }).should == [@bg1, @bg3]
58
+ it "finds matching groups when filtering on :description with text" do
59
+ @world.apply_inclusion_filters(@example_groups, :example_group => { :description => 'find group-1' }).should == [@bg1]
66
60
  end
67
61
 
68
- it "should find three groups when searching for :description => /find group/" do
69
- @world.apply_inclusion_filters(@behaviours, :behaviour => { :description => /find group/ }).should == [@bg1, @bg2, @bg3]
62
+ it "finds matching groups when filtering on :description with a lambda" do
63
+ @world.apply_inclusion_filters(@example_groups, :example_group => { :description => lambda { |v| v.include?('-1') || v.include?('-3') } }).should == [@bg1, @bg3]
70
64
  end
71
65
 
72
- it "should find one group when searching for :foo => 1" do
73
- @world.apply_inclusion_filters(@behaviours, :foo => 1 ).should == [@bg1]
66
+ it "finds matching groups when filtering on :description with a regular expression" do
67
+ @world.apply_inclusion_filters(@example_groups, :example_group => { :description => /find group/ }).should == [@bg1, @bg2, @bg3]
74
68
  end
75
69
 
76
- it "should find one group when searching for :pending => true" do
77
- @world.apply_inclusion_filters(@behaviours, :pending => true ).should == [@bg2]
70
+ it "finds one group when searching for :pending => true" do
71
+ @world.apply_inclusion_filters(@example_groups, :pending => true ).should == [@bg2]
78
72
  end
79
73
 
80
- it "should find one group when searching for :array => [1,2,3,4]" do
81
- @world.apply_inclusion_filters(@behaviours, :array => [1,2,3,4]).should == [@bg3]
74
+ it "finds matching groups when filtering on arbitrary metadata with a number" do
75
+ @world.apply_inclusion_filters(@example_groups, :foo => 1 ).should == [@bg1]
76
+ end
77
+
78
+ it "finds matching groups when filtering on arbitrary metadata with an array" do
79
+ @world.apply_inclusion_filters(@example_groups, :array => [1,2,3,4]).should == [@bg3]
82
80
  end
83
81
 
84
- it "should find no group when searching for :array => [4,3,2,1]" do
85
- @world.apply_inclusion_filters(@behaviours, :array => [4,3,2,1]).should be_empty
82
+ it "finds no groups when filtering on arbitrary metadata with an array but the arrays do not match" do
83
+ @world.apply_inclusion_filters(@example_groups, :array => [4,3,2,1]).should be_empty
86
84
  end
87
85
 
88
- it "should find two groups when searching for :color => 'blue'" do
89
- @world.apply_inclusion_filters(@behaviours, :color => 'blue').should == [@bg1, @bg3]
90
- end
91
-
92
- it "should find two groups when searching for :feature => 'reporting' }" do
93
- @world.apply_inclusion_filters(@behaviours, :feature => 'reporting').should == [@bg1, @bg2]
86
+ it "finds matching examples when filtering on arbitrary metadata" do
87
+ @world.apply_inclusion_filters(@bg4.examples, :awesome => true).should == [@bg4.examples[1], @bg4.examples[2]]
94
88
  end
95
-
89
+
96
90
  end
97
91
 
98
92
  describe "applying exclusion filters" do
@@ -100,65 +94,52 @@ describe Rspec::Core::World do
100
94
  it "should find nothing if all describes match the exclusion filter" do
101
95
  options = { :network_access => true }
102
96
 
103
- isolate_example_group do
104
- group1 = Rspec::Core::ExampleGroup.describe(Bar, "find group-1", options) do
105
- it("foo") {}
106
- it("bar") {}
107
- end
108
-
109
- @world.apply_exclusion_filters(group1.examples, :network_access => true).should == []
97
+ group1 = isolated_example_group(Bar, "find group-1", options) do
98
+ it("foo") {}
99
+ it("bar") {}
110
100
  end
111
101
 
112
- isolate_example_group do
113
- group2 = Rspec::Core::ExampleGroup.describe(Bar, "find group-1") do
114
- it("foo", :network_access => true) {}
115
- it("bar") {}
116
- end
117
-
118
- @world.apply_exclusion_filters(group2.examples, :network_access => true).should == [group2.examples.last]
102
+ @world.apply_exclusion_filters(group1.examples, :network_access => true).should == []
103
+
104
+ group2 = isolated_example_group(Bar, "find group-1") do
105
+ it("foo", :network_access => true) {}
106
+ it("bar") {}
119
107
  end
108
+
109
+ @world.apply_exclusion_filters(group2.examples, :network_access => true).should == [group2.examples.last]
120
110
 
121
111
  end
122
112
 
123
113
  it "should find nothing if a regexp matches the exclusion filter" do
124
- isolate_example_group do
125
- group = Rspec::Core::ExampleGroup.describe(Bar, "find group-1", :name => "exclude me with a regex", :another => "foo") do
126
- it("foo") {}
127
- it("bar") {}
128
- end
129
- @world.apply_exclusion_filters(group.examples, :name => /exclude/).should == []
130
- @world.apply_exclusion_filters(group.examples, :name => /exclude/, :another => "foo").should == []
131
- @world.apply_exclusion_filters(group.examples, :name => /exclude/, :another => "foo", :behaviour => {
132
- :describes => lambda { |b| b == Bar } } ).should == []
133
-
134
- @world.apply_exclusion_filters(group.examples, :name => /exclude not/).should == group.examples
135
- @world.apply_exclusion_filters(group.examples, :name => /exclude/, "another_condition" => "foo").should == group.examples
136
- @world.apply_exclusion_filters(group.examples, :name => /exclude/, "another_condition" => "foo1").should == group.examples
114
+ group = isolated_example_group(Bar, "find group-1", :name => "exclude me with a regex", :another => "foo") do
115
+ it("foo") {}
116
+ it("bar") {}
137
117
  end
118
+ @world.apply_exclusion_filters(group.examples, :name => /exclude/).should == []
119
+ @world.apply_exclusion_filters(group.examples, :name => /exclude/, :another => "foo").should == []
120
+ @world.apply_exclusion_filters(group.examples, :name => /exclude/, :another => "foo", :example_group => {
121
+ :describes => lambda { |b| b == Bar } } ).should == []
122
+
123
+ @world.apply_exclusion_filters(group.examples, :name => /exclude not/).should == group.examples
124
+ @world.apply_exclusion_filters(group.examples, :name => /exclude/, "another_condition" => "foo").should == group.examples
125
+ @world.apply_exclusion_filters(group.examples, :name => /exclude/, "another_condition" => "foo1").should == group.examples
138
126
  end
139
127
 
140
128
  end
141
129
 
142
- describe "filtering behaviours" do
130
+ describe "filtering example groups" do
143
131
 
144
- before(:all) do
145
- @group1 = Rspec::Core::ExampleGroup.describe(Bar, "find these examples") do
132
+ it "should run matches" do
133
+ @group1 = isolated_example_group(Bar, "find these examples") do
146
134
  it('I have no options', :color => :red, :awesome => true) {}
147
135
  it("I also have no options", :color => :red, :awesome => true) {}
148
136
  it("not so awesome", :color => :red, :awesome => false) {}
149
137
  end
150
- end
151
-
152
- after(:all) do
153
- Rspec::Core.world.behaviours.delete(@group1)
154
- end
155
-
156
- it "should run matches" do
157
- Rspec::Core.world.stub!(:exclusion_filter).and_return({ :awesome => false })
158
- Rspec::Core.world.stub!(:filter).and_return({ :color => :red })
159
- Rspec::Core.world.stub!(:behaviours).and_return([@group1])
160
- filtered_behaviours = @world.filter_behaviours
161
- filtered_behaviours.should == [@group1]
138
+ Rspec::Core.world.stub(:exclusion_filter).and_return({ :awesome => false })
139
+ Rspec::Core.world.stub(:filter).and_return({ :color => :red })
140
+ Rspec::Core.world.stub(:example_groups).and_return([@group1])
141
+ filtered_example_groups = @world.filter_example_groups
142
+ filtered_example_groups.should == [@group1]
162
143
  @group1.examples_to_run.should == @group1.examples[0..1]
163
144
  end
164
145