ruby-changes:22204
From: nagachika <ko1@a...>
Date: Tue, 10 Jan 2012 02:26:04 +0900 (JST)
Subject: [ruby-changes:22204] nagachika:r34253 (trunk): * test/ruby/test_io.rb (test_autoclose_true_closed_by_finalizer,
nagachika 2012-01-10 02:25:53 +0900 (Tue, 10 Jan 2012) New Revision: 34253 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=34253 Log: * 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] Modified files: trunk/ChangeLog trunk/test/ruby/test_io.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 34252) +++ ChangeLog (revision 34253) @@ -1,3 +1,9 @@ +Tue Jan 10 02:19:22 2012 CHIKANAGA Tomoyuki <nagachika00@g...> + + * 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] + Tue Jan 10 00:41:28 2012 CHIKANAGA Tomoyuki <nagachika00@g...> * lib/tempfile.rb (Tempfile#_close): clear @tempfile and @data[1] even Index: test/ruby/test_io.rb =================================================================== --- test/ruby/test_io.rb (revision 34252) +++ test/ruby/test_io.rb (revision 34253) @@ -6,6 +6,7 @@ require 'stringio' require 'timeout' require 'tempfile' +require 'weakref' require_relative 'envutil' class TestIO < Test::Unit::TestCase @@ -1410,12 +1411,11 @@ 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 @@ -1429,7 +1429,7 @@ 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) @@ -1437,15 +1437,38 @@ 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 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/