From 72ce1a4759b853b02eab31786acbb69ba80b4fd8 Mon Sep 17 00:00:00 2001 From: nobu Date: Fri, 7 Nov 2014 12:08:24 +0000 Subject: test_exception.rb: more tests * test/ruby/test_exception.rb: more tests for catch and throw. catch but no throw, autogenerated tag, and uncaught throw. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48314 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/ruby/test_exception.rb | 48 +++++++++++++++++++++++++++++++++------------ 1 file changed, 36 insertions(+), 12 deletions(-) (limited to 'test/ruby/test_exception.rb') diff --git a/test/ruby/test_exception.rb b/test/ruby/test_exception.rb index 919220ebbf..be8d20d34a 100644 --- a/test/ruby/test_exception.rb +++ b/test/ruby/test_exception.rb @@ -129,18 +129,42 @@ class TestException < Test::Unit::TestCase assert(!bad) end + def test_catch_no_throw + assert_equal(:foo, catch {:foo}) + end + def test_catch_throw - assert(catch(:foo) { - loop do - loop do - throw :foo, true - break - end - break - assert(false) # should no reach here - end - false - }) + result = catch(:foo) { + loop do + loop do + throw :foo, true + break + end + assert(false, "should no reach here") + end + false + } + assert(result) + end + + def test_catch_throw_noarg + assert_nothing_raised(ArgumentError) { + result = catch {|obj| + throw obj, :ok + assert(false, "should no reach here") + } + assert_equal(:ok, result) + } + end + + def test_uncaught_throw + assert_raise_with_message(ArgumentError, /uncaught throw/) { + catch("foo") {|obj| + throw obj.dup, :ok + assert(false, "should no reach here") + } + assert(false, "should no reach here") + } end def test_catch_throw_in_require @@ -148,7 +172,7 @@ class TestException < Test::Unit::TestCase Tempfile.create(["dep", ".rb"]) {|t| t.puts("throw :extdep, 42") t.close - assert_equal(42, catch(:extdep) {require t.path}, bug7185) + assert_equal(42, assert_throw(:extdep, bug7185) {require t.path}, bug7185) } end -- cgit v1.2.3