aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/test/abstract_unit.rb
diff options
context:
space:
mode:
Diffstat (limited to 'actionpack/test/abstract_unit.rb')
-rw-r--r--actionpack/test/abstract_unit.rb105
1 files changed, 81 insertions, 24 deletions
diff --git a/actionpack/test/abstract_unit.rb b/actionpack/test/abstract_unit.rb
index 867e50d5b9..67aa412d3d 100644
--- a/actionpack/test/abstract_unit.rb
+++ b/actionpack/test/abstract_unit.rb
@@ -1,5 +1,11 @@
require File.expand_path('../../../load_paths', __FILE__)
+lib = File.expand_path("#{File.dirname(__FILE__)}/../lib")
+$:.unshift(lib) unless $:.include?('lib') || $:.include?(lib)
+
+activemodel_path = File.expand_path('../../../activemodel/lib', __FILE__)
+$:.unshift(activemodel_path) if File.directory?(activemodel_path) && !$:.include?(activemodel_path)
+
$:.unshift(File.dirname(__FILE__) + '/lib')
$:.unshift(File.dirname(__FILE__) + '/fixtures/helpers')
$:.unshift(File.dirname(__FILE__) + '/fixtures/alternate_helpers')
@@ -10,7 +16,6 @@ require 'test/unit'
require 'abstract_controller'
require 'action_controller'
require 'action_view'
-require 'action_view/base'
require 'action_dispatch'
require 'fixture_template'
require 'active_support/dependencies'
@@ -64,29 +69,66 @@ module SetupOnce
end
end
-class ActiveSupport::TestCase
- include SetupOnce
+SharedTestRoutes = ActionDispatch::Routing::RouteSet.new
+
+module ActiveSupport
+ class TestCase
+ include SetupOnce
+ # Hold off drawing routes until all the possible controller classes
+ # have been loaded.
+ setup_once do
+ SharedTestRoutes.draw do |map|
+ # FIXME: match ':controller(/:action(/:id))'
+ map.connect ':controller/:action/:id'
+ end
+
+ ActionController::IntegrationTest.app.router.draw do |map|
+ # FIXME: match ':controller(/:action(/:id))'
+ map.connect ':controller/:action/:id'
+ end
+ end
+ end
+end
+
+class RoutedRackApp
+ attr_reader :router
+ alias routes router
+
+ def initialize(router, &blk)
+ @router = router
+ @stack = ActionDispatch::MiddlewareStack.new(&blk).build(@router)
+ end
+
+ def call(env)
+ @stack.call(env)
+ end
+end
- # Hold off drawing routes until all the possible controller classes
- # have been loaded.
- setup_once do
- ActionController::Routing::Routes.draw do |map|
- match ':controller(/:action(/:id))'
+class BasicController
+ attr_accessor :request
+
+ def config
+ @config ||= ActiveSupport::InheritableOptions.new(ActionController::Base.config).tap do |config|
+ # VIEW TODO: View tests should not require a controller
+ public_dir = File.expand_path("../fixtures/public", __FILE__)
+ config.assets_dir = public_dir
+ config.javascripts_dir = "#{public_dir}/javascripts"
+ config.stylesheets_dir = "#{public_dir}/stylesheets"
+ config
end
end
end
class ActionController::IntegrationTest < ActiveSupport::TestCase
def self.build_app(routes = nil)
- ActionDispatch::Flash
- ActionDispatch::MiddlewareStack.new { |middleware|
+ RoutedRackApp.new(routes || ActionDispatch::Routing::RouteSet.new) do |middleware|
middleware.use "ActionDispatch::ShowExceptions"
middleware.use "ActionDispatch::Callbacks"
middleware.use "ActionDispatch::ParamsParser"
middleware.use "ActionDispatch::Cookies"
middleware.use "ActionDispatch::Flash"
middleware.use "ActionDispatch::Head"
- }.build(routes || ActionController::Routing::Routes)
+ end
end
self.app = build_app
@@ -112,28 +154,22 @@ class ActionController::IntegrationTest < ActiveSupport::TestCase
end
def with_routing(&block)
- real_routes = ActionController::Routing::Routes
- ActionController::Routing.module_eval { remove_const :Routes }
-
- temporary_routes = ActionController::Routing::RouteSet.new
- self.class.app = self.class.build_app(temporary_routes)
- ActionController::Routing.module_eval { const_set :Routes, temporary_routes }
+ temporary_routes = ActionDispatch::Routing::RouteSet.new
+ old_app, self.class.app = self.class.app, self.class.build_app(temporary_routes)
+ old_routes = SharedTestRoutes
+ silence_warnings { Object.const_set(:SharedTestRoutes, temporary_routes) }
yield temporary_routes
ensure
- if ActionController::Routing.const_defined? :Routes
- ActionController::Routing.module_eval { remove_const :Routes }
- end
- ActionController::Routing.const_set(:Routes, real_routes) if real_routes
- self.class.app = self.class.build_app
+ self.class.app = old_app
+ silence_warnings { Object.const_set(:SharedTestRoutes, old_routes) }
end
end
# Temporary base class
class Rack::TestCase < ActionController::IntegrationTest
setup do
- ActionController::Base.session_options[:key] = "abc"
- ActionController::Base.session_options[:secret] = ("*" * 30)
+ ActionController::Base.config.secret = "abc" * 30
end
def self.testing(klass = nil)
@@ -180,6 +216,16 @@ end
class ::ApplicationController < ActionController::Base
end
+module ActionView
+ class TestCase
+ # Must repeat the setup because AV::TestCase is a duplication
+ # of AC::TestCase
+ setup do
+ @router = SharedTestRoutes
+ end
+ end
+end
+
module ActionController
class Base
include ActionController::Testing
@@ -190,6 +236,10 @@ module ActionController
class TestCase
include ActionDispatch::TestProcess
+ setup do
+ @router = SharedTestRoutes
+ end
+
def assert_template(options = {}, message = nil)
validate_request!
@@ -232,3 +282,10 @@ module ActionController
end
end
end
+
+# This stub emulates the Railtie including the URL helpers from a Rails application
+module ActionController
+ class Base
+ include SharedTestRoutes.url_helpers
+ end
+end \ No newline at end of file