class DohTest::BacktraceParser

Public Class Methods

new(backtrace) click to toggle source
# File lib/dohtest/backtrace_parser.rb, line 4
def initialize(backtrace)
  @backtrace = backtrace
end

Public Instance Methods

relevant_stack() click to toggle source
# File lib/dohtest/backtrace_parser.rb, line 8
def relevant_stack
  @relevant_stack ||= find_relevant_stack
end
summary() click to toggle source
# File lib/dohtest/backtrace_parser.rb, line 12
def summary
  @summary ||= build_summary
end

Private Instance Methods

build_summary() click to toggle source
# File lib/dohtest/backtrace_parser.rb, line 37
def build_summary
  retval = ''
  prev_filename = ''
  prev_simplified = ''
  relevant_stack.each do |path, line_number|
    filename = File.basename(path)
    simplified = "#{filename}:#{line_number}"
    if simplified == prev_simplified
      # ignore it
    elsif filename == prev_filename
      retval += ",#{line_number}"
    elsif retval.empty?
      retval = simplified
    else
      retval += ";#{simplified}"
    end
    prev_filename = filename
    prev_simplified = simplified
  end
  retval
end
find_relevant_stack() click to toggle source
# File lib/dohtest/backtrace_parser.rb, line 17
def find_relevant_stack
  retval = []
  found_start = false
  @backtrace.each do |location|
    has_doh_test = location.index('dohtest')
    if found_start && has_doh_test
      break
    elsif has_doh_test
      # just ignore it and continue
    else
      found_start = true
      info = location.rpartition(':in').first
      parts = info.partition(':')
      raise "unexpected backtrace element: #{location}" if parts.first.nil? || parts.last.nil?
      retval << [parts.first, parts.last]
    end
  end
  retval
end