summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorayumin <ayumin@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-02-07 05:02:32 +0000
committerayumin <ayumin@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-02-07 05:02:32 +0000
commitb460f8849b6123a1ae1655da62ef9fda1619b891 (patch)
tree5570675927160c0b142356a5fa8bae7207d1190a /test
parentcb94d9df62356a0437aafae9e56eddd033748db4 (diff)
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
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 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