[前][次][番号順一覧][スレッド一覧]

ruby-changes:22204

From: nagachika <ko1@a...>
Date: Tue, 10 Jan 2012 02:26:04 +0900 (JST)
Subject: [ruby-changes:22204] nagachika:r34253 (trunk): * test/ruby/test_io.rb (test_autoclose_true_closed_by_finalizer,

nagachika	2012-01-10 02:25:53 +0900 (Tue, 10 Jan 2012)

  New Revision: 34253

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=34253

  Log:
    * 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]

  Modified files:
    trunk/ChangeLog
    trunk/test/ruby/test_io.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 34252)
+++ ChangeLog	(revision 34253)
@@ -1,3 +1,9 @@
+Tue Jan 10 02:19:22 2012  CHIKANAGA Tomoyuki  <nagachika00@g...>
+
+	* 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@g...>
 
 	* lib/tempfile.rb (Tempfile#_close): clear @tempfile and @data[1] even
Index: test/ruby/test_io.rb
===================================================================
--- test/ruby/test_io.rb	(revision 34252)
+++ test/ruby/test_io.rb	(revision 34253)
@@ -6,6 +6,7 @@
 require 'stringio'
 require 'timeout'
 require 'tempfile'
+require 'weakref'
 require_relative 'envutil'
 
 class TestIO < Test::Unit::TestCase
@@ -1410,12 +1411,11 @@
 
   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 @@
     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 @@
     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

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]