From b460f8849b6123a1ae1655da62ef9fda1619b891 Mon Sep 17 00:00:00 2001 From: ayumin Date: Tue, 7 Feb 2012 05:02:32 +0000 Subject: merge revision(s) 34253: * test/ruby/test_io.rb (test_autoclose_true_closed_by_finalizer, test_autoclose_true_closed_by_finalizer): skip if IO objects are not recycled yet. [ruby-dev:45098] [Bug #5850] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_3@34454 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/ruby/test_io.rb | 43 +++++++++++++++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 10 deletions(-) (limited to 'test') diff --git a/test/ruby/test_io.rb b/test/ruby/test_io.rb index 6e4d088bf9..0fb28071cc 100644 --- a/test/ruby/test_io.rb +++ b/test/ruby/test_io.rb @@ -6,6 +6,7 @@ require 'socket' require 'stringio' require 'timeout' require 'tempfile' +require 'weakref' require_relative 'envutil' class TestIO < Test::Unit::TestCase @@ -1382,12 +1383,11 @@ class TestIO < Test::Unit::TestCase def try_fdopen(fd, autoclose = true, level = 100) if level > 0 - try_fdopen(fd, autoclose, level - 1) + f = try_fdopen(fd, autoclose, level - 1) GC.start - level + f else - IO.for_fd(fd, autoclose: autoclose) - nil + WeakRef.new(IO.for_fd(fd, autoclose: autoclose)) end end @@ -1401,7 +1401,7 @@ class TestIO < Test::Unit::TestCase f.autoclose = false assert_equal(false, f.autoclose?) f.close - assert_nothing_raised(Errno::EBADF) {t.close} + assert_nothing_raised(Errno::EBADF, feature2250) {t.close} t.open f = IO.for_fd(t.fileno, autoclose: false) @@ -1409,15 +1409,38 @@ class TestIO < Test::Unit::TestCase f.autoclose = true assert_equal(true, f.autoclose?) f.close - assert_raise(Errno::EBADF) {t.close} + assert_raise(Errno::EBADF, feature2250) {t.close} + end + def test_autoclose_true_closed_by_finalizer + feature2250 = '[ruby-core:26222]' + pre = 'ft2250' t = Tempfile.new(pre) - try_fdopen(t.fileno) - assert_raise(Errno::EBADF) {t.close} + w = try_fdopen(t.fileno) + begin + w.close + begin + t.close + rescue Errno::EBADF + end + skip "expect IO object was GC'ed but not recycled yet" + rescue WeakRef::RefError + assert_raise(Errno::EBADF, feature2250) {t.close} + end + end + def test_autoclose_false_closed_by_finalizer + feature2250 = '[ruby-core:26222]' + pre = 'ft2250' t = Tempfile.new(pre) - try_fdopen(t.fileno, false) - assert_nothing_raised(Errno::EBADF) {t.close} + w = try_fdopen(t.fileno, false) + begin + w.close + t.close + skip "expect IO object was GC'ed but not recycled yet" + rescue WeakRef::RefError + assert_nothing_raised(Errno::EBADF, feature2250) {t.close} + end end def test_open_redirect -- cgit v1.2.3