diff options
Diffstat (limited to 'test/ruby/test_module.rb')
| -rw-r--r-- | test/ruby/test_module.rb | 138 |
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} } |
