summaryrefslogtreecommitdiff
path: root/test/ruby
diff options
context:
space:
mode:
Diffstat (limited to 'test/ruby')
-rw-r--r--test/ruby/test_io.rb43
1 files changed, 43 insertions, 0 deletions
diff --git a/test/ruby/test_io.rb b/test/ruby/test_io.rb
index 2da2ae95e6..98b1d7b074 100644
--- a/test/ruby/test_io.rb
+++ b/test/ruby/test_io.rb
@@ -1266,6 +1266,49 @@ class TestIO < Test::Unit::TestCase
f.close
end
+ def try_fdopen(fd, autoclose = true, level = 100)
+ if level > 0
+ try_fdopen(fd, autoclose, level - 1)
+ GC.start
+ level
+ else
+ IO.for_fd(fd, autoclose: autoclose)
+ nil
+ end
+ end
+
+ def test_autoclose
+ feature2250 = '[ruby-core:26222]'
+ pre = 'ft2250'
+
+ Tempfile.new(pre) do |t|
+ f = IO.for_fd(t.fileno)
+ assert_equal(true, f.autoclose?)
+ f.autoclose = false
+ assert_equal(false, f.autoclose?)
+ f.close
+ assert_nothing_raised(Errno::EBADF) {t.close}
+
+ t.open
+ f = IO.for_fd(t.fileno, autoclose: false)
+ assert_equal(false, f.autoclose?)
+ f.autoclose = true
+ assert_equal(true, f.autoclose?)
+ f.close
+ assert_raise(Errno::EBADF) {t.close}
+ end
+
+ Tempfile.new(pre) do |t|
+ try_fdopen(t.fileno)
+ assert_raise(Errno::EBADF) {t.close}
+ end
+
+ Tempfile.new(pre) do |t|
+ try_fdopen(f.fileno, false)
+ assert_nothing_raised(Errno::EBADF) {t.close}
+ end
+ end
+
def test_open_redirect
o = Object.new
def o.to_open; self; end