aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--test/ruby/test_io.rb43
2 files changed, 39 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index dfb5b34991..3487af7fd5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Tue Jan 10 02:19:22 2012 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * 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@gmail.com>
* lib/tempfile.rb (Tempfile#_close): clear @tempfile and @data[1] even
diff --git a/test/ruby/test_io.rb b/test/ruby/test_io.rb
index 76eb82c312..c89e8ace30 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
@@ -1410,12 +1411,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
@@ -1429,7 +1429,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)
@@ -1437,15 +1437,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