summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-05-25 00:41:18 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-05-25 00:41:18 +0000
commit0be4ec01cd5f9d517afd86f1c5f7a9922e6dfae3 (patch)
tree4d9186dc3b6907c8a1bdbad1a64e80bf1bee8ede
parentbb64a9617813d8e1bf18c531d7cbaa19bfb5e5a0 (diff)
* test/lib/minitest/unit.rb: Show leakes threads and tempfiles.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46089 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog4
-rw-r--r--test/lib/minitest/unit.rb35
2 files changed, 39 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 05137bf6ea..65bc83e2c4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Sun May 25 09:40:44 2014 Tanaka Akira <akr@fsij.org>
+
+ * test/lib/minitest/unit.rb: Show leakes threads and tempfiles.
+
Sun May 25 08:54:38 2014 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
* test/openssl/test_partial_record_read.rb: Testing read_nonblock on
diff --git a/test/lib/minitest/unit.rb b/test/lib/minitest/unit.rb
index c6489ba01e..6f686ac85e 100644
--- a/test/lib/minitest/unit.rb
+++ b/test/lib/minitest/unit.rb
@@ -927,6 +927,8 @@ module MiniTest
inst = suite.new method
inst._assertions = 0
+ live1 = live_thread_and_tempfile
+
print "#{suite}##{method} = " if @verbose
start_time = Time.now if @verbose
@@ -936,12 +938,45 @@ module MiniTest
print result
puts if @verbose
+ check_tempfile_and_thread inst, live1
+
inst._assertions
}
return assertions.size, assertions.inject(0) { |sum, n| sum + n }
end
+ def live_thread_and_tempfile
+ live_threads = ObjectSpace.each_object(Thread).find_all {|t|
+ t != Thread.current && t.alive?
+ }
+ if defined? Tempfile
+ live_tempfiles = ObjectSpace.each_object(Tempfile).find_all {|t|
+ t.path
+ }
+ else
+ live_tempfiles = []
+ end
+ [live_threads, live_tempfiles]
+ end
+
+ def check_tempfile_and_thread(inst, live1)
+ live2 = live_thread_and_tempfile
+ thread_finished = live1[0] - live2[0]
+ if !thread_finished.empty?
+ puts "Finished threads: #{inst.class}\##{inst.__name__}:#{thread_finished.map {|t| ' ' + t.inspect }.join}"
+ end
+ thread_retained = live2[0] - live1[0]
+ if !thread_retained.empty?
+ puts "Leaked threads: #{inst.class}\##{inst.__name__}:#{thread_retained.map {|t| ' ' + t.inspect }.join}"
+ end
+ tempfile_retained = live2[1] - live1[1]
+ if !tempfile_retained.empty?
+ puts "Leaked tempfiles: #{inst.class}\##{inst.__name__}:#{tempfile_retained.map {|t| ' ' + t.inspect }.join}"
+ tempfile_retained.each {|t| t.unlink }
+ end
+ end
+
##
# Record the result of a single test. Makes it very easy to gather
# information. Eg: