Rails 2.3.5

Upgrade to Rails 2.3.5.
Also work around this bug:
 https://rails.lighthouseapp.com/projects/8994/tickets/3524
created by the aforementioned
Rails release.
This commit is contained in:
Jacques Distler 2009-11-30 19:38:34 -06:00
parent a6429f8c22
commit e3832c6f79
187 changed files with 2316 additions and 891 deletions

View file

@ -22,11 +22,52 @@ module ActionView
end
class TestCase < ActiveSupport::TestCase
class TestController < ActionController::Base
attr_accessor :request, :response, :params
def self.controller_path
''
end
def initialize
@request = ActionController::TestRequest.new
@response = ActionController::TestResponse.new
@params = {}
send(:initialize_current_url)
end
end
include ActionController::TestCase::Assertions
include ActionController::TestProcess
include ActionController::PolymorphicRoutes
include ActionController::RecordIdentifier
include ActionView::Helpers
include ActionController::Helpers
class_inheritable_accessor :helper_class
@@helper_class = nil
attr_accessor :controller, :output_buffer, :rendered
setup :setup_with_controller
def setup_with_controller
@controller = TestController.new
@output_buffer = ''
@rendered = ''
self.class.send(:include_helper_modules!)
make_test_case_available_to_view!
end
def render(options = {}, local_assigns = {}, &block)
@rendered << output = _view.render(options, local_assigns, &block)
output
end
def protect_against_forgery?
false
end
class << self
def tests(helper_class)
@ -46,42 +87,76 @@ module ActionView
rescue NameError
nil
end
end
include ActionView::Helpers
include ActionController::PolymorphicRoutes
include ActionController::RecordIdentifier
setup :setup_with_helper_class
def setup_with_helper_class
if helper_class && !self.class.ancestors.include?(helper_class)
self.class.send(:include, helper_class)
def helper_method(*methods)
# Almost a duplicate from ActionController::Helpers
methods.flatten.each do |method|
master_helper_module.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
self.output_buffer = ''
private
def include_helper_modules!
helper(helper_class) if helper_class
include master_helper_module
end
end
class TestController < ActionController::Base
attr_accessor :request, :response, :params
def initialize
@request = ActionController::TestRequest.new
@response = ActionController::TestResponse.new
@params = {}
send(:initialize_current_url)
end
end
protected
attr_accessor :output_buffer
private
def make_test_case_available_to_view!
test_case_instance = self
master_helper_module.module_eval do
define_method(:_test_case) { test_case_instance }
private :_test_case
end
end
def _view
view = ActionView::Base.new(ActionController::Base.view_paths, _assigns, @controller)
view.helpers.include master_helper_module
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{
@output_buffer
@fixture_cache
@method_name
@_result
@loaded_fixtures
@test_passed
@view
}
def _instance_variables
instance_variables - EXCLUDE_IVARS
end
def _assigns
_instance_variables.inject({}) do |hash, var|
name = var[1..-1].to_sym
hash[name] = instance_variable_get(var)
hash
end
end
def method_missing(selector, *args)
controller = TestController.new
return controller.__send__(selector, *args) if ActionController::Routing::Routes.named_routes.helpers.include?(selector)
super
if ActionController::Routing::Routes.named_routes.helpers.include?(selector)
@controller.__send__(selector, *args)
else
super
end
end
end
end
end