diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2019-07-03 04:12:20 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2019-07-03 04:22:41 +0900 |
commit | 796eeb6339952d92ae1b353d450c7883e589852d (patch) | |
tree | 59f8f48641492c7324de6ff2d78d7e703a3fbf91 /test/ruby/test_objectspace.rb | |
parent | 928260c2a613bbdd4402c300e0bf86ae7562e52a (diff) |
Fix up [Feature #15974]
* Fixed warning condition
* Fixed function signature
* Use ident hash
Diffstat (limited to 'test/ruby/test_objectspace.rb')
-rw-r--r-- | test/ruby/test_objectspace.rb | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/test/ruby/test_objectspace.rb b/test/ruby/test_objectspace.rb index c352b75b70..9007e05206 100644 --- a/test/ruby/test_objectspace.rb +++ b/test/ruby/test_objectspace.rb @@ -56,7 +56,7 @@ End end def test_finalizer - assert_in_out_err(["-e", <<-END], "", %w(:ok :ok :ok :ok), []) + assert_in_out_err(["-W0", "-e", <<-END], "", %w(:ok :ok :ok :ok)) a = [] ObjectSpace.define_finalizer(a) { p :ok } b = a.dup @@ -76,8 +76,8 @@ End ObjectSpace.define_finalizer([], fin) CODE end - assert_in_out_err([], code[""], ["finalized"]) - assert_in_out_err([], code["private "], ["finalized"]) + assert_in_out_err(["-W0"], code[""], ["finalized"]) + assert_in_out_err(["-W0"], code["private "], ["finalized"]) c = EnvUtil.labeled_class("C\u{3042}").new o = Object.new assert_raise_with_message(ArgumentError, /C\u{3042}/) { @@ -131,6 +131,32 @@ End END end + def test_self_referencing_finalizer + assert_separately(["-w"], "#{<<~"begin;"}\n#{<<~'end;'}") + begin; + obj = +"Test" + handler = proc {puts "finalized"} + assert_warning(/object is reachable from finalizer/) do + ObjectSpace.define_finalizer(obj, handler) + end + end; + end + + def test_indirectly_self_referencing_finalizer + assert_separately(["-w"], "#{<<~"begin;"}\n#{<<~'end;'}") + begin; + def scoped(indirect) + proc {puts "finalized"} + end + obj = +"Test" + indirect = [obj] + handler = scoped(indirect) + assert_warning(/object is reachable from finalizer/) do + ObjectSpace.define_finalizer(obj, handler) + end + end; + end + def test_each_object klass = Class.new new_obj = klass.new |