Skip to content

Commit

Permalink
Track all AC base subclasses as possible controllers for internal tes…
Browse files Browse the repository at this point in the history
…ting
  • Loading branch information
josh committed Aug 26, 2009
1 parent 5bc66f1 commit 78129b1
Show file tree
Hide file tree
Showing 6 changed files with 50 additions and 92 deletions.
12 changes: 12 additions & 0 deletions actionpack/test/abstract_unit.rb
Expand Up @@ -62,8 +62,20 @@ module ActionController
}
Base.session_store = nil

class << Routing
def possible_controllers
@@possible_controllers ||= []
end
end

class Base
include ActionController::Testing

def self.inherited(klass)
name = klass.name.underscore.sub(/_controller$/, '')
ActionController::Routing.possible_controllers << name unless name.blank?
super
end
end

Base.view_paths = FIXTURE_LOAD_PATH
Expand Down
8 changes: 0 additions & 8 deletions actionpack/test/controller/action_pack_assertions_test.rb
Expand Up @@ -182,14 +182,6 @@ def redirect_to_top_level_named_route

# a test case to exercise the new capabilities TestRequest & TestResponse
class ActionPackAssertionsControllerTest < ActionController::TestCase
# let's get this party started
def setup
super

ActionController::Routing.use_controllers!(%w(action_pack_assertions admin/inner_module user content admin/user))
ActionController::Routing::Routes.load_routes!
end

# -- assertion-based testing ------------------------------------------------

def test_assert_tag_and_url_for
Expand Down
86 changes: 16 additions & 70 deletions actionpack/test/controller/routing_test.rb
Expand Up @@ -44,11 +44,11 @@ def test_route_generation_escapes_unsafe_path_characters
end

def test_route_recognition_unescapes_path_components
options = { :controller => "controller",
options = { :controller => "content",
:action => "act#{@segment}ion",
:variable => "var#{@segment}iable",
:additional => ["add#{@segment}itional-1", "add#{@segment}itional-2"] }
assert_equal options, @set.recognize_path("/controller/act#{@escaped}ion/var#{@escaped}iable/add#{@escaped}itional-1/add#{@escaped}itional-2")
assert_equal options, @set.recognize_path("/content/act#{@escaped}ion/var#{@escaped}iable/add#{@escaped}itional-1/add#{@escaped}itional-2")
end

def test_route_generation_allows_passing_non_string_values_to_generated_helper
Expand All @@ -60,58 +60,6 @@ def test_route_generation_allows_passing_non_string_values_to_generated_helper
end

class RoutingTest < Test::Unit::TestCase
def test_possible_controllers
true_controller_paths = ActionController::Routing.controller_paths

ActionController::Routing.use_controllers! nil

Object.send(:remove_const, :RAILS_ROOT) if defined?(::RAILS_ROOT)
Object.const_set(:RAILS_ROOT, File.dirname(__FILE__) + '/controller_fixtures')

ActionController::Routing.controller_paths = [
RAILS_ROOT, RAILS_ROOT + '/app/controllers', RAILS_ROOT + '/vendor/plugins/bad_plugin/lib'
]

assert_equal ["admin/user", "plugin", "user"], ActionController::Routing.possible_controllers.sort
ensure
if true_controller_paths
ActionController::Routing.controller_paths = true_controller_paths
end
ActionController::Routing.use_controllers! nil
Object.send(:remove_const, :RAILS_ROOT) rescue nil
end

def test_possible_controllers_are_reset_on_each_load
true_possible_controllers = ActionController::Routing.possible_controllers
true_controller_paths = ActionController::Routing.controller_paths

ActionController::Routing.use_controllers! nil
root = File.dirname(__FILE__) + '/controller_fixtures'

ActionController::Routing.controller_paths = []
assert_equal [], ActionController::Routing.possible_controllers

ActionController::Routing.controller_paths = [
root, root + '/app/controllers', root + '/vendor/plugins/bad_plugin/lib'
]
ActionController::Routing::Routes.load!

assert_equal ["admin/user", "plugin", "user"], ActionController::Routing.possible_controllers.sort
ensure
ActionController::Routing.controller_paths = true_controller_paths
ActionController::Routing.use_controllers! true_possible_controllers
Object.send(:remove_const, :RAILS_ROOT) rescue nil

ActionController::Routing::Routes.reload!
end

def test_with_controllers
c = %w(admin/accounts admin/users account pages)
ActionController::Routing.with_controllers c do
assert_equal c, ActionController::Routing.possible_controllers
end
end

def test_normalize_unix_paths
load_paths = %w(. config/../app/controllers config/../app//helpers script/../config/../vendor/rails/actionpack/lib vendor/rails/railties/builtin/rails_info app/models lib script/../config/../foo/bar/../../app/models .foo/../.bar foo.bar/../config)
paths = ActionController::Routing.normalize_paths(load_paths)
Expand Down Expand Up @@ -1815,22 +1763,20 @@ def test_segmentation_of_dynamic_dot_path
end

def test_slashes_are_implied
ActionController::Routing.with_controllers(['foo']) do
['/:controller/:action/:id/', '/:controller/:action/:id',
':controller/:action/:id', '/:controller/:action/:id/'
].each do |path|
@set = nil
set.draw { |map| map.connect(path) }

assert_equal '/foo', set.generate(:controller => 'foo', :action => 'index')
assert_equal '/foo/list', set.generate(:controller => 'foo', :action => 'list')
assert_equal '/foo/show/1', set.generate(:controller => 'foo', :action => 'show', :id => '1')

assert_equal({:controller => "foo", :action => "index"}, set.recognize_path('/foo'))
assert_equal({:controller => "foo", :action => "index"}, set.recognize_path('/foo/index'))
assert_equal({:controller => "foo", :action => "list"}, set.recognize_path('/foo/list'))
assert_equal({:controller => "foo", :action => "show", :id => "1"}, set.recognize_path('/foo/show/1'))
end
['/:controller/:action/:id/', '/:controller/:action/:id',
':controller/:action/:id', '/:controller/:action/:id/'
].each do |path|
@set = nil
set.draw { |map| map.connect(path) }

assert_equal '/content', set.generate(:controller => 'content', :action => 'index')
assert_equal '/content/list', set.generate(:controller => 'content', :action => 'list')
assert_equal '/content/show/1', set.generate(:controller => 'content', :action => 'show', :id => '1')

assert_equal({:controller => "content", :action => "index"}, set.recognize_path('/content'))
assert_equal({:controller => "content", :action => "index"}, set.recognize_path('/content/index'))
assert_equal({:controller => "content", :action => "list"}, set.recognize_path('/content/list'))
assert_equal({:controller => "content", :action => "show", :id => "1"}, set.recognize_path('/content/show/1'))
end
end

Expand Down
3 changes: 0 additions & 3 deletions actionpack/test/controller/test_test.rb
Expand Up @@ -123,9 +123,6 @@ def setup
@controller = TestController.new
@request = ActionController::TestRequest.new
@response = ActionController::TestResponse.new

ActionController::Routing.use_controllers! %w(content admin/user test_test/test)
ActionController::Routing::Routes.load_routes!
end

def test_raw_post_handling
Expand Down
9 changes: 5 additions & 4 deletions actionpack/test/lib/controller/fake_controllers.rb
@@ -1,15 +1,16 @@
class << Object; alias_method :const_available?, :const_defined?; end
class ContentController < Class.new(ActionController::Base)

class ContentController < ActionController::Base
end
class NotAController
end
module Admin
class << self; alias_method :const_available?, :const_defined?; end
class UserController < Class.new(ActionController::Base); end
class NewsFeedController < Class.new(ActionController::Base); end
class UserController < ActionController::Base; end
class NewsFeedController < ActionController::Base; end
end


# For speed test
class SpeedController < ActionController::Base; end
class SearchController < SpeedController; end
Expand Down
24 changes: 17 additions & 7 deletions actionpack/test/new_base/test_helper.rb
Expand Up @@ -35,12 +35,6 @@ class Rack::TestCase < ActionController::IntegrationTest
setup do
ActionController::Base.session_options[:key] = "abc"
ActionController::Base.session_options[:secret] = ("*" * 30)

controllers = ActionController::Base.subclasses.map do |k|
k.underscore.sub(/_controller$/, '')
end

ActionController::Routing.use_controllers!(controllers)
end

def app
Expand Down Expand Up @@ -91,10 +85,26 @@ def assert_header(name, value)
class ::ApplicationController < ActionController::Base
end

module ActionController
class << Routing
def possible_controllers
@@possible_controllers ||= []
end
end

class Base
def self.inherited(klass)
name = klass.name.underscore.sub(/_controller$/, '')
ActionController::Routing.possible_controllers << name unless name.blank?
super
end
end
end

class SimpleRouteCase < Rack::TestCase
setup do
ActionController::Routing::Routes.draw do |map|
map.connect ':controller/:action/:id'
end
end
end
end

0 comments on commit 78129b1

Please sign in to comment.