aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/test/abstract_unit.rb
diff options
context:
space:
mode:
authorCarlhuda <carlhuda@engineyard.com>2010-02-24 16:01:03 -0800
committerCarlhuda <carlhuda@engineyard.com>2010-02-25 17:53:00 -0800
commit226dfc2681c98deaf14e4ae82e973d1d5caedd68 (patch)
treedf761036bb714f3b9c10bb1eced20322aad953a7 /actionpack/test/abstract_unit.rb
parent76237f163ff7ad2a64af926030e3449c547cafa2 (diff)
downloadrails-226dfc2681c98deaf14e4ae82e973d1d5caedd68.tar.gz
rails-226dfc2681c98deaf14e4ae82e973d1d5caedd68.tar.bz2
rails-226dfc2681c98deaf14e4ae82e973d1d5caedd68.zip
WIP: Remove the global router
Diffstat (limited to 'actionpack/test/abstract_unit.rb')
-rw-r--r--actionpack/test/abstract_unit.rb71
1 files changed, 50 insertions, 21 deletions
diff --git a/actionpack/test/abstract_unit.rb b/actionpack/test/abstract_unit.rb
index 8be212c8ab..846ac5f0d7 100644
--- a/actionpack/test/abstract_unit.rb
+++ b/actionpack/test/abstract_unit.rb
@@ -64,29 +64,50 @@ module SetupOnce
end
end
-class ActiveSupport::TestCase
- include SetupOnce
-
- # Hold off drawing routes until all the possible controller classes
- # have been loaded.
- setup_once do
- ActionDispatch::Routing::Routes.draw do |map|
- match ':controller(/:action(/:id))'
+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|
+ match ':controller(/:action(/:id))'
+ end
+
+ # ROUTES TODO: Don't do this here
+ # brodel :'(
+ ActionController::IntegrationTest.app.router.draw do
+ match ':controller(/:action(/:id))'
+ end
end
end
end
+class RoutedRackApp
+ attr_reader :router
+
+ def initialize(router, &blk)
+ @router = router
+ @stack = ActionDispatch::MiddlewareStack.new(&blk).build(@router)
+ end
+
+ def call(env)
+ @stack.call(env)
+ 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 || ActionDispatch::Routing::Routes)
+ end
end
self.app = build_app
@@ -112,20 +133,15 @@ class ActionController::IntegrationTest < ActiveSupport::TestCase
end
def with_routing(&block)
- real_routes = ActionDispatch::Routing::Routes
- ActionDispatch::Routing.module_eval { remove_const :Routes }
-
temporary_routes = ActionDispatch::Routing::RouteSet.new
- self.class.app = self.class.build_app(temporary_routes)
- ActionDispatch::Routing.module_eval { const_set :Routes, temporary_routes }
+ 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 ActionDispatch::Routing.const_defined? :Routes
- ActionDispatch::Routing.module_eval { remove_const :Routes }
- end
- ActionDispatch::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
@@ -190,6 +206,11 @@ module ActionController
class TestCase
include ActionDispatch::TestProcess
+ setup do
+ # ROUTES TODO: The router object should come from somewhere sane
+ @router = SharedTestRoutes
+ end
+
def assert_template(options = {}, message = nil)
validate_request!
@@ -232,3 +253,11 @@ module ActionController
end
end
end
+
+# ROUTES TODO: Cleaner way to do this?
+module ActionController
+ UrlFor = SharedTestRoutes.named_url_helpers
+ class Base
+ include UrlFor
+ end
+end \ No newline at end of file