summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKoichi Sasada <ko1@atdot.net>2020-12-14 10:50:22 +0900
committerKoichi Sasada <ko1@atdot.net>2020-12-14 11:57:46 +0900
commit0362b4c689e319e233691ee052cd703bf8d2baa1 (patch)
tree7182ef2210f0d75cc9764ff79dc7c01019ac92b1
parenta8aa169b8f1f89660037c874e8fc2feaf596a43a (diff)
add tests for method cache.
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/3892
-rw-r--r--test/ruby/test_method_cache.rb65
1 files changed, 65 insertions, 0 deletions
diff --git a/test/ruby/test_method_cache.rb b/test/ruby/test_method_cache.rb
new file mode 100644
index 0000000000..f3b38f123e
--- /dev/null
+++ b/test/ruby/test_method_cache.rb
@@ -0,0 +1,65 @@
+# frozen_string_literal: true
+require 'test/unit'
+
+class TestMethodCache < Test::Unit::TestCase
+ def test_undef
+ # clear same
+ c0 = Class.new do
+ def foo; end
+ undef foo
+ end
+
+ assert_raise(NoMethodError) do
+ c0.new.foo
+ end
+
+ c0.class_eval do
+ def foo; :ok; end
+ end
+
+ assert_equal :ok, c0.new.foo
+ end
+
+ def test_undef_with_subclasses
+ # with subclasses
+ c0 = Class.new do
+ def foo; end
+ undef foo
+ end
+
+ c1 = Class.new(c0)
+
+ assert_raise(NoMethodError) do
+ c0.new.foo
+ end
+
+ c0.class_eval do
+ def foo; :ok; end
+ end
+
+ assert_equal :ok, c0.new.foo
+ end
+
+ def test_undef_with_subclasses_complicated
+ c0 = Class.new{ def foo; end }
+ c1 = Class.new(c0){ undef foo }
+ c2 = Class.new(c1)
+ c3 = Class.new(c2)
+ c4 = Class.new(c3)
+
+ assert_raise(NoMethodError) do
+ c3.new.foo
+ end
+
+ c2.class_eval do
+ def foo; :c2; end
+ end
+
+ assert_raise(NoMethodError) do
+ c1.new.foo
+ end
+
+ assert_equal :c2, c3.new.foo
+ end
+end
+