Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
MockDelegator#expect defines method on instance.
  • Loading branch information
tatey committed Feb 13, 2012
1 parent b4ecc3c commit fc26a80
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 9 deletions.
3 changes: 3 additions & 0 deletions lib/simple_mock.rb
@@ -1 +1,4 @@
require 'delegate'

require 'simple_mock/mock_delegator'
require 'simple_mock/version'
23 changes: 23 additions & 0 deletions lib/simple_mock/mock_delegator.rb
@@ -0,0 +1,23 @@
module SimpleMock
class MockDelegator < SimpleDelegator
def expect name, retval, args = []
method = Module.new do
define_method name do |*args, &block|
retval
end
end
extend method
self
end

def verify

end

protected

def method_missing name, *args, &block
super
end
end
end
18 changes: 9 additions & 9 deletions test/unit/delegator_test.rb → test/unit/mock_delegator_test.rb
@@ -1,50 +1,50 @@
require 'helper'

class DelegatorTest < MiniTest::Unit::TestCase
class MockDelegatorTest < MiniTest::Unit::TestCase
def test_initialize_sets_delegate
object = Object.new
delegator = Delegator.new object
assert_equal object, delegator.delegate
delegator = MockDelegator.new object
assert_equal object, delegator.__getobj__
end

def test_expect_returns_self
object = Object.new
delegator = Delegator.new object
delegator = MockDelegator.new object
assert_equal delegator, delegator.expect(:pop, 1)
end

def test_expect_defines_method_returning_value
array = Array.new
delegator = Delegator.new array
delegator = MockDelegator.new array
delegator.expect :pop, 1
assert_equal 1, delegator.pop
end

def test_expect_defines_method_with_argument_returning_value
array = Array.new
delegator = Delegator.new array
delegator = MockDelegator.new array
delegator.expect :push, [1, 2], [Fixnum]
assert_equal [1, 2], delegator.push(2)
end

def test_verify_returns_true_when_methods_are_called_as_expected
array = Array.new
delegator = Delegator.new array
delegator = MockDelegator.new array
delegator.expect :push, [1, 2], [Fixnum]
delegator.push 2
assert delegator.verify
end

def test_verify_raises_when_methods_are_not_called_as_expected
array = Array.new
delegator = Delegator.new array
delegator = MockDelegator.new array
delegator.expect :push, [1, 2], [Fixnum]
assert_raises(MockExpectationError) { delegator.verify }
end

def test_missing_method_is_forwarded_to_delegate
array = Array.new
delegator = Delegator.new array
delegator = MockDelegator.new array
assert delegator.respond_to?(:push)
assert_equal [1], delegator.push(1)
end
Expand Down

0 comments on commit fc26a80

Please sign in to comment.