summaryrefslogtreecommitdiff
path: root/tool/lib/test
diff options
context:
space:
mode:
authorHiroshi SHIBATA <hsbt@ruby-lang.org>2021-09-08 21:02:08 +0900
committerHiroshi SHIBATA <hsbt@ruby-lang.org>2021-09-11 08:48:03 +0900
commit9b026ca39b27b1213758699555eb8e6d4874984c (patch)
tree86cbdf5e4504e15772d39834682010041bdfdf06 /tool/lib/test
parent1e18f4e60f948e5887ae696390c99def102d8345 (diff)
Integrate Minitest to Test
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/4813
Diffstat (limited to 'tool/lib/test')
-rw-r--r--tool/lib/test/unit.rb64
-rw-r--r--tool/lib/test/unit/assertions.rb12
-rw-r--r--tool/lib/test/unit/parallel.rb10
-rw-r--r--tool/lib/test/unit/testcase.rb2
4 files changed, 66 insertions, 22 deletions
diff --git a/tool/lib/test/unit.rb b/tool/lib/test/unit.rb
index ed4a376b76..78e706404e 100644
--- a/tool/lib/test/unit.rb
+++ b/tool/lib/test/unit.rb
@@ -1,14 +1,60 @@
# frozen_string_literal: true
-require_relative '../minitest/unit'
-require 'test/unit/assertions'
require_relative '../envutil'
require_relative '../colorize'
+require 'test/unit/assertions'
require 'test/unit/testcase'
require 'optparse'
+require "leakchecker"
# See Test::Unit
module Test
+
+ ##
+ # Assertion base class
+
+ class Assertion < Exception; end
+
+ ##
+ # Assertion raised when skipping a test
+
+ class Skip < Assertion; end
+
+ class << self
+ ##
+ # Filter object for backtraces.
+
+ attr_accessor :backtrace_filter
+ end
+
+ class BacktraceFilter # :nodoc:
+ def filter bt
+ return ["No backtrace"] unless bt
+
+ new_bt = []
+
+ unless $DEBUG then
+ bt.each do |line|
+ break if line =~ /lib\/minitest/
+ new_bt << line
+ end
+
+ new_bt = bt.reject { |line| line =~ /lib\/minitest/ } if new_bt.empty?
+ new_bt = bt.dup if new_bt.empty?
+ else
+ new_bt = bt.dup
+ end
+
+ new_bt
+ end
+ end
+
+ self.backtrace_filter = BacktraceFilter.new
+
+ def self.filter_backtrace bt # :nodoc:
+ backtrace_filter.filter bt
+ end
+
##
# Test::Unit is an implementation of the xUnit testing framework for Ruby.
#
@@ -17,6 +63,10 @@ module Test
# Test::Unit has been left in the standard library to support legacy test
# suites.
module Unit
+ # Compatibility hack for assert_raise
+ AssertionFailedError = Test::Assertion
+ PendedError = Test::Skip
+
TEST_UNIT_IMPLEMENTATION = 'test/unit compatibility layer using minitest' # :nodoc:
module RunCount # :nodoc: all
@@ -583,7 +633,7 @@ module Test
unless @interrupt || !@options[:retry] || @need_quit
parallel = @options[:parallel]
@options[:parallel] = false
- suites, rep = rep.partition {|r| r[:testcase] && r[:file] && r[:report].any? {|e| !e[2].is_a?(MiniTest::Skip)}}
+ suites, rep = rep.partition {|r| r[:testcase] && r[:file] && r[:report].any? {|e| !e[2].is_a?(Test::Skip)}}
suites.map {|r| File.realpath(r[:file])}.uniq.each {|file| require file}
suites.map! {|r| eval("::"+r[:testcase])}
del_status_line or puts
@@ -1488,21 +1538,21 @@ module Test
# hidden when not verbose (-v), note this is temporally.
n = report.size
e = case e
- when MiniTest::Skip then
+ when Test::Skip then
@skips += 1
return "S" unless @verbose
"Skipped:\n#{klass}##{meth} [#{location e}]:\n#{e.message}\n"
- when MiniTest::Assertion then
+ when Test::Assertion then
@failures += 1
"Failure:\n#{klass}##{meth} [#{location e}]:\n#{e.message}\n"
else
@errors += 1
- bt = MiniTest::filter_backtrace(e.backtrace).join "\n "
+ bt = Test::filter_backtrace(e.backtrace).join "\n "
"Error:\n#{klass}##{meth}:\n#{e.class}: #{e.message.b}\n #{bt}\n"
end
@report << e
rep = e[0, 1]
- if MiniTest::Skip === e and /no message given\z/ =~ e.message
+ if Test::Skip === e and /no message given\z/ =~ e.message
report.slice!(n..-1)
rep = "."
end
diff --git a/tool/lib/test/unit/assertions.rb b/tool/lib/test/unit/assertions.rb
index 711d8a6bc3..db8128536c 100644
--- a/tool/lib/test/unit/assertions.rb
+++ b/tool/lib/test/unit/assertions.rb
@@ -1,5 +1,4 @@
# frozen_string_literal: true
-require 'minitest/unit'
require_relative '../../core_assertions'
require 'pp'
@@ -119,7 +118,7 @@ module Test
self._assertions += 1
unless test then
msg = msg.call if Proc === msg
- raise MiniTest::Assertion, msg
+ raise Test::Assertion, msg
end
true
end
@@ -410,7 +409,7 @@ module Test
"Class: <#{e.class}>",
"Message: <#{e.message.inspect}>",
"---Backtrace---",
- "#{MiniTest::filter_backtrace(e.backtrace).join("\n")}",
+ "#{Test::filter_backtrace(e.backtrace).join("\n")}",
"---------------",
].join "\n"
end
@@ -580,7 +579,7 @@ module Test
def skip msg = nil, bt = caller
msg ||= "Skipped, no message given"
@skip = true
- raise MiniTest::Skip, msg, bt
+ raise Test::Skip, msg, bt
end
alias omit skip
@@ -883,10 +882,5 @@ EOT
template.gsub(/\G((?:[^\\]|\\.)*?)(\\)?\?/) { $1 + ($2 ? "?" : mu_pp(arguments.shift)) }
end
end
-
- # Compatibility hack for assert_raise
- AssertionFailedError = MiniTest::Assertion
- PendedError = MiniTest::Skip
-
end
end
diff --git a/tool/lib/test/unit/parallel.rb b/tool/lib/test/unit/parallel.rb
index b0d8262bfc..84bf0c3e25 100644
--- a/tool/lib/test/unit/parallel.rb
+++ b/tool/lib/test/unit/parallel.rb
@@ -160,21 +160,21 @@ module Test
end
def puke(klass, meth, e) # :nodoc:
- if e.is_a?(MiniTest::Skip)
- new_e = MiniTest::Skip.new(e.message)
+ if e.is_a?(Test::Skip)
+ new_e = Test::Skip.new(e.message)
new_e.set_backtrace(e.backtrace)
e = new_e
end
- @partial_report << [klass.name, meth, e.is_a?(MiniTest::Assertion) ? e : ProxyError.new(e)]
+ @partial_report << [klass.name, meth, e.is_a?(Test::Assertion) ? e : ProxyError.new(e)]
super
end
def record(suite, method, assertions, time, error) # :nodoc:
case error
when nil
- when MiniTest::Assertion, MiniTest::Skip
+ when Test::Assertion, Test::Skip
case error.cause
- when nil, MiniTest::Assertion, MiniTest::Skip
+ when nil, Test::Assertion, Test::Skip
else
bt = error.backtrace
error = error.class.new(error.message)
diff --git a/tool/lib/test/unit/testcase.rb b/tool/lib/test/unit/testcase.rb
index bbba87f63b..6ce9f5940d 100644
--- a/tool/lib/test/unit/testcase.rb
+++ b/tool/lib/test/unit/testcase.rb
@@ -191,7 +191,7 @@ module Test
rescue *PASSTHROUGH_EXCEPTIONS
raise
rescue Exception => e
- @passed = MiniTest::Skip === e
+ @passed = Test::Skip === e
time = Time.now - start_time
runner.record self.class, self.__name__, self._assertions, time, e
result = runner.puke self.class, self.__name__, e