mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Starting to get new_base to run on old tests
This commit is contained in:
parent
918b119bd3
commit
b1d34b3aa4
8 changed files with 313 additions and 3 deletions
|
@ -4,5 +4,6 @@ module ActionController
|
|||
autoload :Layouts, "action_controller/new_base/layouts"
|
||||
autoload :Rails2Compatibility, "action_controller/new_base/compatibility"
|
||||
autoload :Renderer, "action_controller/new_base/renderer"
|
||||
autoload :Testing, "action_controller/new_base/testing"
|
||||
autoload :UrlFor, "action_controller/new_base/url_for"
|
||||
end
|
|
@ -53,4 +53,7 @@ module ActionController
|
|||
@_response.to_a
|
||||
end
|
||||
end
|
||||
|
||||
class Base < Http
|
||||
end
|
||||
end
|
||||
|
|
23
actionpack/lib/action_controller/new_base/testing.rb
Normal file
23
actionpack/lib/action_controller/new_base/testing.rb
Normal file
|
@ -0,0 +1,23 @@
|
|||
module ActionController
|
||||
module Testing
|
||||
|
||||
# OMG MEGA HAX
|
||||
def process_with_test(request, response)
|
||||
@_request = request
|
||||
@_response = response
|
||||
ret = process(request.parameters[:action])
|
||||
@_response.body = self.response_body
|
||||
set_test_assigns
|
||||
ret
|
||||
end
|
||||
|
||||
def set_test_assigns
|
||||
@assigns = {}
|
||||
(instance_variable_names - self.class.protected_instance_variables).each do |var|
|
||||
name, value = var[1..-1], instance_variable_get(var)
|
||||
@assigns[name] = value
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
68
actionpack/lib/action_controller/testing/process2.rb
Normal file
68
actionpack/lib/action_controller/testing/process2.rb
Normal file
|
@ -0,0 +1,68 @@
|
|||
require "action_controller/testing/process"
|
||||
|
||||
module ActionController
|
||||
module TestProcess2
|
||||
|
||||
# Executes a request simulating GET HTTP method and set/volley the response
|
||||
def get(action, parameters = nil, session = nil, flash = nil)
|
||||
process(action, parameters, session, flash, "GET")
|
||||
end
|
||||
|
||||
# Executes a request simulating POST HTTP method and set/volley the response
|
||||
def post(action, parameters = nil, session = nil, flash = nil)
|
||||
process(action, parameters, session, flash, "POST")
|
||||
end
|
||||
|
||||
# Executes a request simulating PUT HTTP method and set/volley the response
|
||||
def put(action, parameters = nil, session = nil, flash = nil)
|
||||
process(action, parameters, session, flash, "PUT")
|
||||
end
|
||||
|
||||
# Executes a request simulating DELETE HTTP method and set/volley the response
|
||||
def delete(action, parameters = nil, session = nil, flash = nil)
|
||||
process(action, parameters, session, flash, "DELETE")
|
||||
end
|
||||
|
||||
# Executes a request simulating HEAD HTTP method and set/volley the response
|
||||
def head(action, parameters = nil, session = nil, flash = nil)
|
||||
process(action, parameters, session, flash, "HEAD")
|
||||
end
|
||||
|
||||
def process(action, parameters = nil, session = nil, flash = nil, http_method = 'GET')
|
||||
# Sanity check for required instance variables so we can give an
|
||||
# understandable error message.
|
||||
%w(@controller @request @response).each do |iv_name|
|
||||
if !(instance_variable_names.include?(iv_name) || instance_variable_names.include?(iv_name.to_sym)) || instance_variable_get(iv_name).nil?
|
||||
raise "#{iv_name} is nil: make sure you set it in your test's setup method."
|
||||
end
|
||||
end
|
||||
|
||||
@request.recycle!
|
||||
@response.recycle!
|
||||
|
||||
@html_document = nil
|
||||
@request.env['REQUEST_METHOD'] = http_method
|
||||
|
||||
parameters ||= {}
|
||||
@request.assign_parameters(@controller.class.controller_path, action.to_s, parameters)
|
||||
|
||||
@request.session = ActionController::TestSession.new(session) unless session.nil?
|
||||
@request.session["flash"] = ActionController::Flash::FlashHash.new.update(flash) if flash
|
||||
build_request_uri(action, parameters)
|
||||
|
||||
# Base.class_eval { include ProcessWithTest } unless Base < ProcessWithTest
|
||||
@controller.process_with_test(@request, @response)
|
||||
end
|
||||
|
||||
def build_request_uri(action, parameters)
|
||||
unless @request.env['REQUEST_URI']
|
||||
options = @controller.__send__(:rewrite_options, parameters)
|
||||
options.update(:only_path => true, :action => action)
|
||||
|
||||
url = ActionController::UrlRewriter.new(@request, parameters)
|
||||
@request.set_REQUEST_URI(url.rewrite(options))
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
|
@ -2,9 +2,13 @@ $:.unshift(File.dirname(__FILE__) + '/../../lib')
|
|||
$:.unshift(File.dirname(__FILE__) + '/../../../activesupport/lib')
|
||||
$:.unshift(File.dirname(__FILE__) + '/../lib')
|
||||
|
||||
require 'rubygems'
|
||||
require 'test/unit'
|
||||
require 'active_support'
|
||||
require 'active_support/core/all'
|
||||
require 'active_support/test_case'
|
||||
require 'action_controller/abstract'
|
||||
require 'action_controller/new_base/base'
|
||||
require 'action_controller/new_base/renderer'
|
||||
require 'action_controller'
|
||||
require 'action_view/base'
|
||||
require 'fixture_template'
|
||||
|
@ -17,7 +21,6 @@ rescue LoadError
|
|||
# Debugging disabled. `gem install ruby-debug` to enable.
|
||||
end
|
||||
|
||||
require 'action_controller/abstract'
|
||||
# require 'action_controller/abstract/base'
|
||||
# require 'action_controller/abstract/renderer'
|
||||
# require 'action_controller/abstract/layouts'
|
||||
|
|
210
actionpack/test/abstract_unit2.rb
Normal file
210
actionpack/test/abstract_unit2.rb
Normal file
|
@ -0,0 +1,210 @@
|
|||
$:.unshift(File.dirname(__FILE__) + '/../lib')
|
||||
$:.unshift(File.dirname(__FILE__) + '/../../activesupport/lib')
|
||||
$:.unshift(File.dirname(__FILE__) + '/lib')
|
||||
|
||||
# HAX
|
||||
module ActionController
|
||||
|
||||
end
|
||||
|
||||
# TestCase
|
||||
# include TestProcess2
|
||||
|
||||
|
||||
require 'test/unit'
|
||||
require 'active_support'
|
||||
require 'active_support/core/all'
|
||||
require 'active_support/test_case'
|
||||
require 'action_controller/abstract'
|
||||
require 'action_controller/new_base'
|
||||
require 'action_controller/new_base/base'
|
||||
require 'action_controller/new_base/renderer' # HAX
|
||||
require 'action_controller'
|
||||
require 'fixture_template'
|
||||
require 'action_view/test_case'
|
||||
|
||||
FIXTURE_LOAD_PATH = File.join(File.dirname(__FILE__), 'fixtures')
|
||||
|
||||
module ActionController
|
||||
autoload :TestProcess2, 'action_controller/testing/process2'
|
||||
|
||||
class ActionControllerError < StandardError #:nodoc:
|
||||
end
|
||||
|
||||
class SessionRestoreError < ActionControllerError #:nodoc:
|
||||
end
|
||||
|
||||
class RenderError < ActionControllerError #:nodoc:
|
||||
end
|
||||
|
||||
class RoutingError < ActionControllerError #:nodoc:
|
||||
attr_reader :failures
|
||||
def initialize(message, failures=[])
|
||||
super(message)
|
||||
@failures = failures
|
||||
end
|
||||
end
|
||||
|
||||
class MethodNotAllowed < ActionControllerError #:nodoc:
|
||||
attr_reader :allowed_methods
|
||||
|
||||
def initialize(*allowed_methods)
|
||||
super("Only #{allowed_methods.to_sentence(:locale => :en)} requests are allowed.")
|
||||
@allowed_methods = allowed_methods
|
||||
end
|
||||
|
||||
def allowed_methods_header
|
||||
allowed_methods.map { |method_symbol| method_symbol.to_s.upcase } * ', '
|
||||
end
|
||||
|
||||
def handle_response!(response)
|
||||
response.headers['Allow'] ||= allowed_methods_header
|
||||
end
|
||||
end
|
||||
|
||||
class NotImplemented < MethodNotAllowed #:nodoc:
|
||||
end
|
||||
|
||||
class UnknownController < ActionControllerError #:nodoc:
|
||||
end
|
||||
|
||||
class UnknownAction < ActionControllerError #:nodoc:
|
||||
end
|
||||
|
||||
class MissingFile < ActionControllerError #:nodoc:
|
||||
end
|
||||
|
||||
class RenderError < ActionControllerError #:nodoc:
|
||||
end
|
||||
|
||||
class SessionOverflowError < ActionControllerError #:nodoc:
|
||||
DEFAULT_MESSAGE = 'Your session data is larger than the data column in which it is to be stored. You must increase the size of your data column if you intend to store large data.'
|
||||
|
||||
def initialize(message = nil)
|
||||
super(message || DEFAULT_MESSAGE)
|
||||
end
|
||||
end
|
||||
|
||||
class UnknownHttpMethod < ActionControllerError #:nodoc:
|
||||
end
|
||||
|
||||
class Base < Http
|
||||
abstract!
|
||||
# <HAX>
|
||||
cattr_accessor :relative_url_root
|
||||
self.relative_url_root = ENV['RAILS_RELATIVE_URL_ROOT']
|
||||
|
||||
cattr_reader :protected_instance_variables
|
||||
# Controller specific instance variables which will not be accessible inside views.
|
||||
@@protected_instance_variables = %w(@assigns @performed_redirect @performed_render @variables_added @request_origin @url @parent_controller
|
||||
@action_name @before_filter_chain_aborted @action_cache_path @_headers @_params
|
||||
@_flash @_response)
|
||||
# </HAX>
|
||||
|
||||
use AbstractController::Callbacks
|
||||
use AbstractController::Helpers
|
||||
use AbstractController::Logger
|
||||
|
||||
use ActionController::HideActions
|
||||
use ActionController::UrlFor
|
||||
use ActionController::Renderer
|
||||
use ActionController::Layouts
|
||||
use ActionController::Rails2Compatibility
|
||||
use ActionController::Testing
|
||||
|
||||
def self.protect_from_forgery() end
|
||||
|
||||
def self.inherited(klass)
|
||||
::ActionController::Base.subclasses << klass.to_s
|
||||
super
|
||||
end
|
||||
|
||||
def self.subclasses
|
||||
@subclasses ||= []
|
||||
end
|
||||
|
||||
def self.app_loaded!
|
||||
@subclasses.each do |subclass|
|
||||
subclass.constantize._write_layout_method
|
||||
end
|
||||
end
|
||||
|
||||
def render(action = action_name, options = {})
|
||||
if action.is_a?(Hash)
|
||||
options, action = action, nil
|
||||
else
|
||||
options.merge! :action => action
|
||||
end
|
||||
|
||||
super(options)
|
||||
end
|
||||
|
||||
def render_to_body(options = {})
|
||||
options = {:template => options} if options.is_a?(String)
|
||||
super
|
||||
end
|
||||
|
||||
def process_action
|
||||
ret = super
|
||||
render if response_body.nil?
|
||||
ret
|
||||
end
|
||||
|
||||
def respond_to_action?(action_name)
|
||||
super || view_paths.find_by_parts?(action_name.to_s, {:formats => formats, :locales => [I18n.locale]}, controller_path)
|
||||
end
|
||||
end
|
||||
|
||||
Base.view_paths = FIXTURE_LOAD_PATH
|
||||
|
||||
class TestCase
|
||||
include TestProcess2
|
||||
setup do
|
||||
ActionController::Routing::Routes.draw do |map|
|
||||
map.connect ':controller/:action/:id'
|
||||
end
|
||||
end
|
||||
|
||||
def assert_template(options = {}, message = nil)
|
||||
validate_response!
|
||||
|
||||
clean_backtrace do
|
||||
case options
|
||||
when NilClass, String
|
||||
hax = @controller._action_view.instance_variable_get(:@_rendered)
|
||||
rendered = (hax[:template] || []).map { |t| t.identifier }
|
||||
msg = build_message(message,
|
||||
"expecting <?> but rendering with <?>",
|
||||
options, rendered.join(', '))
|
||||
assert_block(msg) do
|
||||
if options.nil?
|
||||
hax[:template].blank?
|
||||
else
|
||||
rendered.any? { |t| t.match(options) }
|
||||
end
|
||||
end
|
||||
when Hash
|
||||
if expected_partial = options[:partial]
|
||||
partials = hax[:partials]
|
||||
if expected_count = options[:count]
|
||||
found = partials.detect { |p, _| p.identifier.match(expected_partial) }
|
||||
actual_count = found.nil? ? 0 : found.second
|
||||
msg = build_message(message,
|
||||
"expecting ? to be rendered ? time(s) but rendered ? time(s)",
|
||||
expected_partial, expected_count, actual_count)
|
||||
assert(actual_count == expected_count.to_i, msg)
|
||||
else
|
||||
msg = build_message(message,
|
||||
"expecting partial <?> but action rendered <?>",
|
||||
options[:partial], partials.keys)
|
||||
assert(partials.keys.any? { |p| p.identifier.match(expected_partial) }, msg)
|
||||
end
|
||||
else
|
||||
assert hax[:partials].empty?,
|
||||
"Expected no partials to be rendered"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,4 +1,4 @@
|
|||
require 'abstract_unit'
|
||||
require ENV['new_base'] ? 'abstract_unit2' : 'abstract_unit'
|
||||
require 'controller/fake_models'
|
||||
require 'pathname'
|
||||
|
||||
|
|
|
@ -5,6 +5,8 @@ $:.unshift(File.dirname(__FILE__) + '/../lib')
|
|||
require 'test/unit'
|
||||
require 'active_support'
|
||||
require 'active_support/test_case'
|
||||
require 'action_controller/new_base/base'
|
||||
require 'action_controller/new_base/renderer'
|
||||
require 'action_controller'
|
||||
require 'action_view/base'
|
||||
require 'fixture_template'
|
||||
|
|
Loading…
Reference in a new issue