From 558b9191c0c76d9807f339dae289a62ad7ed4ae8 Mon Sep 17 00:00:00 2001 From: nobu Date: Sat, 15 Nov 2014 07:28:08 +0000 Subject: vm_eval.c: UncaughtThrowError * vm_eval.c (rb_throw_obj): throw UncaughtThrowError instead of ArgumentError. [Feature #10480] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48433 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/lib/test/unit/assertions.rb | 4 ++-- test/ruby/test_exception.rb | 11 ++++++++--- test/ruby/test_fiber.rb | 2 +- 3 files changed, 11 insertions(+), 6 deletions(-) (limited to 'test') diff --git a/test/lib/test/unit/assertions.rb b/test/lib/test/unit/assertions.rb index 4ba13a81e0..727c54c9d5 100644 --- a/test/lib/test/unit/assertions.rb +++ b/test/lib/test/unit/assertions.rb @@ -223,8 +223,8 @@ module Test ret = catch(tag) do begin yield(tag) - rescue ArgumentError => e - raise unless thrown = e.message[/\Auncaught throw (.+)\z/m, 1] + rescue UncaughtThrowError => e + thrown = e.tag end msg = message(msg) { "Expected #{mu_pp(tag)} to have been thrown"\ diff --git a/test/ruby/test_exception.rb b/test/ruby/test_exception.rb index 4659def1ea..99cacc21f9 100644 --- a/test/ruby/test_exception.rb +++ b/test/ruby/test_exception.rb @@ -147,7 +147,7 @@ class TestException < Test::Unit::TestCase end def test_catch_throw_noarg - assert_nothing_raised(ArgumentError) { + assert_nothing_raised(UncaughtThrowError) { result = catch {|obj| throw obj, :ok assert(false, "should not reach here") @@ -157,13 +157,18 @@ class TestException < Test::Unit::TestCase end def test_uncaught_throw - assert_raise_with_message(ArgumentError, /uncaught throw/) { + tag = nil + e = assert_raise_with_message(UncaughtThrowError, /uncaught throw/) { catch("foo") {|obj| - throw obj.dup, :ok + tag = obj.dup + throw tag, :ok assert(false, "should not reach here") } assert(false, "should not reach here") } + assert_not_nil(tag) + assert_same(tag, e.tag) + assert_equal(:ok, e.value) end def test_catch_throw_in_require diff --git a/test/ruby/test_fiber.rb b/test/ruby/test_fiber.rb index 4acfb139e0..7b5ce8190f 100644 --- a/test/ruby/test_fiber.rb +++ b/test/ruby/test_fiber.rb @@ -117,7 +117,7 @@ class TestFiber < Test::Unit::TestCase end def test_throw - assert_raise(ArgumentError){ + assert_raise(UncaughtThrowError){ Fiber.new do throw :a end.resume -- cgit v1.2.3