Browse files

Fix Routing tests. Fix routing where failing to match a controller wo…

…uld prevent the rest of routes from being attempted.

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3539 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
1 parent 28cee08 commit b381d8511d42e9b4f4f935e0e9f81a30d3993f6a @seckar seckar committed Feb 4, 2006
View
2 actionpack/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*
+* Fix Routing tests. Fix routing where failing to match a controller would prevent the rest of routes from being attempted. [Nicholas Seckar]
+
* Add :builder => option to form_for and friends. [Nicholas Seckar, Rick Olson]
* Fix controller resolution to avoid accidentally inheriting a controller from a parent module. [Nicholas Seckar]
View
7 actionpack/lib/action_controller/routing.rb
@@ -224,7 +224,7 @@ def traverse_to_controller(segments, start_at = 0)
length = segments.length
index = start_at
mod_name = controller_name = segment = nil
-
+
while index < length
return nil unless /^[A-Za-z][A-Za-z\d_]*$/ =~ (segment = segments[index])
index += 1
@@ -247,7 +247,7 @@ def traverse_to_controller(segments, start_at = 0)
(mod == Object || next_mod.name == "#{mod.name}::#{mod_name}") ? next_mod : nil
end
- raise RoutingError, "Cannot find controller: Dropped out at #{segments[start_at..index] * '/'}" unless mod
+ return nil unless mod
end
end
end
@@ -456,7 +456,6 @@ def write_generation
@generation_methods[controller.to_sym] = method_name
end
-
code = generation_code_for('routes', 'generate_default_path').to_s
eval(code, nil, 'generated_code/routing/generation.rb')
@@ -493,7 +492,7 @@ def write_recognition
route.write_recognition(g)
end
end
-
+
eval g.to_s, nil, 'generated/routing/recognition.rb'
return g.to_s
end
View
24 actionpack/test/controller/fake_controllers.rb
@@ -1,21 +1,11 @@
-module Object::Controllers
- def self.const_available?(*args)
- const_defined?(*args)
- end
+class << Object; alias_method :const_available?, :const_defined?; end
- class ContentController < ActionController::Base
- end
-
- module Admin
- def self.const_available?(*args)
- const_defined?(*args)
- end
-
- class UserController < ActionController::Base
- end
- class NewsFeedController < ActionController::Base
- end
- end
+class ContentController < Class.new(ActionController::Base)
+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
end
ActionController::Routing::Routes.draw do |map|
View
130 actionpack/test/controller/routing_test.rb
@@ -1,5 +1,4 @@
require File.dirname(__FILE__) + '/../abstract_unit'
-require File.dirname(__FILE__) + '/fake_controllers'
require 'test/unit'
require 'stringio'
@@ -12,7 +11,7 @@ class SourceTests < Test::Unit::TestCase
def setup
@source = Source.new
end
-
+
def test_initial_state
assert_equal [], source.lines
assert_equal 0, source.indentation_level
@@ -54,7 +53,7 @@ class CodeGeneratorTests < Test::Unit::TestCase
def setup
@generator = CodeGenerator.new
end
-
+
def test_initial_state
assert_equal [], generator.source.lines
assert_equal [], generator.locals
@@ -124,7 +123,7 @@ def execute(path, show = false)
def test_all_static
c = %w(hello world how are you).collect {|str| Static.new(str)}
- g.result :controller, "::Controllers::ContentController", true
+ g.result :controller, "::ContentController", true
g.constant_result :action, 'index'
go c
@@ -133,19 +132,19 @@ def test_all_static
assert_nil execute('hello/world/how')
assert_nil execute('hello/world/how/are')
assert_nil execute('hello/world/how/are/you/today')
- assert_equal({:controller => ::Controllers::ContentController, :action => 'index'}, execute('hello/world/how/are/you'))
+ assert_equal({:controller => ::ContentController, :action => 'index'}, execute('hello/world/how/are/you'))
end
def test_basic_dynamic
c = [Static.new("hi"), Dynamic.new(:action)]
- g.result :controller, "::Controllers::ContentController", true
+ g.result :controller, "::ContentController", true
go c
assert_nil execute('boo')
assert_nil execute('boo/blah')
assert_nil execute('hi')
assert_nil execute('hi/dude/what')
- assert_equal({:controller => ::Controllers::ContentController, :action => 'dude'}, execute('hi/dude'))
+ assert_equal({:controller => ::ContentController, :action => 'dude'}, execute('hi/dude'))
end
def test_basic_dynamic_backwards
@@ -163,47 +162,47 @@ def test_basic_dynamic_backwards
def test_dynamic_with_default
c = [Static.new("hi"), Dynamic.new(:action, :default => 'index')]
- g.result :controller, "::Controllers::ContentController", true
+ g.result :controller, "::ContentController", true
go c
assert_nil execute('boo')
assert_nil execute('boo/blah')
assert_nil execute('hi/dude/what')
- assert_equal({:controller => ::Controllers::ContentController, :action => 'index'}, execute('hi'))
- assert_equal({:controller => ::Controllers::ContentController, :action => 'index'}, execute('hi/index'))
- assert_equal({:controller => ::Controllers::ContentController, :action => 'dude'}, execute('hi/dude'))
+ assert_equal({:controller => ::ContentController, :action => 'index'}, execute('hi'))
+ assert_equal({:controller => ::ContentController, :action => 'index'}, execute('hi/index'))
+ assert_equal({:controller => ::ContentController, :action => 'dude'}, execute('hi/dude'))
end
def test_dynamic_with_string_condition
c = [Static.new("hi"), Dynamic.new(:action, :condition => 'index')]
- g.result :controller, "::Controllers::ContentController", true
+ g.result :controller, "::ContentController", true
go c
assert_nil execute('boo')
assert_nil execute('boo/blah')
assert_nil execute('hi')
assert_nil execute('hi/dude/what')
- assert_equal({:controller => ::Controllers::ContentController, :action => 'index'}, execute('hi/index'))
+ assert_equal({:controller => ::ContentController, :action => 'index'}, execute('hi/index'))
assert_nil execute('hi/dude')
end
def test_dynamic_with_string_condition_backwards
c = [Dynamic.new(:action, :condition => 'index'), Static.new("hi")]
- g.result :controller, "::Controllers::ContentController", true
+ g.result :controller, "::ContentController", true
go c
assert_nil execute('boo')
assert_nil execute('boo/blah')
assert_nil execute('hi')
assert_nil execute('dude/what/hi')
assert_nil execute('index/what')
- assert_equal({:controller => ::Controllers::ContentController, :action => 'index'}, execute('index/hi'))
+ assert_equal({:controller => ::ContentController, :action => 'index'}, execute('index/hi'))
assert_nil execute('dude/hi')
end
def test_dynamic_with_regexp_condition
c = [Static.new("hi"), Dynamic.new(:action, :condition => /^[a-z]+$/)]
- g.result :controller, "::Controllers::ContentController", true
+ g.result :controller, "::ContentController", true
go c
assert_nil execute('boo')
@@ -213,53 +212,53 @@ def test_dynamic_with_regexp_condition
assert_nil execute('hi/138708jkhdf')
assert_nil execute('hi/dkjfl8792343dfsf')
assert_nil execute('hi/dude/what')
- assert_equal({:controller => ::Controllers::ContentController, :action => 'index'}, execute('hi/index'))
- assert_equal({:controller => ::Controllers::ContentController, :action => 'dude'}, execute('hi/dude'))
+ assert_equal({:controller => ::ContentController, :action => 'index'}, execute('hi/index'))
+ assert_equal({:controller => ::ContentController, :action => 'dude'}, execute('hi/dude'))
end
def test_dynamic_with_regexp_and_default
c = [Static.new("hi"), Dynamic.new(:action, :condition => /^[a-z]+$/, :default => 'index')]
- g.result :controller, "::Controllers::ContentController", true
+ g.result :controller, "::ContentController", true
go c
assert_nil execute('boo')
assert_nil execute('boo/blah')
assert_nil execute('hi/FOXY')
assert_nil execute('hi/138708jkhdf')
assert_nil execute('hi/dkjfl8792343dfsf')
- assert_equal({:controller => ::Controllers::ContentController, :action => 'index'}, execute('hi'))
- assert_equal({:controller => ::Controllers::ContentController, :action => 'index'}, execute('hi/index'))
- assert_equal({:controller => ::Controllers::ContentController, :action => 'dude'}, execute('hi/dude'))
+ assert_equal({:controller => ::ContentController, :action => 'index'}, execute('hi'))
+ assert_equal({:controller => ::ContentController, :action => 'index'}, execute('hi/index'))
+ assert_equal({:controller => ::ContentController, :action => 'dude'}, execute('hi/dude'))
assert_nil execute('hi/dude/what')
end
def test_path
c = [Static.new("hi"), Path.new(:file)]
- g.result :controller, "::Controllers::ContentController", true
+ g.result :controller, "::ContentController", true
g.constant_result :action, "download"
go c
assert_nil execute('boo')
assert_nil execute('boo/blah')
- assert_equal({:controller => ::Controllers::ContentController, :action => 'download', :file => []}, execute('hi'))
- assert_equal({:controller => ::Controllers::ContentController, :action => 'download', :file => %w(books agile_rails_dev.pdf)},
+ assert_equal({:controller => ::ContentController, :action => 'download', :file => []}, execute('hi'))
+ assert_equal({:controller => ::ContentController, :action => 'download', :file => %w(books agile_rails_dev.pdf)},
execute('hi/books/agile_rails_dev.pdf'))
- assert_equal({:controller => ::Controllers::ContentController, :action => 'download', :file => ['dude']}, execute('hi/dude'))
+ assert_equal({:controller => ::ContentController, :action => 'download', :file => ['dude']}, execute('hi/dude'))
assert_equal 'dude/what', execute('hi/dude/what')[:file].to_s
end
def test_path_with_dynamic
c = [Dynamic.new(:action), Path.new(:file)]
- g.result :controller, "::Controllers::ContentController", true
+ g.result :controller, "::ContentController", true
go c
assert_nil execute('')
- assert_equal({:controller => ::Controllers::ContentController, :action => 'download', :file => []}, execute('download'))
- assert_equal({:controller => ::Controllers::ContentController, :action => 'download', :file => %w(books agile_rails_dev.pdf)},
+ assert_equal({:controller => ::ContentController, :action => 'download', :file => []}, execute('download'))
+ assert_equal({:controller => ::ContentController, :action => 'download', :file => %w(books agile_rails_dev.pdf)},
execute('download/books/agile_rails_dev.pdf'))
- assert_equal({:controller => ::Controllers::ContentController, :action => 'download', :file => ['dude']}, execute('download/dude'))
+ assert_equal({:controller => ::ContentController, :action => 'download', :file => ['dude']}, execute('download/dude'))
assert_equal 'dude/what', execute('hi/dude/what')[:file].to_s
end
@@ -287,8 +286,8 @@ def test_controller
assert_nil execute('hi/13870948')
assert_nil execute('hi/content/dog')
assert_nil execute('hi/admin/user/foo')
- assert_equal({:controller => ::Controllers::ContentController, :action => 'hi'}, execute('hi/content'))
- assert_equal({:controller => ::Controllers::Admin::UserController, :action => 'hi'}, execute('hi/admin/user'))
+ assert_equal({:controller => ::ContentController, :action => 'hi'}, execute('hi/content'))
+ assert_equal({:controller => ::Admin::UserController, :action => 'hi'}, execute('hi/admin/user'))
end
def test_controller_with_regexp
@@ -300,8 +299,8 @@ def test_controller_with_regexp
assert_nil execute('hi')
assert_nil execute('hi/x')
assert_nil execute('hi/content')
- assert_equal({:controller => ::Controllers::Admin::UserController, :action => 'hi'}, execute('hi/admin/user'))
- assert_equal({:controller => ::Controllers::Admin::NewsFeedController, :action => 'hi'}, execute('hi/admin/news_feed'))
+ assert_equal({:controller => ::Admin::UserController, :action => 'hi'}, execute('hi/admin/user'))
+ assert_equal({:controller => ::Admin::NewsFeedController, :action => 'hi'}, execute('hi/admin/news_feed'))
assert_nil execute('hi/admin/user/foo')
end
@@ -310,13 +309,13 @@ def test_standard_route(time = ::RunTimeTests)
go c
# Make sure we get the right answers
- assert_equal({:controller => ::Controllers::ContentController, :action => 'index'}, execute('content'))
- assert_equal({:controller => ::Controllers::ContentController, :action => 'list'}, execute('content/list'))
- assert_equal({:controller => ::Controllers::ContentController, :action => 'show', :id => '10'}, execute('content/show/10'))
+ assert_equal({:controller => ::ContentController, :action => 'index'}, execute('content'))
+ assert_equal({:controller => ::ContentController, :action => 'list'}, execute('content/list'))
+ assert_equal({:controller => ::ContentController, :action => 'show', :id => '10'}, execute('content/show/10'))
- assert_equal({:controller => ::Controllers::Admin::UserController, :action => 'index'}, execute('admin/user'))
- assert_equal({:controller => ::Controllers::Admin::UserController, :action => 'list'}, execute('admin/user/list'))
- assert_equal({:controller => ::Controllers::Admin::UserController, :action => 'show', :id => 'nseckar'}, execute('admin/user/show/nseckar'))
+ assert_equal({:controller => ::Admin::UserController, :action => 'index'}, execute('admin/user'))
+ assert_equal({:controller => ::Admin::UserController, :action => 'list'}, execute('admin/user/list'))
+ assert_equal({:controller => ::Admin::UserController, :action => 'show', :id => 'nseckar'}, execute('admin/user/show/nseckar'))
assert_nil execute('content/show/10/20')
assert_nil execute('food')
@@ -357,7 +356,7 @@ def test_standard_route(time = ::RunTimeTests)
end
def test_default_route
- g.result :controller, "::Controllers::ContentController", true
+ g.result :controller, "::ContentController", true
g.constant_result :action, 'index'
go []
@@ -366,7 +365,7 @@ def test_default_route
assert_nil execute('hello/world/how')
assert_nil execute('hello/world/how/are')
assert_nil execute('hello/world/how/are/you/today')
- assert_equal({:controller => ::Controllers::ContentController, :action => 'index'}, execute([]))
+ assert_equal({:controller => ::ContentController, :action => 'index'}, execute([]))
end
end
@@ -534,6 +533,8 @@ def test_default_route
end
class RouteTests < Test::Unit::TestCase
+
+
def route(*args)
@route = ::ActionController::Routing::Route.new(*args) unless args.empty?
return @route
@@ -566,7 +567,7 @@ def test_static
assert_nil rec('hello/turn')
assert_nil rec('turn/world')
assert_equal(
- {:known => 'known_value', :controller => ::Controllers::ContentController, :action => 'index'},
+ {:known => 'known_value', :controller => ::ContentController, :action => 'index'},
rec('hello/world')
)
@@ -582,8 +583,8 @@ def test_dynamic
assert_nil rec('hello')
assert_nil rec('foo/bar')
- assert_equal({:controller => ::Controllers::ContentController, :action => 'show_person', :name => 'rails'}, rec('hello/rails'))
- assert_equal({:controller => ::Controllers::ContentController, :action => 'show_person', :name => 'Nicholas Seckar'}, rec('hello/Nicholas+Seckar'))
+ assert_equal({:controller => ::ContentController, :action => 'show_person', :name => 'rails'}, rec('hello/rails'))
+ assert_equal({:controller => ::ContentController, :action => 'show_person', :name => 'Nicholas Seckar'}, rec('hello/Nicholas+Seckar'))
assert_nil gen(:controller => 'content', :action => 'show_dude', :name => 'rails')
assert_nil gen(:controller => 'content', :action => 'show_person')
@@ -596,15 +597,15 @@ def test_typical
route ':controller/:action/:id', :action => 'index', :id => nil
assert_nil rec('hello')
assert_nil rec('foo bar')
- assert_equal({:controller => ::Controllers::ContentController, :action => 'index'}, rec('content'))
- assert_equal({:controller => ::Controllers::Admin::UserController, :action => 'index'}, rec('admin/user'))
+ assert_equal({:controller => ::ContentController, :action => 'index'}, rec('content'))
+ assert_equal({:controller => ::Admin::UserController, :action => 'index'}, rec('admin/user'))
- assert_equal({:controller => ::Controllers::Admin::UserController, :action => 'index'}, rec('admin/user/index'))
- assert_equal({:controller => ::Controllers::Admin::UserController, :action => 'list'}, rec('admin/user/list'))
- assert_equal({:controller => ::Controllers::Admin::UserController, :action => 'show', :id => '10'}, rec('admin/user/show/10'))
+ assert_equal({:controller => ::Admin::UserController, :action => 'index'}, rec('admin/user/index'))
+ assert_equal({:controller => ::Admin::UserController, :action => 'list'}, rec('admin/user/list'))
+ assert_equal({:controller => ::Admin::UserController, :action => 'show', :id => '10'}, rec('admin/user/show/10'))
- assert_equal({:controller => ::Controllers::ContentController, :action => 'list'}, rec('content/list'))
- assert_equal({:controller => ::Controllers::ContentController, :action => 'show', :id => '10'}, rec('content/show/10'))
+ assert_equal({:controller => ::ContentController, :action => 'list'}, rec('content/list'))
+ assert_equal({:controller => ::ContentController, :action => 'show', :id => '10'}, rec('content/show/10'))
assert_equal '/content', gen(:controller => 'content', :action => 'index')
@@ -627,11 +628,11 @@ def setup
end
def test_default_setup
- assert_equal({:controller => ::Controllers::ContentController, :action => 'index'}.stringify_keys, rs.recognize_path(%w(content)))
- assert_equal({:controller => ::Controllers::ContentController, :action => 'list'}.stringify_keys, rs.recognize_path(%w(content list)))
- assert_equal({:controller => ::Controllers::ContentController, :action => 'show', :id => '10'}.stringify_keys, rs.recognize_path(%w(content show 10)))
+ assert_equal({:controller => ::ContentController, :action => 'index'}.stringify_keys, rs.recognize_path(%w(content)))
+ assert_equal({:controller => ::ContentController, :action => 'list'}.stringify_keys, rs.recognize_path(%w(content list)))
+ assert_equal({:controller => ::ContentController, :action => 'show', :id => '10'}.stringify_keys, rs.recognize_path(%w(content show 10)))
- assert_equal({:controller => ::Controllers::Admin::UserController, :action => 'show', :id => '10'}.stringify_keys, rs.recognize_path(%w(admin user show 10)))
+ assert_equal({:controller => ::Admin::UserController, :action => 'show', :id => '10'}.stringify_keys, rs.recognize_path(%w(admin user show 10)))
assert_equal ['/admin/user/show/10', []], rs.generate({:controller => 'admin/user', :action => 'show', :id => 10})
@@ -718,9 +719,9 @@ def test_route_with_regexp_for_controller
map.connect ':controller/:admintoken/:action/:id', :controller => /admin\/.+/
map.connect ':controller/:action/:id'
end
- assert_equal({:controller => ::Controllers::Admin::UserController, :admintoken => "foo", :action => "index"}.stringify_keys,
+ assert_equal({:controller => ::Admin::UserController, :admintoken => "foo", :action => "index"}.stringify_keys,
rs.recognize_path(%w(admin user foo)))
- assert_equal({:controller => ::Controllers::ContentController, :action => "foo"}.stringify_keys,
+ assert_equal({:controller => ::ContentController, :action => "foo"}.stringify_keys,
rs.recognize_path(%w(content foo)))
assert_equal ['/admin/user/foo', []], rs.generate(:controller => "admin/user", :admintoken => "foo", :action => "index")
assert_equal ['/content/foo',[]], rs.generate(:controller => "content", :action => "foo")
@@ -792,7 +793,6 @@ def test_paths_escaped
rs.path 'file/*path', :controller => 'content', :action => 'show_file'
rs.connect ':controller/:action/:id'
end
-
results = rs.recognize_path %w(file hello+world how+are+you%3F)
assert results, "Recognition should have succeeded"
assert_equal ['hello world', 'how are you?'], results['path']
@@ -838,7 +838,7 @@ def test_route_with_fixnum_default
assert_equal ['/page', []], rs.generate(:controller => 'content', :action => 'show_page', :id => '1')
assert_equal ['/page/10', []], rs.generate(:controller => 'content', :action => 'show_page', :id => 10)
- ctrl = ::Controllers::ContentController
+ ctrl = ::ContentController
assert_equal({'controller' => ctrl, 'action' => 'show_page', 'id' => 1}, rs.recognize_path(%w(page)))
assert_equal({'controller' => ctrl, 'action' => 'show_page', 'id' => '1'}, rs.recognize_path(%w(page 1)))
@@ -850,12 +850,12 @@ def test_action_expiry
end
def test_recognition_with_uppercase_controller_name
- assert_equal({'controller' => ::Controllers::ContentController, 'action' => 'index'}, rs.recognize_path(%w(Content)))
- assert_equal({'controller' => ::Controllers::ContentController, 'action' => 'list'}, rs.recognize_path(%w(Content list)))
- assert_equal({'controller' => ::Controllers::ContentController, 'action' => 'show', 'id' => '10'}, rs.recognize_path(%w(Content show 10)))
+ assert_equal({'controller' => ::ContentController, 'action' => 'index'}, rs.recognize_path(%w(Content)))
+ assert_equal({'controller' => ::ContentController, 'action' => 'list'}, rs.recognize_path(%w(Content list)))
+ assert_equal({'controller' => ::ContentController, 'action' => 'show', 'id' => '10'}, rs.recognize_path(%w(Content show 10)))
- assert_equal({'controller' => ::Controllers::Admin::NewsFeedController, 'action' => 'index'}, rs.recognize_path(%w(Admin NewsFeed)))
- assert_equal({'controller' => ::Controllers::Admin::NewsFeedController, 'action' => 'index'}, rs.recognize_path(%w(Admin News_Feed)))
+ assert_equal({'controller' => ::Admin::NewsFeedController, 'action' => 'index'}, rs.recognize_path(%w(Admin NewsFeed)))
+ assert_equal({'controller' => ::Admin::NewsFeedController, 'action' => 'index'}, rs.recognize_path(%w(Admin News_Feed)))
end
def test_both_requirement_and_optional

0 comments on commit b381d85

Please sign in to comment.