diff options
author | Jeremy Evans <code@jeremyevans.net> | 2023-11-08 15:19:45 +0000 |
---|---|---|
committer | git <svn-admin@ruby-lang.org> | 2023-11-08 15:19:52 +0000 |
commit | ddcfc9feabf22ed6cc1071e65948a1d512a906fe (patch) | |
tree | 9a5ceac7e323e22a5438f43b58601fd80dbbddef /test | |
parent | d80009d1693fe3288be265ecc53ade362d89de59 (diff) | |
download | ruby-ddcfc9feabf22ed6cc1071e65948a1d512a906fe.tar.gz |
[ruby/tempfile] Fix Tempfile#{dup,clone}
Instead of storing the delegate in @tmpfile, use __getobj__, since
delegate library already handles dup/clone for that. Copy the
unlinked, mode, and opts instance variables to the returned object
when using dup/clone.
Split the close/unlink finalizer into two finalizers. The close
finalizer always closes when any Tempfile instance is GCed, since
each Tempfile instance uses a separate file descriptor. The unlink
finalizer unlinks only when the original and all duped/cloned
Tempfiles are GCed, since all share the same path.
For Tempfile#open, undefine the close finalizer after closing the
current file, the redefine the close finalizer with the new file.
Fixes [Bug #19441]
https://github.com/ruby/tempfile/commit/dafabf9c7b
Diffstat (limited to 'test')
-rw-r--r-- | test/test_tempfile.rb | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/test/test_tempfile.rb b/test/test_tempfile.rb index 87c1241df8..d5d684b016 100644 --- a/test/test_tempfile.rb +++ b/test/test_tempfile.rb @@ -63,6 +63,22 @@ class TestTempfile < Test::Unit::TestCase assert_match(/\.txt$/, File.basename(t.path)) end + def test_dup + t = tempfile + t2 = t.dup + t2.close + assert_equal true, t2.closed? + assert_equal false, t.closed? + end + + def test_clone + t = tempfile + t2 = t.clone + t2.close + assert_equal true, t2.closed? + assert_equal false, t.closed? + end + def test_unlink t = tempfile("foo") path = t.path |