module Test::Unit::Util::BacktraceFilter

Constants

POWERASSERT_PREFIX
TESTUNIT_FILE_SEPARATORS
TESTUNIT_PREFIX
TESTUNIT_RB_FILE

Public Instance Methods

filter_backtrace(backtrace, prefix=nil) click to toggle source
# File lib/test/unit/util/backtracefilter.rb, line 20
def filter_backtrace(backtrace, prefix=nil)
  return ["No backtrace"] unless backtrace
  return backtrace if ENV["TEST_UNIT_ALL_BACKTRACE"]

  if prefix
    split_prefixes = [prefix.split(TESTUNIT_FILE_SEPARATORS)]
  else
    split_prefixes = [TESTUNIT_PREFIX, POWERASSERT_PREFIX].compact
  end
  test_unit_internal_p = lambda do |entry|
    components = entry.split(TESTUNIT_FILE_SEPARATORS)
    split_prefixes.any? do |split_prefix|
      split_entry = components[0, split_prefix.size]
      next false unless split_entry[0..-2] == split_prefix[0..-2]
      split_entry[-1].sub(TESTUNIT_RB_FILE, '') == split_prefix[-1]
    end
  end

  in_user_code = false
  new_backtrace = backtrace.reverse.reject do |entry|
    if test_unit_internal_p.call(entry)
      in_user_code = true
      true
    else
      not in_user_code
    end
  end.reverse

  if new_backtrace.empty?
    new_backtrace = backtrace.reject do |entry|
      test_unit_internal_p.call(entry)
    end
    new_backtrace = backtrace if new_backtrace.empty?
  end
  new_backtrace
end