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 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254
|
require File.expand_path('../acceptance_test_helper', __FILE__)
class StubAnyInstanceMethodTest < Mocha::TestCase
include AcceptanceTest
def setup
setup_acceptance_test
end
def teardown
teardown_acceptance_test
end
def test_should_stub_public_method_within_test
klass = Class.new do
def my_instance_method
:original_return_value
end
end
instance = klass.new
test_result = run_as_test do
klass.any_instance.stubs(:my_instance_method).returns(:new_return_value)
assert_method_visibility instance, :my_instance_method, :public
assert_equal :new_return_value, instance.my_instance_method
end
assert_passed(test_result)
end
def test_should_leave_stubbed_public_method_unchanged_after_test
klass = Class.new do
def my_instance_method
:original_return_value
end
public :my_instance_method
def self.public(*args); end
end
instance = klass.new
run_as_test do
klass.any_instance.stubs(:my_instance_method).returns(:new_return_value)
end
assert(instance.public_methods(false).any? { |m| m.to_s == 'my_instance_method' })
assert_equal :original_return_value, instance.my_instance_method
end
def test_should_leave_stubbed_public_method_unchanged_after_test_when_it_was_originally_private_in_owning_module
module_with_private_method = Module.new do
def my_included_method
:original_return_value
end
private :my_included_method
end
klass = Class.new do
include module_with_private_method
public :my_included_method
end
instance = klass.new
test_result = run_as_test do
klass.any_instance.stubs(:my_included_method).returns(:new_return_value)
assert_equal :new_return_value, instance.my_included_method
end
assert_passed(test_result)
assert_equal :original_return_value, instance.my_included_method
end
def test_should_leave_stubbed_protected_method_unchanged_after_test
klass = Class.new do
def my_instance_method
:original_return_value
end
protected :my_instance_method
def self.protected(*args); end
def my_unprotected_instance_method
my_instance_method
end
end
instance = klass.new
run_as_test do
klass.any_instance.stubs(:my_instance_method).returns(:new_return_value)
end
assert(instance.protected_methods(false).any? { |m| m.to_s == 'my_instance_method' })
assert_equal :original_return_value, instance.my_unprotected_instance_method
end
def test_should_stub_protected_method_within_test
klass = Class.new do
def my_instance_method
:original_return_value
end
protected :my_instance_method
def self.protected(*args); end
def my_unprotected_instance_method
my_instance_method
end
end
instance = klass.new
test_result = run_as_test do
klass.any_instance.stubs(:my_instance_method).returns(:new_return_value)
assert_method_visibility instance, :my_instance_method, :protected
end
assert_passed(test_result)
end
def test_should_leave_stubbed_private_method_unchanged_after_test
klass = Class.new do
def my_instance_method
:original_return_value
end
private :my_instance_method
def self.private(*args); end
end
instance = klass.new
run_as_test do
klass.any_instance.stubs(:my_instance_method).returns(:new_return_value)
end
assert(instance.private_methods(false).any? { |m| m.to_s == 'my_instance_method' })
assert_equal :original_return_value, instance.send(:my_instance_method)
end
def test_should_stub_private_method_within_test
klass = Class.new do
def my_instance_method
:original_return_value
end
private :my_instance_method
def self.private(*args); end
end
instance = klass.new
test_result = run_as_test do
klass.any_instance.stubs(:my_instance_method).returns(:new_return_value)
assert_method_visibility instance, :my_instance_method, :private
end
assert_passed(test_result)
end
def test_should_reset_expectations_after_test
klass = Class.new do
def my_instance_method
:original_return_value
end
end
run_as_test do
klass.any_instance.stubs(:my_instance_method).returns(:new_return_value)
end
assert_equal 0, klass.any_instance.mocha.__expectations__.length
end
def test_should_be_able_to_stub_a_public_superclass_method
superklass = Class.new do
def my_superclass_method
:original_return_value
end
public :my_superclass_method
end
klass = Class.new(superklass)
instance = klass.new
test_result = run_as_test do
klass.any_instance.stubs(:my_superclass_method).returns(:new_return_value)
assert_method_visibility instance, :my_superclass_method, :public
assert_equal :new_return_value, instance.my_superclass_method
end
assert_passed(test_result)
assert(instance.public_methods(true).any? { |m| m.to_s == 'my_superclass_method' })
assert(klass.public_methods(false).none? { |m| m.to_s == 'my_superclass_method' })
assert_equal :original_return_value, instance.my_superclass_method
end
def test_should_be_able_to_stub_a_protected_superclass_method
superklass = Class.new do
def my_superclass_method
:original_return_value
end
protected :my_superclass_method
end
klass = Class.new(superklass)
instance = klass.new
test_result = run_as_test do
klass.any_instance.stubs(:my_superclass_method).returns(:new_return_value)
assert_method_visibility instance, :my_superclass_method, :protected
assert_equal :new_return_value, instance.send(:my_superclass_method)
end
assert_passed(test_result)
assert(instance.protected_methods(true).any? { |m| m.to_s == 'my_superclass_method' })
assert(klass.protected_methods(false).none? { |m| m.to_s == 'my_superclass_method' })
assert_equal :original_return_value, instance.send(:my_superclass_method)
end
def test_should_be_able_to_stub_a_private_superclass_method
superklass = Class.new do
def my_superclass_method
:original_return_value
end
private :my_superclass_method
end
klass = Class.new(superklass)
instance = klass.new
test_result = run_as_test do
klass.any_instance.stubs(:my_superclass_method).returns(:new_return_value)
assert_method_visibility instance, :my_superclass_method, :private
assert_equal :new_return_value, instance.send(:my_superclass_method)
end
assert_passed(test_result)
assert(instance.private_methods(true).any? { |m| m.to_s == 'my_superclass_method' })
assert(klass.private_methods(false).none? { |m| m.to_s == 'my_superclass_method' })
assert_equal :original_return_value, instance.send(:my_superclass_method)
end
def test_should_be_able_to_stub_method_if_ruby19_public_instance_methods_include_method_but_method_does_not_actually_exist_like_active_record_association_proxy
ruby19_klass = Class.new do
class << self
def public_instance_methods(_include_superclass = true)
[:my_instance_method]
end
end
end
test_result = run_as_test do
ruby19_klass.any_instance.stubs(:my_instance_method).returns(:new_return_value)
assert_equal :new_return_value, ruby19_klass.new.my_instance_method
end
assert_passed(test_result)
end
def test_should_be_able_to_stub_method_if_ruby19_protected_instance_methods_include_method_but_method_does_not_actually_exist_like_active_record_association_proxy
ruby19_klass = Class.new do
class << self
def protected_instance_methods(_include_superclass = true)
[:my_instance_method]
end
end
end
test_result = run_as_test do
ruby19_klass.any_instance.stubs(:my_instance_method).returns(:new_return_value)
assert_equal :new_return_value, ruby19_klass.new.send(:my_instance_method)
end
assert_passed(test_result)
end
def test_should_be_able_to_stub_method_if_ruby19_private_instance_methods_include_method_but_method_does_not_actually_exist_like_active_record_association_proxy
ruby19_klass = Class.new do
class << self
def private_instance_methods(_include_superclass = true)
[:my_instance_method]
end
end
end
test_result = run_as_test do
ruby19_klass.any_instance.stubs(:my_instance_method).returns(:new_return_value)
assert_equal :new_return_value, ruby19_klass.new.send(:my_instance_method)
end
assert_passed(test_result)
end
end
|