2018-02-05 06:04:25 -05:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
require "abstract_unit"
|
2020-10-07 16:03:11 -04:00
|
|
|
require "env_helpers"
|
2018-02-05 06:04:25 -05:00
|
|
|
|
|
|
|
class Minitest::RailsPluginTest < ActiveSupport::TestCase
|
2020-10-07 16:03:11 -04:00
|
|
|
include EnvHelpers
|
|
|
|
|
2018-02-05 06:04:25 -05:00
|
|
|
setup do
|
|
|
|
@output = StringIO.new("".encode("UTF-8"))
|
|
|
|
end
|
|
|
|
|
2020-10-07 16:03:11 -04:00
|
|
|
test "replaces backtrace filter with one that silences gem lines" do
|
|
|
|
backtrace = ["lib/my_code.rb", backtrace_gem_line("rails")]
|
|
|
|
|
|
|
|
with_plugin do
|
|
|
|
assert_equal backtrace.take(1), Minitest.backtrace_filter.filter(backtrace)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
test "replacement backtrace filter never returns an empty backtrace" do
|
|
|
|
backtrace = [backtrace_gem_line("rails")]
|
|
|
|
|
|
|
|
with_plugin do
|
|
|
|
assert_equal backtrace, Minitest.backtrace_filter.filter(backtrace)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
test "replacement backtrace filter silences Minitest lines when all lines are gem lines" do
|
|
|
|
backtrace = [backtrace_gem_line("rails"), backtrace_gem_line("minitest")]
|
|
|
|
|
|
|
|
with_plugin do
|
|
|
|
assert_equal backtrace.take(1), Minitest.backtrace_filter.filter(backtrace)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
test "does not replace backtrace filter when using --backtrace option" do
|
|
|
|
backtrace_filter = baseline_backtrace_filter
|
|
|
|
|
|
|
|
with_plugin("--backtrace", initial_backtrace_filter: backtrace_filter) do
|
|
|
|
assert_same backtrace_filter, Minitest.backtrace_filter
|
|
|
|
end
|
|
|
|
|
|
|
|
with_plugin("-b", initial_backtrace_filter: backtrace_filter) do
|
|
|
|
assert_same backtrace_filter, Minitest.backtrace_filter
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
test "does not replace backtrace filter when BACKTRACE environment variable is set" do
|
|
|
|
backtrace_filter = baseline_backtrace_filter
|
2018-02-18 15:35:30 -05:00
|
|
|
|
2020-10-07 16:03:11 -04:00
|
|
|
switch_env "BACKTRACE", "true" do
|
|
|
|
with_plugin(initial_backtrace_filter: backtrace_filter) do
|
|
|
|
assert_same backtrace_filter, Minitest.backtrace_filter
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2018-02-18 15:35:30 -05:00
|
|
|
|
2020-10-07 16:03:11 -04:00
|
|
|
test "replaces Minitest::SummaryReporter reporter" do
|
|
|
|
with_plugin do
|
|
|
|
assert_empty Minitest.reporter.reporters.select { |reporter| reporter.instance_of? Minitest::SummaryReporter }
|
|
|
|
assert_not_empty Minitest.reporter.reporters.grep(Minitest::SuppressedSummaryReporter)
|
2018-02-18 15:35:30 -05:00
|
|
|
end
|
2018-02-05 06:04:25 -05:00
|
|
|
end
|
|
|
|
|
2020-10-07 16:03:11 -04:00
|
|
|
test "replaces Minitest::ProgressReporter reporter" do
|
|
|
|
with_plugin do
|
|
|
|
assert_empty Minitest.reporter.reporters.grep(Minitest::ProgressReporter)
|
|
|
|
assert_not_empty Minitest.reporter.reporters.grep(::Rails::TestUnitReporter)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
test "keeps non-default reporters" do
|
|
|
|
custom_reporter = Minitest::Reporter.new(@output)
|
2018-02-05 06:04:25 -05:00
|
|
|
|
2020-10-07 16:03:11 -04:00
|
|
|
with_plugin(initial_reporters: [custom_reporter]) do
|
|
|
|
assert_includes Minitest.reporter.reporters, custom_reporter
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
test "does not add reporters when not replacing reporters" do
|
|
|
|
with_plugin(initial_reporters: []) do
|
|
|
|
assert_empty Minitest.reporter.reporters
|
2018-02-18 15:35:30 -05:00
|
|
|
end
|
2018-02-05 06:04:25 -05:00
|
|
|
end
|
|
|
|
|
2018-02-18 15:35:30 -05:00
|
|
|
private
|
2020-10-07 16:03:11 -04:00
|
|
|
def baseline_backtrace_filter
|
|
|
|
Minitest::BacktraceFilter.new
|
|
|
|
end
|
|
|
|
|
|
|
|
def baseline_reporters
|
|
|
|
[Minitest::SummaryReporter.new(@output), Minitest::ProgressReporter.new(@output)]
|
|
|
|
end
|
2018-02-05 06:04:25 -05:00
|
|
|
|
2020-10-07 16:03:11 -04:00
|
|
|
def with_plugin(*args, initial_backtrace_filter: baseline_backtrace_filter, initial_reporters: baseline_reporters)
|
|
|
|
original_backtrace_filter, Minitest.backtrace_filter = Minitest.backtrace_filter, initial_backtrace_filter
|
|
|
|
original_reporter, Minitest.reporter = Minitest.reporter, Minitest::CompositeReporter.new(*initial_reporters)
|
|
|
|
|
|
|
|
options = Minitest.process_args(args)
|
|
|
|
Minitest.plugin_rails_init(options)
|
|
|
|
|
|
|
|
yield
|
2018-02-18 15:35:30 -05:00
|
|
|
ensure
|
2020-10-07 16:03:11 -04:00
|
|
|
Minitest.backtrace_filter = original_backtrace_filter
|
|
|
|
Minitest.reporter = original_reporter
|
|
|
|
end
|
|
|
|
|
|
|
|
def backtrace_gem_line(gem_name)
|
|
|
|
caller.grep(%r"/lib/minitest\.rb:").first.gsub("minitest", gem_name)
|
2018-02-18 15:35:30 -05:00
|
|
|
end
|
2018-02-05 06:04:25 -05:00
|
|
|
end
|