errors/backtrace_locations/fields.rb

tests/_examples/errors/backtrace_locations/fields.rb in the metorex repository.

def inner
  raise "boom"
end

def outer
  inner
end

begin
  outer
rescue RuntimeError => error
  locations = error.backtrace_locations
  puts locations.size == error.backtrace.size
  puts locations[0].label
  puts locations[0].lineno
  puts locations[0].path.end_with? ".rb"
  puts locations[0].absolute_path.start_with? "/"
  puts locations[0].to_s == error.backtrace[0]
  puts locations.last.label
  puts locations[0].base_label
end

copy = RuntimeError.new "copied"
p copy.backtrace_locations

source = begin
  outer
rescue RuntimeError => error
  error.backtrace_locations
end

copy.set_backtrace source
puts copy.backtrace_locations.size == source.size
puts copy.backtrace_locations[0].label
puts copy.backtrace[0] == source[0].to_s

Output:

true
Object#inner
2
true
true
true
<main>
inner
nil
true
Object#inner
true