aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_view/test_case.rb
diff options
context:
space:
mode:
authorDavid Chelimsky <dchelimsky@gmail.com>2010-05-04 09:00:46 -0500
committerJosé Valim <jose.valim@gmail.com>2010-05-24 22:58:46 +0200
commit8e583b69e8b3017e85440c97b325ca7ae0c32dfb (patch)
tree43d435fb66805c69cb7988a8cdb3f27dfbf48134 /actionpack/lib/action_view/test_case.rb
parent05c95b5c5815c0b3ae55fda7a897922b7f3ec2c7 (diff)
downloadrails-8e583b69e8b3017e85440c97b325ca7ae0c32dfb.tar.gz
rails-8e583b69e8b3017e85440c97b325ca7ae0c32dfb.tar.bz2
rails-8e583b69e8b3017e85440c97b325ca7ae0c32dfb.zip
Move AV::TC to AV::TC::Behavior [#4678 state:resolved]
- enables alternative testing frameworks to include AV::TC::Behavior instead of subclassing AV::TC - also added tests and code for: - test view delegates :notice to request.flash - useful since generators generate views that use notice - test case doesn't try to include modules that are actually classes Signed-off-by: José Valim <jose.valim@gmail.com>
Diffstat (limited to 'actionpack/lib/action_view/test_case.rb')
-rw-r--r--actionpack/lib/action_view/test_case.rb150
1 files changed, 85 insertions, 65 deletions
diff --git a/actionpack/lib/action_view/test_case.rb b/actionpack/lib/action_view/test_case.rb
index 5517a56fb9..2c66e5ae09 100644
--- a/actionpack/lib/action_view/test_case.rb
+++ b/actionpack/lib/action_view/test_case.rb
@@ -24,80 +24,94 @@ module ActionView
end
end
- include ActionDispatch::Assertions, ActionDispatch::TestProcess
- include ActionController::TemplateAssertions
- include ActionView::Context
+ module Behavior
+ extend ActiveSupport::Concern
- include ActionController::PolymorphicRoutes
- include ActionController::RecordIdentifier
+ include ActionDispatch::Assertions, ActionDispatch::TestProcess
+ include ActionController::TemplateAssertions
+ include ActionView::Context
- include AbstractController::Helpers
- include ActionView::Helpers
+ include ActionController::PolymorphicRoutes
+ include ActionController::RecordIdentifier
- class_inheritable_accessor :helper_class
- attr_accessor :controller, :output_buffer, :rendered
+ include AbstractController::Helpers
+ include ActionView::Helpers
- setup :setup_with_controller
- def setup_with_controller
- @controller = TestController.new
- @output_buffer = ActiveSupport::SafeBuffer.new
- @rendered = ''
+ attr_accessor :controller, :output_buffer, :rendered
+
+ module ClassMethods
+ def tests(helper_class)
+ self.helper_class = helper_class
+ end
- self.class.send(:include_helper_modules!)
- make_test_case_available_to_view!
- end
+ def determine_default_helper_class(name)
+ mod = name.sub(/Test$/, '').constantize
+ mod.is_a?(Class) ? nil : mod
+ rescue NameError
+ nil
+ end
- def config
- @controller.config if @controller.respond_to?(:config)
- end
+ def helper_method(*methods)
+ # Almost a duplicate from ActionController::Helpers
+ methods.flatten.each do |method|
+ _helpers.module_eval <<-end_eval
+ def #{method}(*args, &block) # def current_user(*args, &block)
+ _test_case.send(%(#{method}), *args, &block) # test_case.send(%(current_user), *args, &block)
+ end # end
+ end_eval
+ end
+ end
- def render(options = {}, local_assigns = {}, &block)
- @rendered << output = _view.render(options, local_assigns, &block)
- output
- end
+ attr_writer :helper_class
- def protect_against_forgery?
- false
- end
+ def helper_class
+ @helper_class ||= determine_default_helper_class(name)
+ end
- class << self
- def tests(helper_class)
- self.helper_class = helper_class
- end
+ private
- def helper_class
- if current_helper_class = read_inheritable_attribute(:helper_class)
- current_helper_class
- else
- self.helper_class = determine_default_helper_class(name)
+ def include_helper_modules!
+ helper(helper_class) if helper_class
+ include _helpers
end
+
end
- def determine_default_helper_class(name)
- name.sub(/Test$/, '').constantize
- rescue NameError
- nil
+ def setup_with_controller
+ @controller = ActionView::TestCase::TestController.new
+ @output_buffer = ActiveSupport::SafeBuffer.new
+ @rendered = ''
+
+ self.class.send(:include_helper_modules!)
+ make_test_case_available_to_view!
end
- def helper_method(*methods)
- # Almost a duplicate from ActionController::Helpers
- methods.flatten.each do |method|
- _helpers.module_eval <<-end_eval, __FILE__, __LINE__ + 1
- def #{method}(*args, &block) # def current_user(*args, &block)
- _test_case.send(%(#{method}), *args, &block) # test_case.send(%(current_user), *args, &block)
- end # end
- end_eval
- end
+ def config
+ @controller.config if @controller.respond_to?(:config)
end
- private
- def include_helper_modules!
- helper(helper_class) if helper_class
- include _helpers
- end
- end
+ def protect_against_forgery?
+ false
+ end
+
+ def render(options = {}, local_assigns = {}, &block)
+ @rendered << output = _view.render(options, local_assigns, &block)
+ output
+ end
+
+ included do
+ setup :setup_with_controller
+ end
private
+
+ # Support the selector assertions
+ #
+ # Need to experiment if this priority is the best one: rendered => output_buffer
+ def response_from_page_or_rjs
+ HTML::Document.new(@rendered.blank? ? @output_buffer : @rendered).root
+ end
+
def make_test_case_available_to_view!
test_case_instance = self
_helpers.module_eval do
@@ -110,29 +124,30 @@ module ActionView
view = ActionView::Base.new(ActionController::Base.view_paths, _assigns, @controller)
view.singleton_class.send :include, _helpers
view.singleton_class.send :include, @controller._router.url_helpers
+ view.singleton_class.send :delegate, :alert, :notice, :to => "request.flash"
view.output_buffer = self.output_buffer
view
end
- # Support the selector assertions
- #
- # Need to experiment if this priority is the best one: rendered => output_buffer
- def response_from_page_or_rjs
- HTML::Document.new(rendered.blank? ? output_buffer : rendered).root
- end
-
EXCLUDE_IVARS = %w{
+ @_result
@output_buffer
- @fixture_cache
+ @rendered
+ @templates
+ @view_context_class
+ @layouts
+ @partials
+ @controller
+
@method_name
- @_result
+ @fixture_cache
@loaded_fixtures
@test_passed
- @view
}
def _instance_variables
instance_variables - EXCLUDE_IVARS
+ instance_variables
end
def _assigns
@@ -155,5 +170,10 @@ module ActionView
super
end
end
+
+ end
+
+ include Behavior
+
end
end