diff options
author | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2021-09-08 21:02:08 +0900 |
---|---|---|
committer | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2021-09-11 08:48:03 +0900 |
commit | 9b026ca39b27b1213758699555eb8e6d4874984c (patch) | |
tree | 86cbdf5e4504e15772d39834682010041bdfdf06 /tool/lib/test | |
parent | 1e18f4e60f948e5887ae696390c99def102d8345 (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.rb | 64 | ||||
-rw-r--r-- | tool/lib/test/unit/assertions.rb | 12 | ||||
-rw-r--r-- | tool/lib/test/unit/parallel.rb | 10 | ||||
-rw-r--r-- | tool/lib/test/unit/testcase.rb | 2 |
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 |