Skip to content

Commit

Permalink
Make the backtrace filter work with MiniTest 4.1.0.
Browse files Browse the repository at this point in the history
  • Loading branch information
Alexander Kern committed Oct 15, 2012
1 parent 1e4c0fe commit 4a3e1c8
Show file tree
Hide file tree
Showing 10 changed files with 51 additions and 49 deletions.
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
module MiniTest
# Filters backtraces of exceptions that may arise when running tests.
class BacktraceFilter
class ExtensibleBacktraceFilter
# Returns the default filter.
#
# The default filter will filter out all MiniTest and minitest-reporters
# lines.
#
# @return [MiniTest::BacktraceFilter]
# @return [MiniTest::ExtensibleBacktraceFilter]
def self.default_filter
unless defined? @default_filter
filter = self.new
Expand Down
4 changes: 4 additions & 0 deletions lib/minitest/reporter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ def runner
Unit.runner
end

def filter_backtrace(backtrace)
MiniTest.filter_backtrace(backtrace)
end

def output
runner.output
end
Expand Down
29 changes: 25 additions & 4 deletions lib/minitest/reporters.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ module MiniTest
require "minitest/reporter_runner"
require "minitest/before_test_hook"
require "minitest/test_runner"
require "minitest/backtrace_filter"
require "minitest/extensible_backtrace_filter"

module Reporters
require "minitest/reporters/version"
Expand All @@ -18,14 +18,19 @@ module Reporters
autoload :GuardReporter, "minitest/reporters/guard_reporter"
autoload :JUnitReporter, "minitest/reporters/junit_reporter"

def self.use!(console_reporters = ProgressReporter.new, env = ENV)
include_hook!
def self.use!(console_reporters = ProgressReporter.new, env = ENV, backtrace_filter = ExtensibleBacktraceFilter.default_filter)
use_runner!(console_reporters, env)
use_before_test_hook!
use_backtrace_filter!(backtrace_filter)
end

def self.use_runner!(console_reporters, env)
runner = ReporterRunner.new
runner.reporters = choose_reporters(console_reporters, env)
Unit.runner = runner
end

def self.include_hook!
def self.use_before_test_hook!
if Unit::VERSION >= "3.3.0"
Unit::TestCase.send(:include, BeforeTestHook)
else
Expand All @@ -35,6 +40,22 @@ def self.include_hook!
end
end

def self.use_backtrace_filter!(backtrace_filter)
if Unit::VERSION < "4.1.0"
MiniTest.class_eval do
class << self
attr_accessor :backtrace_filter
end

def self.filter_backtrace(backtrace)
backtrace_filter.filter(backtrace)
end
end
end

MiniTest.backtrace_filter = backtrace_filter
end

def self.choose_reporters(console_reporters, env)
if env["TM_PID"]
[RubyMateReporter.new]
Expand Down
27 changes: 10 additions & 17 deletions lib/minitest/reporters/default_reporter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

module MiniTest
module Reporters
# A reporter identical to the standard MiniTest reporter.
# A reporter identical to the standard MiniTest reporter except with more
# colors.
#
# Based upon Ryan Davis of Seattle.rb's MiniTest (MIT License).
#
Expand All @@ -11,21 +12,13 @@ class DefaultReporter
include Reporter

def initialize(options = {})
if options.is_a?(Hash)
@backtrace_filter = options.fetch(:backtrace_filter, BacktraceFilter.default_filter)
@detailed_skip = options.fetch(:detailed_skip, true)
@color = options.fetch(:color) do
output.tty? && (
ENV["TERM"] == "screen" ||
ENV["TERM"] =~ /term(?:-(?:256)?color)?\z/ ||
ENV["EMACS"] == "t"
)
end
else
warn "Please use :backtrace_filter => filter instead of passing in the filter directly."
@backtrace_filter = options
@detailed_skip = true
@color = false
@detailed_skip = options.fetch(:detailed_skip, true)
@color = options.fetch(:color) do
output.tty? && (
ENV["TERM"] == "screen" ||
ENV["TERM"] =~ /term(?:-(?:256)?color)?\z/ ||
ENV["EMACS"] == "t"
)
end
end

Expand Down Expand Up @@ -140,7 +133,7 @@ def message_for(test_runner)
end
when :failure then "Failure:\n#{test}(#{suite}) [#{location(e)}]:\n#{e.message}\n"
when :error
bt = @backtrace_filter.filter(test_runner.exception.backtrace).join "\n "
bt = filter_backtrace(test_runner.exception.backtrace).join "\n "
"Error:\n#{test}(#{suite}):\n#{e.class}: #{e.message}\n #{bt}\n"
end
end
Expand Down
5 changes: 2 additions & 3 deletions lib/minitest/reporters/junit_reporter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,7 @@ module Reporters
class JUnitReporter
include Reporter

def initialize(reports_dir = "test/reports", backtrace_filter = BacktraceFilter.default_filter)
@backtrace_filter = backtrace_filter
def initialize(reports_dir = "test/reports")
@reports_path = File.join(Dir.getwd, reports_dir)
puts "Emptying #{@reports_path}"
FileUtils.remove_dir(@reports_path) if File.exists?(@reports_path)
Expand Down Expand Up @@ -74,7 +73,7 @@ def message_for(test_runner)
when :skip then "Skipped:\n#{test}(#{suite}) [#{location(e)}]:\n#{e.message}\n"
when :failure then "Failure:\n#{test}(#{suite}) [#{location(e)}]:\n#{e.message}\n"
when :error
bt = @backtrace_filter.filter(test_runner.exception.backtrace).join "\n "
bt = filter_backtrace(test_runner.exception.backtrace).join "\n "
"Error:\n#{test}(#{suite}):\n#{e.class}: #{e.message}\n #{bt}\n"
end
end
Expand Down
11 changes: 2 additions & 9 deletions lib/minitest/reporters/progress_reporter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,7 @@ class ProgressReporter
INFO_PADDING = 2

def initialize(options = {})
if options.is_a?(Hash)
@backtrace_filter = options.fetch(:backtrace_filter, BacktraceFilter.default_filter)
@detailed_skip = options.fetch(:detailed_skip, true)
else
warn "Please use :backtrace_filter => filter instead of passing in the filter directly."
@backtrace_filter = options
@detailed_skip = true
end
@detailed_skip = options.fetch(:detailed_skip, true)

@progress = PowerBar.new(:msg => "0/#{runner.test_count}")
@progress.settings.tty.finite.output = lambda { |s| print(s) }
Expand Down Expand Up @@ -119,7 +112,7 @@ def print_test_with_time(suite, test)
def print_info(e)
e.message.each_line { |line| puts pad(line) }

trace = @backtrace_filter.filter(e.backtrace)
trace = filter_backtrace(e.backtrace)
trace.each { |line| puts pad(line) }
end

Expand Down
6 changes: 1 addition & 5 deletions lib/minitest/reporters/ruby_mate_reporter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,6 @@ class RubyMateReporter

INFO_PADDING = 2

def initialize(backtrace_filter = BacktraceFilter.default_filter)
@backtrace_filter = backtrace_filter
end

def before_suites(suites, type)
puts 'Started'
puts
Expand Down Expand Up @@ -61,7 +57,7 @@ def print_test_with_time(suite, test)
def print_info(e)
e.message.each_line { |line| puts pad(line) }

trace = @backtrace_filter.filter(e.backtrace)
trace = filter_backtrace(e.backtrace)
trace.each { |line| puts pad(line) }
end

Expand Down
6 changes: 1 addition & 5 deletions lib/minitest/reporters/spec_reporter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,6 @@ class SpecReporter
MARK_SIZE = 5
INFO_PADDING = 8

def initialize(backtrace_filter = BacktraceFilter.default_filter)
@backtrace_filter = backtrace_filter
end

def before_suites(suites, type)
puts 'Started'
puts
Expand Down Expand Up @@ -86,7 +82,7 @@ def print_time(test)
def print_info(e)
e.message.each_line { |line| puts pad(line, INFO_PADDING) }

trace = @backtrace_filter.filter(e.backtrace)
trace = filter_backtrace(e.backtrace)
trace.each { |line| puts pad(line, INFO_PADDING) }
end

Expand Down
2 changes: 1 addition & 1 deletion minitest-reporters.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ Gem::Specification.new do |s|

s.rubyforge_project = 'minitest-reporters'

s.add_dependency 'minitest', '>= 2.12', '< 4.0'
s.add_dependency 'minitest', '>= 2.12', '< 5.0'
s.add_dependency 'ansi'
s.add_dependency 'powerbar'
s.add_dependency 'builder'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
require_relative "../../test_helper"

module MiniTestReportersTest
class BacktraceFilterTest < TestCase
class ExtensibleBacktraceFilterTest < TestCase
def setup
@default_filter = MiniTest::BacktraceFilter.default_filter
@filter = MiniTest::BacktraceFilter.new
@default_filter = MiniTest::ExtensibleBacktraceFilter.default_filter
@filter = MiniTest::ExtensibleBacktraceFilter.new
@backtrace = ["foo", "bar", "baz"]
end

Expand Down

0 comments on commit 4a3e1c8

Please sign in to comment.