summaryrefslogtreecommitdiff
path: root/test/ruby/test_module.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/ruby/test_module.rb')
-rw-r--r--test/ruby/test_module.rb138
1 files changed, 33 insertions, 105 deletions
diff --git a/test/ruby/test_module.rb b/test/ruby/test_module.rb
index 81c5345a5f..b5414d139e 100644
--- a/test/ruby/test_module.rb
+++ b/test/ruby/test_module.rb
@@ -535,7 +535,7 @@ class TestModule < Test::Unit::TestCase
super
end
end.new
- assert_operator(m, :<, Enumerable)
+ assert_equal(true, m < Enumerable)
end
def test_prepend_self
@@ -572,26 +572,6 @@ class TestModule < Test::Unit::TestCase
assert_equal(2, a2.b)
end
- def test_ancestry_of_duped_classes
- m = Module.new
- sc = Class.new
- a = Class.new(sc) do
- def b; 2 end
- prepend m
- end
-
- a2 = a.dup.new
-
- assert_kind_of Object, a2
- assert_kind_of sc, a2
- refute_kind_of a, a2
- assert_kind_of m, a2
-
- assert_kind_of Class, a2.class
- assert_kind_of sc.singleton_class, a2.class
- assert_same sc, a2.class.superclass
- end
-
def test_gc_prepend_chain
assert_separately([], <<-EOS)
10000.times { |i|
@@ -776,25 +756,6 @@ class TestModule < Test::Unit::TestCase
assert_equal([:m1, :m0, :m, :sc, :m1, :m0, :c], sc.new.m)
end
- def test_protected_include_into_included_module
- m1 = Module.new do
- def other_foo(other)
- other.foo
- end
-
- protected
- def foo
- :ok
- end
- end
- m2 = Module.new
- c1 = Class.new { include m2 }
- c2 = Class.new { include m2 }
- m2.include(m1)
-
- assert_equal :ok, c1.new.other_foo(c2.new)
- end
-
def test_instance_methods
assert_equal([:user, :user2], User.instance_methods(false).sort)
assert_equal([:user, :user2, :mixin].sort, User.instance_methods(true).sort)
@@ -994,15 +955,6 @@ class TestModule < Test::Unit::TestCase
assert_equal([:bClass1], BClass.public_instance_methods(false))
end
- def test_undefined_instance_methods
- assert_equal([], AClass.undefined_instance_methods)
- assert_equal([], BClass.undefined_instance_methods)
- c = Class.new(AClass) {undef aClass}
- assert_equal([:aClass], c.undefined_instance_methods)
- c = Class.new(c)
- assert_equal([], c.undefined_instance_methods)
- end
-
def test_s_public
o = (c = Class.new(AClass)).new
assert_raise(NoMethodError, /private method/) {o.aClass1}
@@ -1328,6 +1280,8 @@ class TestModule < Test::Unit::TestCase
end
end
include LangModuleSpecInObject
+ module LangModuleTop
+ end
puts "ok" if LangModuleSpecInObject::LangModuleTop == LangModuleTop
INPUT
@@ -1728,47 +1682,6 @@ class TestModule < Test::Unit::TestCase
assert_equal("TestModule::C\u{df}", c.name, '[ruby-core:24600]')
c = Module.new.module_eval("class X\u{df} < Module; self; end")
assert_match(/::X\u{df}:/, c.new.to_s)
- ensure
- Object.send(:remove_const, "C\u{df}")
- end
-
-
- def test_const_added
- eval(<<~RUBY)
- module TestConstAdded
- @memo = []
- class << self
- attr_accessor :memo
-
- def const_added(sym)
- memo << sym
- end
- end
- CONST = 1
- module SubModule
- end
-
- class SubClass
- end
- end
- TestConstAdded::OUTSIDE_CONST = 2
- module TestConstAdded::OutsideSubModule; end
- class TestConstAdded::OutsideSubClass; end
- RUBY
- TestConstAdded.const_set(:CONST_SET, 3)
- assert_equal [
- :CONST,
- :SubModule,
- :SubClass,
- :OUTSIDE_CONST,
- :OutsideSubModule,
- :OutsideSubClass,
- :CONST_SET,
- ], TestConstAdded.memo
- ensure
- if self.class.const_defined? :TestConstAdded
- self.class.send(:remove_const, :TestConstAdded)
- end
end
def test_method_added
@@ -2352,18 +2265,6 @@ class TestModule < Test::Unit::TestCase
assert_equal(:foo, removed)
end
- def test_frozen_prepend_remove_method
- [Module, Class].each do |klass|
- mod = klass.new do
- prepend(Module.new)
- def foo; end
- end
- mod.freeze
- assert_raise(FrozenError, '[Bug #19166]') { mod.send(:remove_method, :foo) }
- assert_equal([:foo], mod.instance_methods(false))
- end
- end
-
def test_prepend_class_ancestors
bug6658 = '[ruby-core:45919]'
m = labeled_module("m")
@@ -2870,7 +2771,6 @@ class TestModule < Test::Unit::TestCase
def test_invalid_attr
%W[
- foo=
foo?
@foo
@@foo
@@ -3175,7 +3075,6 @@ class TestModule < Test::Unit::TestCase
end
def test_redefinition_mismatch
- omit "Investigating trunk-rjit failure on ci.rvm.jp" if defined?(RubyVM::RJIT) && RubyVM::RJIT.enabled?
m = Module.new
m.module_eval "A = 1", __FILE__, line = __LINE__
e = assert_raise_with_message(TypeError, /is not a module/) {
@@ -3292,6 +3191,35 @@ class TestModule < Test::Unit::TestCase
CODE
end
+ def test_complemented_method_entry_memory_leak
+ # [Bug #19894]
+ assert_no_memory_leak([], <<~PREP, <<~CODE, rss: true)
+ code = proc do
+ $c = Class.new do
+ def foo; end
+ end
+
+ $m = Module.new do
+ refine $c do
+ def foo; end
+ end
+ end
+
+ Class.new do
+ using $m
+
+ def initialize
+ o = $c.new
+ o.method(:foo).unbind
+ end
+ end.new
+ end
+ 1_000.times(&code)
+ PREP
+ 100_000.times(&code)
+ CODE
+ end
+
private
def assert_top_method_is_private(method)
@@ -3299,7 +3227,7 @@ class TestModule < Test::Unit::TestCase
methods = singleton_class.private_instance_methods(false)
assert_include(methods, :#{method}, ":#{method} should be private")
- assert_raise_with_message(NoMethodError, /^private method `#{method}' called for /) {
+ assert_raise_with_message(NoMethodError, "private method `#{method}' called for main:Object") {
recv = self
recv.#{method}
}