2017-07-09 12:06:36 +00:00
|
|
|
# frozen_string_literal: true
|
2017-07-10 13:39:13 +00:00
|
|
|
|
2018-09-30 00:50:43 +00:00
|
|
|
require_relative "../../abstract_unit"
|
2016-08-06 16:03:25 +00:00
|
|
|
require "active_support/core_ext/module/remove_method"
|
2011-11-07 10:52:52 +00:00
|
|
|
|
|
|
|
module RemoveMethodTests
|
|
|
|
class A
|
|
|
|
def do_something
|
2017-10-28 08:20:38 +00:00
|
|
|
1
|
2011-11-07 10:52:52 +00:00
|
|
|
end
|
2015-05-05 04:22:30 +00:00
|
|
|
|
2015-10-26 09:12:51 +00:00
|
|
|
def do_something_protected
|
2017-10-28 08:20:38 +00:00
|
|
|
1
|
2015-10-26 09:12:51 +00:00
|
|
|
end
|
|
|
|
protected :do_something_protected
|
|
|
|
|
|
|
|
def do_something_private
|
2017-10-28 08:20:38 +00:00
|
|
|
1
|
2015-10-26 09:12:51 +00:00
|
|
|
end
|
|
|
|
private :do_something_private
|
|
|
|
|
2015-05-05 04:22:30 +00:00
|
|
|
class << self
|
|
|
|
def do_something_else
|
2017-10-28 08:20:38 +00:00
|
|
|
2
|
2015-05-05 04:22:30 +00:00
|
|
|
end
|
|
|
|
end
|
2011-11-07 10:52:52 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
class RemoveMethodTest < ActiveSupport::TestCase
|
|
|
|
def test_remove_method_from_an_object
|
2016-08-07 23:05:28 +00:00
|
|
|
RemoveMethodTests::A.class_eval {
|
|
|
|
remove_possible_method(:do_something)
|
2011-11-07 10:52:52 +00:00
|
|
|
}
|
2018-01-25 02:14:10 +00:00
|
|
|
assert_not_respond_to RemoveMethodTests::A.new, :do_something
|
2011-11-07 10:52:52 +00:00
|
|
|
end
|
2015-05-05 04:22:30 +00:00
|
|
|
|
|
|
|
def test_remove_singleton_method_from_an_object
|
2016-08-07 23:05:28 +00:00
|
|
|
RemoveMethodTests::A.class_eval {
|
|
|
|
remove_possible_singleton_method(:do_something_else)
|
2015-05-05 04:22:30 +00:00
|
|
|
}
|
2018-01-25 02:14:10 +00:00
|
|
|
assert_not_respond_to RemoveMethodTests::A, :do_something_else
|
2015-05-05 04:22:30 +00:00
|
|
|
end
|
|
|
|
|
2011-11-07 10:52:52 +00:00
|
|
|
def test_redefine_method_in_an_object
|
2016-08-07 23:05:28 +00:00
|
|
|
RemoveMethodTests::A.class_eval {
|
|
|
|
redefine_method(:do_something) { return 100 }
|
|
|
|
redefine_method(:do_something_protected) { return 100 }
|
|
|
|
redefine_method(:do_something_private) { return 100 }
|
2011-11-07 10:52:52 +00:00
|
|
|
}
|
|
|
|
assert_equal 100, RemoveMethodTests::A.new.do_something
|
2015-10-26 09:12:51 +00:00
|
|
|
assert_equal 100, RemoveMethodTests::A.new.send(:do_something_protected)
|
|
|
|
assert_equal 100, RemoveMethodTests::A.new.send(:do_something_private)
|
|
|
|
|
|
|
|
assert RemoveMethodTests::A.public_method_defined? :do_something
|
|
|
|
assert RemoveMethodTests::A.protected_method_defined? :do_something_protected
|
|
|
|
assert RemoveMethodTests::A.private_method_defined? :do_something_private
|
2011-11-07 10:52:52 +00:00
|
|
|
end
|
2015-10-26 09:12:51 +00:00
|
|
|
end
|