aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/test/controller/rescue_test.rb
diff options
context:
space:
mode:
Diffstat (limited to 'actionpack/test/controller/rescue_test.rb')
-rw-r--r--actionpack/test/controller/rescue_test.rb159
1 files changed, 159 insertions, 0 deletions
diff --git a/actionpack/test/controller/rescue_test.rb b/actionpack/test/controller/rescue_test.rb
index cf4dcac029..a63fd06005 100644
--- a/actionpack/test/controller/rescue_test.rb
+++ b/actionpack/test/controller/rescue_test.rb
@@ -5,35 +5,62 @@ uses_mocha 'rescue' do
class RescueController < ActionController::Base
class NotAuthorized < StandardError
end
+ class NotAuthorizedToRescueAsString < StandardError
+ end
class RecordInvalid < StandardError
end
+ class RecordInvalidToRescueAsString < StandardError
+ end
class NotAllowed < StandardError
end
+ class NotAllowedToRescueAsString < StandardError
+ end
class InvalidRequest < StandardError
end
+ class InvalidRequestToRescueAsString < StandardError
+ end
class BadGateway < StandardError
end
+ class BadGatewayToRescueAsString < StandardError
+ end
class ResourceUnavailable < StandardError
end
+ class ResourceUnavailableToRescueAsString < StandardError
+ end
+
+ # We use a fully-qualified name in some strings, and a relative constant
+ # name in some other to test correct handling of both cases.
rescue_from NotAuthorized, :with => :deny_access
+ rescue_from 'RescueController::NotAuthorizedToRescueAsString', :with => :deny_access
+
rescue_from RecordInvalid, :with => :show_errors
+ rescue_from 'RescueController::RecordInvalidToRescueAsString', :with => :show_errors
rescue_from NotAllowed, :with => proc { head :forbidden }
+ rescue_from 'RescueController::NotAllowedToRescueAsString', :with => proc { head :forbidden }
+
rescue_from InvalidRequest, :with => proc { |exception| render :text => exception.message }
+ rescue_from 'InvalidRequestToRescueAsString', :with => proc { |exception| render :text => exception.message }
rescue_from BadGateway do
head :status => 502
end
+ rescue_from 'BadGatewayToRescueAsString' do
+ head :status => 502
+ end
rescue_from ResourceUnavailable do |exception|
render :text => exception.message
end
+ rescue_from 'ResourceUnavailableToRescueAsString' do |exception|
+ render :text => exception.message
+ end
def raises
render :text => 'already rendered'
@@ -51,26 +78,44 @@ class RescueController < ActionController::Base
def not_authorized
raise NotAuthorized
end
+ def not_authorized_raise_as_string
+ raise NotAuthorizedToRescueAsString
+ end
def not_allowed
raise NotAllowed
end
+ def not_allowed_raise_as_string
+ raise NotAllowedToRescueAsString
+ end
def invalid_request
raise InvalidRequest
end
+ def invalid_request_raise_as_string
+ raise InvalidRequestToRescueAsString
+ end
def record_invalid
raise RecordInvalid
end
+ def record_invalid_raise_as_string
+ raise RecordInvalidToRescueAsString
+ end
def bad_gateway
raise BadGateway
end
+ def bad_gateway_raise_as_string
+ raise BadGatewayToRescueAsString
+ end
def resource_unavailable
raise ResourceUnavailable
end
+ def resource_unavailable_raise_as_string
+ raise ResourceUnavailableToRescueAsString
+ end
def missing_template
end
@@ -278,32 +323,58 @@ class RescueTest < Test::Unit::TestCase
get :not_authorized
assert_response :forbidden
end
+ def test_rescue_handler_string
+ get :not_authorized_raise_as_string
+ assert_response :forbidden
+ end
def test_rescue_handler_with_argument
@controller.expects(:show_errors).once.with { |e| e.is_a?(Exception) }
get :record_invalid
end
+ def test_rescue_handler_with_argument_as_string
+ @controller.expects(:show_errors).once.with { |e| e.is_a?(Exception) }
+ get :record_invalid_raise_as_string
+ end
def test_proc_rescue_handler
get :not_allowed
assert_response :forbidden
end
+ def test_proc_rescue_handler_as_string
+ get :not_allowed_raise_as_string
+ assert_response :forbidden
+ end
def test_proc_rescue_handle_with_argument
get :invalid_request
assert_equal "RescueController::InvalidRequest", @response.body
end
+ def test_proc_rescue_handle_with_argument_as_string
+ get :invalid_request_raise_as_string
+ assert_equal "RescueController::InvalidRequestToRescueAsString", @response.body
+ end
def test_block_rescue_handler
get :bad_gateway
assert_response 502
end
+ def test_block_rescue_handler_as_string
+ get :bad_gateway_raise_as_string
+ assert_response 502
+ end
def test_block_rescue_handler_with_argument
get :resource_unavailable
assert_equal "RescueController::ResourceUnavailable", @response.body
end
+ def test_block_rescue_handler_with_argument_as_string
+ get :resource_unavailable_raise_as_string
+ assert_equal "RescueController::ResourceUnavailableToRescueAsString", @response.body
+ end
+
+
protected
def with_all_requests_local(local = true)
old_local, ActionController::Base.consider_all_requests_local =
@@ -339,4 +410,92 @@ class RescueTest < Test::Unit::TestCase
end
end
+class ExceptionInheritanceRescueController < ActionController::Base
+
+ class ParentException < StandardError
+ end
+
+ class ChildException < ParentException
+ end
+
+ class GrandchildException < ChildException
+ end
+
+ rescue_from ChildException, :with => lambda { head :ok }
+ rescue_from ParentException, :with => lambda { head :created }
+ rescue_from GrandchildException, :with => lambda { head :no_content }
+
+ def raise_parent_exception
+ raise ParentException
+ end
+
+ def raise_child_exception
+ raise ChildException
+ end
+
+ def raise_grandchild_exception
+ raise GrandchildException
+ end
+end
+
+class ExceptionInheritanceRescueTest < Test::Unit::TestCase
+
+ def setup
+ @controller = ExceptionInheritanceRescueController.new
+ @request = ActionController::TestRequest.new
+ @response = ActionController::TestResponse.new
+ end
+
+ def test_bottom_first
+ get :raise_grandchild_exception
+ assert_response :no_content
+ end
+
+ def test_inheritance_works
+ get :raise_child_exception
+ assert_response :created
+ end
+end
+
+class ControllerInheritanceRescueController < ExceptionInheritanceRescueController
+ class FirstExceptionInChildController < StandardError
+ end
+
+ class SecondExceptionInChildController < StandardError
+ end
+
+ rescue_from FirstExceptionInChildController, 'SecondExceptionInChildController', :with => lambda { head :gone }
+
+ def raise_first_exception_in_child_controller
+ raise FirstExceptionInChildController
+ end
+
+ def raise_second_exception_in_child_controller
+ raise SecondExceptionInChildController
+ end
+end
+
+class ControllerInheritanceRescueControllerTest < Test::Unit::TestCase
+
+ def setup
+ @controller = ControllerInheritanceRescueController.new
+ @request = ActionController::TestRequest.new
+ @response = ActionController::TestResponse.new
+ end
+
+ def test_first_exception_in_child_controller
+ get :raise_first_exception_in_child_controller
+ assert_response :gone
+ end
+
+ def test_second_exception_in_child_controller
+ get :raise_second_exception_in_child_controller
+ assert_response :gone
+ end
+
+ def test_exception_in_parent_controller
+ get :raise_parent_exception
+ assert_response :created
+ end
+end
end # uses_mocha