Skip to content

Commit

Permalink
Fixed [#12194] Double#reset_doubles are not clearing Ordered Scenario…
Browse files Browse the repository at this point in the history
…s bug. Added Space#reset. Space#reset_doubles and Space#reset_ordered_scenarios is now protected.

git-svn-id: svn+ssh://rubyforge.org/var/svn/pivotalrb/rr/trunk@251 af276e61-6b34-4dac-905b-574b5f35ef33
  • Loading branch information
btakita committed Jul 11, 2007
1 parent a9720dd commit c0c7ea4
Show file tree
Hide file tree
Showing 5 changed files with 73 additions and 17 deletions.
2 changes: 1 addition & 1 deletion examples/high_level_example.rb
Expand Up @@ -8,7 +8,7 @@
end

after(:each) do
RR::Space.instance.reset_doubles
RR::Space.instance.reset
end
end

Expand Down
56 changes: 50 additions & 6 deletions examples/rr/space_reset_example.rb
Expand Up @@ -2,6 +2,54 @@
require "#{dir}/../example_helper"

module RR
describe Space, "#reset" do
it_should_behave_like "RR::Space"

before do
@space = Space.new
@object1 = Object.new
@object2 = Object.new
@method_name = :foobar
end

it "removes the ordered scenarios" do
double1 = @space.create_double(@object1, :foobar1)
double2 = @space.create_double(@object1, :foobar2)

scenario1 = @space.create_scenario(double1)
scenario2 = @space.create_scenario(double2)

scenario1.ordered
scenario2.ordered

@space.ordered_scenarios.should_not be_empty

@space.reset
@space.ordered_scenarios.should be_empty
end

it "resets all doubles" do
double1 = @space.create_double(@object1, @method_name)
double1_reset_calls = 0
(class << double1; self; end).class_eval do
define_method(:reset) do ||
double1_reset_calls += 1
end
end
double2 = @space.create_double(@object2, @method_name)
double2_reset_calls = 0
(class << double2; self; end).class_eval do
define_method(:reset) do ||
double2_reset_calls += 1
end
end

@space.reset
double1_reset_calls.should == 1
double2_reset_calls.should == 1
end
end

describe Space, "#reset_double" do
it_should_behave_like "RR::Space"

Expand Down Expand Up @@ -37,10 +85,6 @@ module RR
@space.reset_double(@object, :foobar2)
@space.doubles.include?(@object).should == false
end

it "removes the ordered scenarios" do

end
end

describe Space, "#reset_doubles" do
Expand Down Expand Up @@ -69,9 +113,9 @@ module RR
end
end

@space.reset_doubles
double1_reset_calls.should == 1
@space.send(:reset_doubles)
double1_reset_calls.should == 1
double2_reset_calls.should == 1
end
end
end
4 changes: 2 additions & 2 deletions lib/rr/adapters/rspec.rb
Expand Up @@ -6,13 +6,13 @@ module Adapters
module Rspec
include RR::Extensions::DoubleMethods
def setup_mocks_for_rspec
RR::Space.instance.reset_doubles
RR::Space.instance.reset
end
def verify_mocks_for_rspec
RR::Space.instance.verify_doubles
end
def teardown_mocks_for_rspec
RR::Space.instance.reset_doubles
RR::Space.instance.reset
end
end
end
Expand Down
2 changes: 1 addition & 1 deletion lib/rr/adapters/test_unit.rb
Expand Up @@ -9,7 +9,7 @@ def self.included(mod)
alias_method :setup_without_rr, :setup
def setup_with_rr
setup_without_rr
RR::Space.instance.reset_doubles
RR::Space.instance.reset
end
alias_method :setup, :setup_with_rr

Expand Down
26 changes: 19 additions & 7 deletions lib/rr/space.rb
Expand Up @@ -87,13 +87,10 @@ def verify_doubles
end
end

# Resets the registered Doubles for the next test run.
def reset_doubles
@doubles.each do |object, method_double_map|
method_double_map.keys.each do |method_name|
reset_double(object, method_name)
end
end
# Resets the registered Doubles and ordered Scenarios
def reset
reset_ordered_scenarios
reset_doubles
end

# Verifies the Double for the passed in object and method_name.
Expand All @@ -109,5 +106,20 @@ def reset_double(object, method_name)
@doubles.delete(object) if @doubles[object].empty?
double.reset
end

protected
# Removes the ordered Scenarios from the list
def reset_ordered_scenarios
@ordered_scenarios.clear
end

# Resets the registered Doubles for the next test run.
def reset_doubles
@doubles.each do |object, method_double_map|
method_double_map.keys.each do |method_name|
reset_double(object, method_name)
end
end
end
end
end

0 comments on commit c0c7ea4

Please sign in to comment.