summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2019-07-03 04:12:20 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2019-07-03 04:22:41 +0900
commit796eeb6339952d92ae1b353d450c7883e589852d (patch)
tree59f8f48641492c7324de6ff2d78d7e703a3fbf91 /test
parent928260c2a613bbdd4402c300e0bf86ae7562e52a (diff)
Fix up [Feature #15974]
* Fixed warning condition * Fixed function signature * Use ident hash
Diffstat (limited to 'test')
-rw-r--r--test/ruby/test_objectspace.rb32
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