1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
|
require File.join(File.dirname(__FILE__), "..", "test_helper")
require 'method_definer'
require 'mocha/mock'
require 'mocha/any_instance_method'
class AnyInstanceMethodTest < Test::Unit::TestCase
include Mocha
def test_should_hide_original_method
klass = Class.new { def method_x; end }
method = AnyInstanceMethod.new(klass, :method_x)
hidden_method_x = method.hidden_method.to_sym
method.hide_original_method
assert klass.method_defined?(hidden_method_x)
end
def test_should_not_hide_original_method_if_it_is_not_defined
klass = Class.new
method = AnyInstanceMethod.new(klass, :method_x)
hidden_method_x = method.hidden_method.to_sym
method.hide_original_method
assert_equal false, klass.method_defined?(hidden_method_x)
end
def test_should_define_a_new_method
klass = Class.new { def method_x; end }
method = AnyInstanceMethod.new(klass, :method_x)
mocha = Mock.new
mocha.expects(:method_x).with(:param1, :param2).returns(:result)
any_instance = Object.new
any_instance.define_instance_method(:mocha) { mocha }
klass.define_instance_method(:any_instance) { any_instance }
method.hide_original_method
method.define_new_method
instance = klass.new
result = instance.method_x(:param1, :param2)
assert_equal :result, result
assert mocha.verified?
end
def test_should_restore_original_method
klass = Class.new { def method_x; end }
method = AnyInstanceMethod.new(klass, :method_x)
hidden_method_x = method.hidden_method.to_sym
klass.send(:define_method, hidden_method_x, Proc.new { :original_result })
method.remove_new_method
method.restore_original_method
instance = klass.new
assert_equal :original_result, instance.method_x
assert !klass.method_defined?(hidden_method_x)
end
def test_should_not_restore_original_method_if_hidden_method_not_defined
klass = Class.new { def method_x; :new_result; end }
method = AnyInstanceMethod.new(klass, :method_x)
method.restore_original_method
instance = klass.new
assert_equal :new_result, instance.method_x
end
def test_should_call_remove_new_method
klass = Class.new { def method_x; end }
any_instance = Mock.new
any_instance.stubs(:reset_mocha)
klass.define_instance_method(:any_instance) { any_instance }
method = AnyInstanceMethod.new(klass, :method_x)
method.replace_instance_method(:restore_original_method) { }
method.define_instance_accessor(:remove_called)
method.replace_instance_method(:remove_new_method) { self.remove_called = true }
method.unstub
assert method.remove_called
end
def test_should_call_restore_original_method
klass = Class.new { def method_x; end }
any_instance = Mock.new
any_instance.stubs(:reset_mocha)
klass.define_instance_method(:any_instance) { any_instance }
method = AnyInstanceMethod.new(klass, :method_x)
method.replace_instance_method(:remove_new_method) { }
method.define_instance_accessor(:restore_called)
method.replace_instance_method(:restore_original_method) { self.restore_called = true }
method.unstub
assert method.restore_called
end
def test_should_call_reset_mocha
klass = Class.new { def method_x; end }
any_instance = Class.new { attr_accessor :mocha_was_reset; def reset_mocha; self.mocha_was_reset = true; end }.new
klass.define_instance_method(:any_instance) { any_instance }
method = AnyInstanceMethod.new(klass, :method_x)
method.replace_instance_method(:remove_new_method) { }
method.replace_instance_method(:restore_original_method) { }
method.unstub
assert any_instance.mocha_was_reset
end
def test_should_return_any_instance_mocha_for_stubbee
mocha = Object.new
any_instance = Object.new
any_instance.define_instance_method(:mocha) { mocha }
stubbee = Class.new
stubbee.define_instance_method(:any_instance) { any_instance }
method = AnyInstanceMethod.new(stubbee, :method_name)
assert_equal stubbee.any_instance.mocha, method.mock
end
end
|