diff options
author | Peter McCracken <peter.mccracken@shopify.com> | 2017-05-10 13:30:41 -0400 |
---|---|---|
committer | Peter McCracken <peter.mccracken@shopify.com> | 2017-05-10 13:33:46 -0400 |
commit | 4fc2ea11811c50fb1f7c5baba6d4c20532a5a00c (patch) | |
tree | c7d112a64892e101cc57ed1ec73f11b444ab611f /activesupport/test | |
parent | 8b69e32412cc2867b5fdd9a33cf4e4e759057e95 (diff) | |
download | rails-4fc2ea11811c50fb1f7c5baba6d4c20532a5a00c.tar.gz rails-4fc2ea11811c50fb1f7c5baba6d4c20532a5a00c.tar.bz2 rails-4fc2ea11811c50fb1f7c5baba6d4c20532a5a00c.zip |
handle loops in the cause chain in Rescuable#rescue_with_handler
Diffstat (limited to 'activesupport/test')
-rw-r--r-- | activesupport/test/rescuable_test.rb | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/activesupport/test/rescuable_test.rb b/activesupport/test/rescuable_test.rb index f7eb047d44..3bdd1651e7 100644 --- a/activesupport/test/rescuable_test.rb +++ b/activesupport/test/rescuable_test.rb @@ -43,7 +43,9 @@ class Stargate def dispatch(method) send(method) rescue Exception => e - rescue_with_handler(e) + unless rescue_with_handler(e) + @result = "unhandled" + end end def attack @@ -58,6 +60,26 @@ class Stargate raise MadRonon.new("dex") end + def crash + raise "unhandled RuntimeError" + end + + def looped_crash + ex1 = StandardError.new("error 1") + ex2 = StandardError.new("error 2") + begin + begin + raise ex1 + rescue + # sets the cause on ex2 to be ex1 + raise ex2 + end + rescue + # sets the cause on ex1 to be ex2 + raise ex1 + end + end + def fall_back_to_cause # This exception is the cause and has a handler. ronanize @@ -139,4 +161,14 @@ class RescuableTest < ActiveSupport::TestCase @stargate.dispatch :fall_back_to_cause assert_equal "dex", @stargate.result end + + def test_unhandled_exceptions + @stargate.dispatch(:crash) + assert_equal "unhandled", @stargate.result + end + + def test_rescue_handles_loops_in_exception_cause_chain + @stargate.dispatch :looped_crash + assert_equal "unhandled", @stargate.result + end end |