aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authornagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-01-09 17:25:53 +0000
committernagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-01-09 17:25:53 +0000
commit71935466b7d42eb883c76c472f07913dd85e550e (patch)
tree7718efaf1a158dca0541273ebac06e482703be65 /test
parentc572ed2d25c290de7f518278dcae29d375c49d2d (diff)
downloadruby-71935466b7d42eb883c76c472f07913dd85e550e.tar.gz
* 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/trunk@34253 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test')
-rw-r--r--test/ruby/test_io.rb43
1 files changed, 33 insertions, 10 deletions
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