1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* vm_insnhelper.c (argument_error): insert dummy frame to make

a backtrace object intead of modify backtrace string array.
  [Bug #9295]
* test/ruby/test_backtrace.rb: add a test for this patch.
  fix test to compare a result of Exception#backtrace with
  a result of Exception#backtrace_locations.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44411 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
ko1 2013-12-25 09:35:03 +00:00
parent 053b5d0f9c
commit 485e6ebed8
3 changed files with 51 additions and 17 deletions

View file

@ -19,17 +19,16 @@ class TestBacktrace < Test::Unit::TestCase
end
def test_exception_backtrace_locations
bt = Fiber.new{
backtrace, backtrace_locations = Fiber.new{
begin
raise
rescue => e
e.backtrace_locations
[e.backtrace, e.backtrace_locations]
end
}.resume
assert_equal(1, bt.size)
assert_match(/.+:\d+:.+/, bt[0].to_s)
assert_equal(backtrace, backtrace_locations.map{|e| e.to_s})
bt = Fiber.new{
backtrace, backtrace_locations = Fiber.new{
begin
begin
helper_test_exception_backtrace_locations
@ -37,11 +36,34 @@ class TestBacktrace < Test::Unit::TestCase
raise
end
rescue => e
e.backtrace_locations
[e.backtrace, e.backtrace_locations]
end
}.resume
assert_equal(2, bt.size)
assert_match(/helper_test_exception_backtrace_locations/, bt[0].to_s)
assert_equal(backtrace, backtrace_locations.map{|e| e.to_s})
end
def call_helper_test_exception_backtrace_locations
helper_test_exception_backtrace_locations(:bad_argument)
end
def test_argument_error_backtrace_locations
backtrace, backtrace_locations = Fiber.new{
begin
helper_test_exception_backtrace_locations(1)
rescue ArgumentError => e
[e.backtrace, e.backtrace_locations]
end
}.resume
assert_equal(backtrace, backtrace_locations.map{|e| e.to_s})
backtrace, backtrace_locations = Fiber.new{
begin
call_helper_test_exception_backtrace_locations
rescue ArgumentError => e
[e.backtrace, e.backtrace_locations]
end
}.resume
assert_equal(backtrace, backtrace_locations.map{|e| e.to_s})
end
def test_caller_lev