Skip to content

Commit

Permalink
Making ordering common to all object per spec
Browse files Browse the repository at this point in the history
  • Loading branch information
preethiramdev committed Feb 8, 2012
1 parent 6743cd7 commit 221594b
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 11 deletions.
4 changes: 4 additions & 0 deletions lib/rspec/mocks/message_expectation.rb
Expand Up @@ -271,6 +271,10 @@ def generate_error
end end
end end


def raise_out_of_order_error
@error_generator.raise_out_of_order_error @sym
end

# Constrains a stub or message expectation to invocations with specific # Constrains a stub or message expectation to invocations with specific
# arguments. # arguments.
# #
Expand Down
7 changes: 3 additions & 4 deletions lib/rspec/mocks/order_group.rb
Expand Up @@ -2,8 +2,7 @@ module RSpec
module Mocks module Mocks
# @private # @private
class OrderGroup class OrderGroup
def initialize error_generator def initialize
@error_generator = error_generator
@ordering = Array.new @ordering = Array.new
end end


Expand All @@ -14,7 +13,7 @@ def register(expectation)


# @private # @private
def ready_for?(expectation) def ready_for?(expectation)
return @ordering.first == expectation @ordering.first == expectation
end end


# @private # @private
Expand All @@ -26,7 +25,7 @@ def consume
def handle_order_constraint expectation def handle_order_constraint expectation
return unless @ordering.include? expectation return unless @ordering.include? expectation
return consume if ready_for?(expectation) return consume if ready_for?(expectation)
@error_generator.raise_out_of_order_error expectation.sym expectation.raise_out_of_order_error
end end
end end
end end
Expand Down
2 changes: 1 addition & 1 deletion lib/rspec/mocks/proxy.rb
Expand Up @@ -33,7 +33,7 @@ def initialize(object, name=nil, options={})
@object = object @object = object
@name = name @name = name
@error_generator = ErrorGenerator.new object, name, options @error_generator = ErrorGenerator.new object, name, options
@expectation_ordering = OrderGroup.new @error_generator @expectation_ordering = RSpec::Mocks::space.expectation_ordering
@messages_received = [] @messages_received = []
@options = options @options = options
@already_proxied_respond_to = false @already_proxied_respond_to = false
Expand Down
8 changes: 7 additions & 1 deletion lib/rspec/mocks/space.rb
Expand Up @@ -17,13 +17,19 @@ def reset_all
mock.rspec_reset mock.rspec_reset
end end
mocks.clear mocks.clear
@expectation_ordering = nil
end end


def expectation_ordering
@expectation_ordering ||= OrderGroup.new
end

private private


def mocks def mocks
@mocks ||= [] @mocks ||= []
end end

end end
end end
end end
33 changes: 28 additions & 5 deletions spec/rspec/mocks/mock_ordering_spec.rb
Expand Up @@ -8,7 +8,7 @@ module Mocks
before do before do
@double = double("test double") @double = double("test double")
end end

after do after do
@double.rspec_reset @double.rspec_reset
end end
Expand All @@ -21,6 +21,17 @@ module Mocks
@double.rspec_verify @double.rspec_verify
end end


it "passes calls across objects in order" do
another_double = double("another test double")
@double.should_receive(:one).ordered
another_double.should_receive(:two).ordered
@double.should_receive(:two).ordered
@double.one
another_double.two
@double.two
@double.rspec_verify
end

it "passes three calls in order" do it "passes three calls in order" do
@double.should_receive(:one).ordered @double.should_receive(:one).ordered
@double.should_receive(:two).ordered @double.should_receive(:two).ordered
Expand Down Expand Up @@ -48,7 +59,19 @@ module Mocks
@double.three @double.three
end.should raise_error(RSpec::Mocks::MockExpectationError, "Double \"test double\" received :three out of order") end.should raise_error(RSpec::Mocks::MockExpectationError, "Double \"test double\" received :three out of order")
end end


it "fails if calls across objects are out of order" do
another_double = double("another test double")
@double.should_receive(:one).ordered
another_double.should_receive(:two).ordered
@double.should_receive(:three).ordered
@double.one
lambda do
@double.three
end.should raise_error(RSpec::Mocks::MockExpectationError, "Double \"test double\" received :three out of order")
another_double.two
end

it "fails if third call comes second" do it "fails if third call comes second" do
@double.should_receive(:one).ordered @double.should_receive(:one).ordered
@double.should_receive(:two).ordered @double.should_receive(:two).ordered
Expand Down Expand Up @@ -78,17 +101,17 @@ module Mocks
@double.ignored_1 @double.ignored_1
@double.rspec_verify @double.rspec_verify
end end

it "passes when duplicates exist" do it "passes when duplicates exist" do
@double.should_receive(:a).ordered @double.should_receive(:a).ordered
@double.should_receive(:b).ordered @double.should_receive(:b).ordered
@double.should_receive(:a).ordered @double.should_receive(:a).ordered

@double.a @double.a
@double.b @double.b
@double.a @double.a
end end

end end
end end
end end

0 comments on commit 221594b

Please sign in to comment.