Renaming internals of Router.

Adding tests for legacy setRequestInfo() support.
This commit is contained in:
Mark Story 2010-05-02 02:16:16 -04:00
parent 26279851e1
commit 7e25d94258
2 changed files with 185 additions and 97 deletions

View file

@ -126,20 +126,13 @@ class Router {
private $__resourceMapped = array(); private $__resourceMapped = array();
/** /**
* Maintains the parameter stack for the current request * Maintains the request object stack for the current request.
* This will contain more than one request object when requestAction is used.
* *
* @var array * @var array
* @access private * @access private
*/ */
private $__params = array(); private $__requests = array();
/**
* Maintains the path stack for the current request
*
* @var array
* @access private
*/
private $__paths = array();
/** /**
* Keeps Router state to determine if default routes have already been connected * Keeps Router state to determine if default routes have already been connected
@ -591,19 +584,22 @@ class Router {
* parameters as the current request parameters that are merged with url arrays * parameters as the current request parameters that are merged with url arrays
* created later in the request. * created later in the request.
* *
* @param array $params Parameters and path information * Will accept either a CakeRequest object or an array of arrays. Support for
* accepting arrays may be removed in the future.
*
* @param mixed $params Parameters and path information or a CakeRequest object.
* @return void * @return void
*/ */
public static function setRequestInfo($request) { public static function setRequestInfo($request) {
$self = Router::getInstance(); $self = Router::getInstance();
if ($request instanceof CakeRequest) { if ($request instanceof CakeRequest) {
$self->__params[] = $request; $self->__requests[] = $request;
} else { } else {
$requestObj = new CakeRequest(); $requestObj = new CakeRequest();
$request += array(array(), array()); $request += array(array(), array());
$request[0] += array('controller' => false, 'action' => false, 'plugin' => null); $request[0] += array('controller' => false, 'action' => false, 'plugin' => null);
$requestObj->addParams($request[0])->addPaths($request[1]); $requestObj->addParams($request[0])->addPaths($request[1]);
$self->__params[] = $requestObj; $self->__requests[] = $requestObj;
} }
} }
@ -616,9 +612,9 @@ class Router {
public static function getRequest($current = false) { public static function getRequest($current = false) {
$self = Router::getInstance(); $self = Router::getInstance();
if ($current) { if ($current) {
return $self->__params[count($self->__params) - 1]; return $self->__requests[count($self->__requests) - 1];
} }
return isset($self->__params[0]) ? $self->__params[0] : null; return isset($self->__requests[0]) ? $self->__requests[0] : null;
} }
/** /**
@ -630,10 +626,10 @@ class Router {
public static function getParams($current = false) { public static function getParams($current = false) {
$self = Router::getInstance(); $self = Router::getInstance();
if ($current) { if ($current) {
return $self->__params[count($self->__params) - 1]->params; return $self->__requests[count($self->__requests) - 1]->params;
} }
if (isset($self->__params[0])) { if (isset($self->__requests[0])) {
return $self->__params[0]->params; return $self->__requests[0]->params;
} }
return array(); return array();
} }
@ -662,12 +658,12 @@ class Router {
public static function getPaths($current = false) { public static function getPaths($current = false) {
$self = Router::getInstance(); $self = Router::getInstance();
if ($current) { if ($current) {
return $self->__params[count($self->__params) - 1]; return $self->__requests[count($self->__requests) - 1];
} }
if (!isset($self->__params[0])) { if (!isset($self->__requests[0])) {
return array('base' => null); return array('base' => null);
} }
return array('base' => $self->__params[0]->base); return array('base' => $self->__requests[0]->base);
} }
/** /**
@ -745,12 +741,12 @@ class Router {
} }
$path = array('base' => null); $path = array('base' => null);
if (!empty($self->__params)) { if (!empty($self->__requests)) {
// bad hack for detecting if doing a request action. // bad hack for detecting if doing a request action.
if (isset($this) && !isset($this->params['requested'])) { if (isset($this) && !isset($this->params['requested'])) {
$request = $self->__params[0]; $request = $self->__requests[0];
} else { } else {
$request = end($self->__params); $request = end($self->__requests);
} }
$params = $request->params; $params = $request->params;
$path = array('base' => $request->base, 'here' => $request->here); $path = array('base' => $request->base, 'here' => $request->here);

View file

@ -1526,10 +1526,17 @@ class RouterTest extends CakeTestCase {
Router::reload(); Router::reload();
Router::parse('/'); Router::parse('/');
Router::setRequestInfo(array( $request = new CakeRequest();
array('plugin' => null, 'controller' => 'images', 'action' => 'index', 'pass' => array(), 'prefix' => 'protected', 'protected' => true, 'form' => array(), 'url' => array('url' => 'protected/images/index')), Router::setRequestInfo(
array('base' => '', 'here' => '/protected/images/index', 'webroot' => '/') $request->addParams(array(
)); 'plugin' => null, 'controller' => 'images', 'action' => 'index', 'prefix' => 'protected',
'protected' => true, 'url' => array('url' => 'protected/images/index')
))->addPaths(array(
'base' => '',
'here' => '/protected/images/index',
'webroot' => '/',
))
);
$result = Router::url(array('controller' => 'images', 'action' => 'add')); $result = Router::url(array('controller' => 'images', 'action' => 'add'));
$expected = '/protected/images/add'; $expected = '/protected/images/add';
@ -1550,19 +1557,33 @@ class RouterTest extends CakeTestCase {
Router::reload(); Router::reload();
Router::parse('/'); Router::parse('/');
Router::setRequestInfo(array( $request = new CakeRequest();
array('plugin' => null, 'controller' => 'images', 'action' => 'index', 'pass' => array(), 'prefix' => 'protected', 'protected' => true, 'form' => array(), 'url' => array('url' => 'protected/images/index')), Router::setRequestInfo(
array('base' => '', 'here' => '/protected/images/index', 'webroot' => '/') $request->addParams(array(
)); 'plugin' => null, 'controller' => 'images', 'action' => 'index', 'prefix' => 'protected',
'protected' => true, 'url' => array('url' => 'protected/images/index')
))->addPaths(array(
'base' => '',
'here' => '/protected/images/index',
'webroot' => '/',
))
);
$result = Router::url(array('controller' => 'images', 'action' => 'add', 'admin' => true)); $result = Router::url(array('controller' => 'images', 'action' => 'add', 'admin' => true));
$expected = '/admin/images/add'; $expected = '/admin/images/add';
$this->assertEqual($result, $expected); $this->assertEqual($result, $expected);
Router::setRequestInfo(array( $request = new CakeRequest();
array('plugin' => null, 'controller' => 'images', 'action' => 'index', 'pass' => array(), 'prefix' => 'admin', 'admin' => true, 'form' => array(), 'url' => array('url' => 'admin/images/index')), Router::setRequestInfo(
array('base' => '', 'here' => '/admin/images/index', 'webroot' => '/') $request->addParams(array(
)); 'plugin' => null, 'controller' => 'images', 'action' => 'index', 'prefix' => 'admin',
'admin' => true, 'url' => array('url' => 'admin/images/index')
))->addPaths(array(
'base' => '',
'here' => '/admin/images/index',
'webroot' => '/',
))
);
$result = Router::url(array('controller' => 'images', 'action' => 'add', 'protected' => true)); $result = Router::url(array('controller' => 'images', 'action' => 'add', 'protected' => true));
$expected = '/protected/images/add'; $expected = '/protected/images/add';
$this->assertEqual($result, $expected); $this->assertEqual($result, $expected);
@ -1575,10 +1596,17 @@ class RouterTest extends CakeTestCase {
* @return void * @return void
*/ */
function testRemoveBase() { function testRemoveBase() {
Router::setRequestInfo(array( $request = new CakeRequest();
array('controller' => 'controller', 'action' => 'index', 'form' => array(), 'url' => array(), 'bare' => 0, 'plugin' => null), Router::setRequestInfo(
array('base' => '/base', 'here' => '/', 'webroot' => '/base/', 'passedArgs' => array(), 'argSeparator' => ':', 'namedArgs' => array()) $request->addParams(array(
)); 'plugin' => null, 'controller' => 'controller', 'action' => 'index',
'bare' => 0, 'url' => array('url' => 'protected/images/index')
))->addPaths(array(
'base' => '/base',
'here' => '/',
'webroot' => '/base/',
))
);
$result = Router::url(array('controller' => 'my_controller', 'action' => 'my_action')); $result = Router::url(array('controller' => 'my_controller', 'action' => 'my_action'));
$expected = '/base/my_controller/my_action'; $expected = '/base/my_controller/my_action';
@ -1688,10 +1716,16 @@ class RouterTest extends CakeTestCase {
Router::connect('/admin/:controller/:action', $adminParams); Router::connect('/admin/:controller/:action', $adminParams);
Router::connect('/admin/:controller/:action/*', $adminParams); Router::connect('/admin/:controller/:action/*', $adminParams);
Router::setRequestInfo(array( $request = new CakeRequest();
array('controller' => 'controller', 'action' => 'index', 'form' => array(), 'url' => array(), 'plugin' => null), Router::setRequestInfo(
array('base' => '/base', 'here' => '/', 'webroot' => '/base/', 'passedArgs' => array(), 'argSeparator' => ':', 'namedArgs' => array()) $request->addParams(array(
)); 'plugin' => null, 'controller' => 'controller', 'action' => 'index'
))->addPaths(array(
'base' => '/base',
'here' => '/',
'webroot' => '/base/',
))
);
$result = Router::parse('/admin/posts/'); $result = Router::parse('/admin/posts/');
$expected = array('pass' => array(), 'named' => array(), 'prefix' => 'admin', 'plugin' => null, 'controller' => 'posts', 'action' => 'index', 'admin' => true); $expected = array('pass' => array(), 'named' => array(), 'prefix' => 'admin', 'plugin' => null, 'controller' => 'posts', 'action' => 'index', 'admin' => true);
@ -1715,10 +1749,17 @@ class RouterTest extends CakeTestCase {
Router::connect('/members/:controller/:action', $prefixParams); Router::connect('/members/:controller/:action', $prefixParams);
Router::connect('/members/:controller/:action/*', $prefixParams); Router::connect('/members/:controller/:action/*', $prefixParams);
Router::setRequestInfo(array( $request = new CakeRequest();
array('controller' => 'controller', 'action' => 'index', 'form' => array(), 'url' => array(), 'plugin' => null), Router::setRequestInfo(
array('base' => '/base', 'here' => '/', 'webroot' => '/', 'passedArgs' => array(), 'argSeparator' => ':', 'namedArgs' => array()) $request->addParams(array(
)); 'plugin' => null, 'controller' => 'controller', 'action' => 'index',
'bare' => 0
))->addPaths(array(
'base' => '/base',
'here' => '/',
'webroot' => '/',
))
);
$result = Router::parse('/members/posts/index'); $result = Router::parse('/members/posts/index');
$expected = array('pass' => array(), 'named' => array(), 'prefix' => 'members', 'plugin' => null, 'controller' => 'posts', 'action' => 'index', 'members' => true); $expected = array('pass' => array(), 'named' => array(), 'prefix' => 'members', 'plugin' => null, 'controller' => 'posts', 'action' => 'index', 'members' => true);
@ -1751,10 +1792,17 @@ class RouterTest extends CakeTestCase {
$expected = '/company/users/login'; $expected = '/company/users/login';
$this->assertEqual($result, $expected); $this->assertEqual($result, $expected);
Router::setRequestInfo(array( $request = new CakeRequest();
array('controller' => 'users', 'action' => 'login', 'company' => true, 'form' => array(), 'url' => array(), 'plugin' => null), Router::setRequestInfo(
array('base' => '/', 'here' => '/', 'webroot' => '/base/') $request->addParams(array(
)); 'plugin' => null, 'controller' => 'users', 'action' => 'login',
'company' => true
))->addPaths(array(
'base' => '/',
'here' => '/',
'webroot' => '/base/',
))
);
$result = Router::url(array('controller' => 'users', 'action' => 'login', 'company' => false)); $result = Router::url(array('controller' => 'users', 'action' => 'login', 'company' => false));
$expected = '/login'; $expected = '/login';
@ -1771,12 +1819,17 @@ class RouterTest extends CakeTestCase {
'/admin/login', '/admin/login',
array('controller' => 'users', 'action' => 'login', 'prefix' => 'admin', 'admin' => true) array('controller' => 'users', 'action' => 'login', 'prefix' => 'admin', 'admin' => true)
); );
Router::setRequestInfo(array( $request = new CakeRequest();
array('controller' => 'posts', 'action' => 'index', 'admin' => true, 'prefix' => 'admin', Router::setRequestInfo(
'form' => array(), 'url' => array(), 'plugin' => null $request->addParams(array(
), 'plugin' => null, 'controller' => 'posts', 'action' => 'index',
array('base' => '/', 'here' => '/', 'webroot' => '/') 'admin' => true, 'prefix' => 'admin'
)); ))->addPaths(array(
'base' => '/',
'here' => '/',
'webroot' => '/',
))
);
$result = Router::url(array('controller' => 'users', 'action' => 'login', 'admin' => true)); $result = Router::url(array('controller' => 'users', 'action' => 'login', 'admin' => true));
$this->assertEqual($result, '/admin/login'); $this->assertEqual($result, '/admin/login');
@ -1814,10 +1867,17 @@ class RouterTest extends CakeTestCase {
Configure::write('Routing.prefixes', array('admin')); Configure::write('Routing.prefixes', array('admin'));
Router::reload(); Router::reload();
Router::setRequestInfo(array( $request = new CakeRequest();
array('plugin' => null, 'controller' => 'images', 'action' => 'index', 'pass' => array(), 'named' => array(), 'prefix' => 'protected', 'protected' => true, 'form' => array(), 'url' => array ('url' => 'protected/images/index')), Router::setRequestInfo(
array('plugin' => null, 'controller' => null, 'action' => null, 'base' => '', 'here' => '/protected/images/index', 'webroot' => '/') $request->addParams(array(
)); 'plugin' => null, 'controller' => 'images', 'action' => 'index',
'url' => array('url' => 'protected/images/index')
))->addPaths(array(
'base' => '',
'here' => '/protected/images/index',
'webroot' => '/',
))
);
Router::connect('/protected/:controller/:action/*', array( Router::connect('/protected/:controller/:action/*', array(
'controller' => 'users', 'controller' => 'users',
@ -1859,10 +1919,17 @@ class RouterTest extends CakeTestCase {
Router::reload(); Router::reload();
Router::connect('/:locale/:controller/:action/*', array(), array('locale' => 'dan|eng')); Router::connect('/:locale/:controller/:action/*', array(), array('locale' => 'dan|eng'));
Router::setRequestInfo(array( $request = new CakeRequest();
array('plugin' => null, 'controller' => 'test', 'action' => 'index', 'pass' => array(), 'form' => array(), 'url' => array ('url' => 'test/test_action')), Router::setRequestInfo(
array('plugin' => null, 'controller' => null, 'action' => null, 'base' => '', 'here' => '/test/test_action', 'webroot' => '/') $request->addParams(array(
)); 'plugin' => null, 'controller' => 'test', 'action' => 'index',
'url' => array('url' => 'test/test_action')
))->addPaths(array(
'base' => '',
'here' => '/test/test_action',
'webroot' => '/',
))
);
$result = Router::url(array('action' => 'test_another_action')); $result = Router::url(array('action' => 'test_another_action'));
$expected = '/test/test_another_action'; $expected = '/test/test_another_action';
@ -1902,7 +1969,7 @@ class RouterTest extends CakeTestCase {
$url = array('controller' => 'pages', 'action' => 'display', 'government'); $url = array('controller' => 'pages', 'action' => 'display', 'government');
Router::connect('/government', $url); Router::connect('/government', $url);
Router::parse('/government'); Router::parse('/government');
$route =& Router::currentRoute(); $route = Router::currentRoute();
$this->assertEqual(array_merge($url, array('plugin' => null)), $route->defaults); $this->assertEqual(array_merge($url, array('plugin' => null)), $route->defaults);
} }
/** /**
@ -1914,21 +1981,21 @@ class RouterTest extends CakeTestCase {
$url = array('controller' => 'products', 'action' => 'display', 5); $url = array('controller' => 'products', 'action' => 'display', 5);
Router::connect('/government', $url); Router::connect('/government', $url);
Router::parse('/government'); Router::parse('/government');
$route =& Router::requestRoute(); $route = Router::requestRoute();
$this->assertEqual(array_merge($url, array('plugin' => null)), $route->defaults); $this->assertEqual(array_merge($url, array('plugin' => null)), $route->defaults);
// test that the first route is matched // test that the first route is matched
$newUrl = array('controller' => 'products', 'action' => 'display', 6); $newUrl = array('controller' => 'products', 'action' => 'display', 6);
Router::connect('/government', $url); Router::connect('/government', $url);
Router::parse('/government'); Router::parse('/government');
$route =& Router::requestRoute(); $route = Router::requestRoute();
$this->assertEqual(array_merge($url, array('plugin' => null)), $route->defaults); $this->assertEqual(array_merge($url, array('plugin' => null)), $route->defaults);
// test that an unmatched route does not change the current route // test that an unmatched route does not change the current route
$newUrl = array('controller' => 'products', 'action' => 'display', 6); $newUrl = array('controller' => 'products', 'action' => 'display', 6);
Router::connect('/actor', $url); Router::connect('/actor', $url);
Router::parse('/government'); Router::parse('/government');
$route =& Router::requestRoute(); $route = Router::requestRoute();
$this->assertEqual(array_merge($url, array('plugin' => null)), $route->defaults); $this->assertEqual(array_merge($url, array('plugin' => null)), $route->defaults);
} }
/** /**
@ -2090,6 +2157,31 @@ class RouterTest extends CakeTestCase {
$result = Router::reverse($params); $result = Router::reverse($params);
$this->assertEqual($result, '/eng/posts/view/1?foo=bar&baz=quu'); $this->assertEqual($result, '/eng/posts/view/1?foo=bar&baz=quu');
} }
/**
* test that setRequestInfo can accept arrays and turn that into a CakeRequest object.
*
* @return void
*/
function testSetRequestInfoLegacy() {
Router::setRequestInfo(array(
array(
'plugin' => null, 'controller' => 'images', 'action' => 'index',
'url' => array('url' => 'protected/images/index')
),
array(
'base' => '',
'here' => '/protected/images/index',
'webroot' => '/',
)
));
$result = Router::getRequest();
$this->assertEqual($result->controller, 'images');
$this->assertEqual($result->action, 'index');
$this->assertEqual($result->base, '');
$this->assertEqual($result->here, '/protected/images/index');
$this->assertEqual($result->webroot, '/');
}
} }
/** /**
@ -2125,7 +2217,7 @@ class CakeRouteTestCase extends CakeTestCase {
* @return void * @return void
**/ **/
function testConstruction() { function testConstruction() {
$route =& new CakeRoute('/:controller/:action/:id', array(), array('id' => '[0-9]+')); $route = new CakeRoute('/:controller/:action/:id', array(), array('id' => '[0-9]+'));
$this->assertEqual($route->template, '/:controller/:action/:id'); $this->assertEqual($route->template, '/:controller/:action/:id');
$this->assertEqual($route->defaults, array()); $this->assertEqual($route->defaults, array());
@ -2139,13 +2231,13 @@ class CakeRouteTestCase extends CakeTestCase {
* @return void * @return void
**/ **/
function testBasicRouteCompiling() { function testBasicRouteCompiling() {
$route =& new CakeRoute('/', array('controller' => 'pages', 'action' => 'display', 'home')); $route = new CakeRoute('/', array('controller' => 'pages', 'action' => 'display', 'home'));
$result = $route->compile(); $result = $route->compile();
$expected = '#^/*$#'; $expected = '#^/*$#';
$this->assertEqual($result, $expected); $this->assertEqual($result, $expected);
$this->assertEqual($route->keys, array()); $this->assertEqual($route->keys, array());
$route =& new CakeRoute('/:controller/:action', array('controller' => 'posts')); $route = new CakeRoute('/:controller/:action', array('controller' => 'posts'));
$result = $route->compile(); $result = $route->compile();
$this->assertPattern($result, '/posts/edit'); $this->assertPattern($result, '/posts/edit');
@ -2153,7 +2245,7 @@ class CakeRouteTestCase extends CakeTestCase {
$this->assertNoPattern($result, '/posts'); $this->assertNoPattern($result, '/posts');
$this->assertNoPattern($result, '/posts/super_delete/1'); $this->assertNoPattern($result, '/posts/super_delete/1');
$route =& new CakeRoute('/posts/foo:id', array('controller' => 'posts', 'action' => 'view')); $route = new CakeRoute('/posts/foo:id', array('controller' => 'posts', 'action' => 'view'));
$result = $route->compile(); $result = $route->compile();
$this->assertPattern($result, '/posts/foo:1'); $this->assertPattern($result, '/posts/foo:1');
@ -2163,7 +2255,7 @@ class CakeRouteTestCase extends CakeTestCase {
$this->assertEqual($route->keys, array('id')); $this->assertEqual($route->keys, array('id'));
$route =& new CakeRoute('/:plugin/:controller/:action/*', array('plugin' => 'test_plugin', 'action' => 'index')); $route = new CakeRoute('/:plugin/:controller/:action/*', array('plugin' => 'test_plugin', 'action' => 'index'));
$result = $route->compile(); $result = $route->compile();
$this->assertPattern($result, '/test_plugin/posts/index'); $this->assertPattern($result, '/test_plugin/posts/index');
$this->assertPattern($result, '/test_plugin/posts/edit/5'); $this->assertPattern($result, '/test_plugin/posts/edit/5');
@ -2176,11 +2268,11 @@ class CakeRouteTestCase extends CakeTestCase {
* @return void * @return void
*/ */
function testRouteParameterOverlap() { function testRouteParameterOverlap() {
$route =& new CakeRoute('/invoices/add/:idd/:id', array('controller' => 'invoices', 'action' => 'add')); $route = new CakeRoute('/invoices/add/:idd/:id', array('controller' => 'invoices', 'action' => 'add'));
$result = $route->compile(); $result = $route->compile();
$this->assertPattern($result, '/invoices/add/1/3'); $this->assertPattern($result, '/invoices/add/1/3');
$route =& new CakeRoute('/invoices/add/:id/:idd', array('controller' => 'invoices', 'action' => 'add')); $route = new CakeRoute('/invoices/add/:id/:idd', array('controller' => 'invoices', 'action' => 'add'));
$result = $route->compile(); $result = $route->compile();
$this->assertPattern($result, '/invoices/add/1/3'); $this->assertPattern($result, '/invoices/add/1/3');
} }
@ -2205,7 +2297,7 @@ class CakeRouteTestCase extends CakeTestCase {
$this->assertNoPattern($result, '/posts/edit/4/other:param'); $this->assertNoPattern($result, '/posts/edit/4/other:param');
$this->assertEqual($route->keys, array('controller', 'action', 'id')); $this->assertEqual($route->keys, array('controller', 'action', 'id'));
$route =& new CakeRoute( $route = new CakeRoute(
'/:lang/:controller/:action/:id', '/:lang/:controller/:action/:id',
array('controller' => 'testing4'), array('controller' => 'testing4'),
array('id' => $ID, 'lang' => '[a-z]{3}') array('id' => $ID, 'lang' => '[a-z]{3}')
@ -2218,7 +2310,7 @@ class CakeRouteTestCase extends CakeTestCase {
$this->assertEqual($route->keys, array('lang', 'controller', 'action', 'id')); $this->assertEqual($route->keys, array('lang', 'controller', 'action', 'id'));
foreach (array(':', '@', ';', '$', '-') as $delim) { foreach (array(':', '@', ';', '$', '-') as $delim) {
$route =& new CakeRoute('/posts/:id' . $delim . ':title'); $route = new CakeRoute('/posts/:id' . $delim . ':title');
$result = $route->compile(); $result = $route->compile();
$this->assertPattern($result, '/posts/1' . $delim . 'name-of-article'); $this->assertPattern($result, '/posts/1' . $delim . 'name-of-article');
@ -2229,7 +2321,7 @@ class CakeRouteTestCase extends CakeTestCase {
$this->assertEqual($route->keys, array('id', 'title')); $this->assertEqual($route->keys, array('id', 'title'));
} }
$route =& new CakeRoute( $route = new CakeRoute(
'/posts/:id::title/:year', '/posts/:id::title/:year',
array('controller' => 'posts', 'action' => 'view'), array('controller' => 'posts', 'action' => 'view'),
array('id' => $ID, 'year' => $Year, 'title' => '[a-z-_]+') array('id' => $ID, 'year' => $Year, 'title' => '[a-z-_]+')
@ -2242,7 +2334,7 @@ class CakeRouteTestCase extends CakeTestCase {
$this->assertNoPattern($result, '/posts/:nameofarticle/01'); $this->assertNoPattern($result, '/posts/:nameofarticle/01');
$this->assertEqual($route->keys, array('id', 'title', 'year')); $this->assertEqual($route->keys, array('id', 'title', 'year'));
$route =& new CakeRoute( $route = new CakeRoute(
'/posts/:url_title-(uuid::id)', '/posts/:url_title-(uuid::id)',
array('controller' => 'posts', 'action' => 'view'), array('controller' => 'posts', 'action' => 'view'),
array('pass' => array('id', 'url_title'), 'id' => $ID) array('pass' => array('id', 'url_title'), 'id' => $ID)
@ -2265,7 +2357,7 @@ class CakeRouteTestCase extends CakeTestCase {
function testComplexRouteCompilingAndParsing() { function testComplexRouteCompilingAndParsing() {
extract(Router::getNamedExpressions()); extract(Router::getNamedExpressions());
$route =& new CakeRoute( $route = new CakeRoute(
'/posts/:month/:day/:year/*', '/posts/:month/:day/:year/*',
array('controller' => 'posts', 'action' => 'view'), array('controller' => 'posts', 'action' => 'view'),
array('year' => $Year, 'month' => $Month, 'day' => $Day) array('year' => $Year, 'month' => $Month, 'day' => $Day)
@ -2281,7 +2373,7 @@ class CakeRouteTestCase extends CakeTestCase {
$this->assertEqual($result['month'], '08'); $this->assertEqual($result['month'], '08');
$this->assertEqual($result['day'], '01'); $this->assertEqual($result['day'], '01');
$route =& new CakeRoute( $route = new CakeRoute(
"/:extra/page/:slug/*", "/:extra/page/:slug/*",
array('controller' => 'pages', 'action' => 'view', 'extra' => null), array('controller' => 'pages', 'action' => 'view', 'extra' => null),
array("extra" => '[a-z1-9_]*', "slug" => '[a-z1-9_]+', "action" => 'view') array("extra" => '[a-z1-9_]*', "slug" => '[a-z1-9_]+', "action" => 'view')
@ -2299,7 +2391,7 @@ class CakeRouteTestCase extends CakeTestCase {
); );
$this->assertEqual($route->defaults, $expected); $this->assertEqual($route->defaults, $expected);
$route =& new CakeRoute( $route = new CakeRoute(
'/:controller/:action/*', '/:controller/:action/*',
array('project' => false), array('project' => false),
array( array(
@ -2333,7 +2425,7 @@ class CakeRouteTestCase extends CakeTestCase {
$result = $route->match(array('plugin' => null, 'controller' => 'posts', 'action' => 'view', 'id' => 1)); $result = $route->match(array('plugin' => null, 'controller' => 'posts', 'action' => 'view', 'id' => 1));
$this->assertEqual($result, '/posts/view/1'); $this->assertEqual($result, '/posts/view/1');
$route =& new CakeRoute('/', array('controller' => 'pages', 'action' => 'display', 'home')); $route = new CakeRoute('/', array('controller' => 'pages', 'action' => 'display', 'home'));
$result = $route->match(array('controller' => 'pages', 'action' => 'display', 'home')); $result = $route->match(array('controller' => 'pages', 'action' => 'display', 'home'));
$this->assertEqual($result, '/'); $this->assertEqual($result, '/');
@ -2341,7 +2433,7 @@ class CakeRouteTestCase extends CakeTestCase {
$this->assertFalse($result); $this->assertFalse($result);
$route =& new CakeRoute('/pages/*', array('controller' => 'pages', 'action' => 'display')); $route = new CakeRoute('/pages/*', array('controller' => 'pages', 'action' => 'display'));
$result = $route->match(array('controller' => 'pages', 'action' => 'display', 'home')); $result = $route->match(array('controller' => 'pages', 'action' => 'display', 'home'));
$this->assertEqual($result, '/pages/home'); $this->assertEqual($result, '/pages/home');
@ -2349,7 +2441,7 @@ class CakeRouteTestCase extends CakeTestCase {
$this->assertEqual($result, '/pages/about'); $this->assertEqual($result, '/pages/about');
$route =& new CakeRoute('/blog/:action', array('controller' => 'posts')); $route = new CakeRoute('/blog/:action', array('controller' => 'posts'));
$result = $route->match(array('controller' => 'posts', 'action' => 'view')); $result = $route->match(array('controller' => 'posts', 'action' => 'view'));
$this->assertEqual($result, '/blog/view'); $this->assertEqual($result, '/blog/view');
@ -2363,12 +2455,12 @@ class CakeRouteTestCase extends CakeTestCase {
$this->assertFalse($result); $this->assertFalse($result);
$route =& new CakeRoute('/foo/:controller/:action', array('action' => 'index')); $route = new CakeRoute('/foo/:controller/:action', array('action' => 'index'));
$result = $route->match(array('controller' => 'posts', 'action' => 'view')); $result = $route->match(array('controller' => 'posts', 'action' => 'view'));
$this->assertEqual($result, '/foo/posts/view'); $this->assertEqual($result, '/foo/posts/view');
$route =& new CakeRoute('/:plugin/:id/*', array('controller' => 'posts', 'action' => 'view')); $route = new CakeRoute('/:plugin/:id/*', array('controller' => 'posts', 'action' => 'view'));
$result = $route->match(array('plugin' => 'test', 'controller' => 'posts', 'action' => 'view', 'id' => '1')); $result = $route->match(array('plugin' => 'test', 'controller' => 'posts', 'action' => 'view', 'id' => '1'));
$this->assertEqual($result, '/test/1/'); $this->assertEqual($result, '/test/1/');
@ -2382,7 +2474,7 @@ class CakeRouteTestCase extends CakeTestCase {
$this->assertFalse($result); $this->assertFalse($result);
$route =& new CakeRoute('/admin/subscriptions/:action/*', array( $route = new CakeRoute('/admin/subscriptions/:action/*', array(
'controller' => 'subscribe', 'admin' => true, 'prefix' => 'admin' 'controller' => 'subscribe', 'admin' => true, 'prefix' => 'admin'
)); ));
@ -2411,7 +2503,7 @@ class CakeRouteTestCase extends CakeTestCase {
$this->assertEqual($result, '/posts/view/5/page:1/limit:20/order:title'); $this->assertEqual($result, '/posts/view/5/page:1/limit:20/order:title');
$route =& new CakeRoute('/test2/*', array('controller' => 'pages', 'action' => 'display', 2)); $route = new CakeRoute('/test2/*', array('controller' => 'pages', 'action' => 'display', 2));
$result = $route->match(array('controller' => 'pages', 'action' => 'display', 1)); $result = $route->match(array('controller' => 'pages', 'action' => 'display', 1));
$this->assertFalse($result); $this->assertFalse($result);
@ -2428,7 +2520,7 @@ class CakeRouteTestCase extends CakeTestCase {
* @return void * @return void
*/ */
function testMatchWithPatterns() { function testMatchWithPatterns() {
$route =& new CakeRoute('/:controller/:action/:id', array('plugin' => null), array('id' => '[0-9]+')); $route = new CakeRoute('/:controller/:action/:id', array('plugin' => null), array('id' => '[0-9]+'));
$result = $route->match(array('controller' => 'posts', 'action' => 'view', 'id' => 'foo')); $result = $route->match(array('controller' => 'posts', 'action' => 'view', 'id' => 'foo'));
$this->assertFalse($result); $this->assertFalse($result);
@ -2448,7 +2540,7 @@ class CakeRouteTestCase extends CakeTestCase {
* @return void * @return void
*/ */
function testPersistParams() { function testPersistParams() {
$route =& new CakeRoute( $route = new CakeRoute(
'/:lang/:color/blog/:action', '/:lang/:color/blog/:action',
array('controller' => 'posts'), array('controller' => 'posts'),
array('persist' => array('lang', 'color')) array('persist' => array('lang', 'color'))
@ -2473,14 +2565,14 @@ class CakeRouteTestCase extends CakeTestCase {
*/ */
function testParse() { function testParse() {
extract(Router::getNamedExpressions()); extract(Router::getNamedExpressions());
$route =& new CakeRoute('/:controller/:action/:id', array('controller' => 'testing4', 'id' => null), array('id' => $ID)); $route = new CakeRoute('/:controller/:action/:id', array('controller' => 'testing4', 'id' => null), array('id' => $ID));
$route->compile(); $route->compile();
$result = $route->parse('/posts/view/1'); $result = $route->parse('/posts/view/1');
$this->assertEqual($result['controller'], 'posts'); $this->assertEqual($result['controller'], 'posts');
$this->assertEqual($result['action'], 'view'); $this->assertEqual($result['action'], 'view');
$this->assertEqual($result['id'], '1'); $this->assertEqual($result['id'], '1');
$route =& new Cakeroute( $route = new Cakeroute(
'/admin/:controller', '/admin/:controller',
array('prefix' => 'admin', 'admin' => 1, 'action' => 'index') array('prefix' => 'admin', 'admin' => 1, 'action' => 'index')
); );
@ -2527,7 +2619,7 @@ class PluginShortRouteTestCase extends CakeTestCase {
* @return void * @return void
*/ */
function testParsing() { function testParsing() {
$route =& new PluginShortRoute('/:plugin', array('action' => 'index'), array('plugin' => 'foo|bar')); $route = new PluginShortRoute('/:plugin', array('action' => 'index'), array('plugin' => 'foo|bar'));
$result = $route->parse('/foo'); $result = $route->parse('/foo');
$this->assertEqual($result['plugin'], 'foo'); $this->assertEqual($result['plugin'], 'foo');
@ -2544,7 +2636,7 @@ class PluginShortRouteTestCase extends CakeTestCase {
* @return void * @return void
*/ */
function testMatch() { function testMatch() {
$route =& new PluginShortRoute('/:plugin', array('action' => 'index'), array('plugin' => 'foo|bar')); $route = new PluginShortRoute('/:plugin', array('action' => 'index'), array('plugin' => 'foo|bar'));
$result = $route->match(array('plugin' => 'foo', 'controller' => 'posts', 'action' => 'index')); $result = $route->match(array('plugin' => 'foo', 'controller' => 'posts', 'action' => 'index'));
$this->assertFalse($result, 'plugin controller mismatch was converted. %s'); $this->assertFalse($result, 'plugin controller mismatch was converted. %s');