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/unit.rb | |
parent | 1e18f4e60f948e5887ae696390c99def102d8345 (diff) |
Integrate Minitest to Test
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/4813
Diffstat (limited to 'tool/lib/test/unit.rb')
-rw-r--r-- | tool/lib/test/unit.rb | 64 |
1 files changed, 57 insertions, 7 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 |