From 2cc0cac3efce92bf9d0e8636f2889c37ca9f57ab Mon Sep 17 00:00:00 2001 From: Michael Koziarski Date: Fri, 26 Oct 2007 02:21:21 +0000 Subject: Introduce TestCase subclasses for testing rails applications allowing tests to be DRY'd up a bit and to provide a path toward tidying up our monkeypatching of test/unit. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@8022 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/lib/action_controller/test_case.rb | 53 +++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 actionpack/lib/action_controller/test_case.rb (limited to 'actionpack/lib/action_controller/test_case.rb') diff --git a/actionpack/lib/action_controller/test_case.rb b/actionpack/lib/action_controller/test_case.rb new file mode 100644 index 0000000000..35aad0d8bf --- /dev/null +++ b/actionpack/lib/action_controller/test_case.rb @@ -0,0 +1,53 @@ +require 'active_support/test_case' + +module ActionController + class NonInferrableControllerError < ActionControllerError + def initialize(name) + super "Unable to determine the controller to test from #{name}. " + + "You'll need to specify it using tests YourController in your " + + "test case definition" + end + end + + class TestCase < ActiveSupport::TestCase + @@controller_class = nil + class << self + def tests(controller_class) + self.controller_class = controller_class + end + + def controller_class=(new_class) + prepare_controller_class(new_class) + write_inheritable_attribute(:controller_class, new_class) + end + + def controller_class + if current_controller_class = read_inheritable_attribute(:controller_class) + current_controller_class + else + self.controller_class= determine_default_controller_class(name) + end + end + + def determine_default_controller_class(name) + name.sub(/Test$/, '').constantize + rescue NameError + raise NonInferrableControllerError.new(name) + end + + def prepare_controller_class(new_class) + new_class.class_eval do + def rescue_action(e) + raise e + end + end + end + end + + def setup + @controller = self.class.controller_class.new + @request = TestRequest.new + @response = TestResponse.new + end + end +end \ No newline at end of file -- cgit v1.2.3