mirror of
				https://github.com/brmlab/brmsklad.git
				synced 2025-10-31 00:03:58 +01:00 
			
		
		
		
	Upgrade CakePHP from 2.2.5 to 2.9.5
This commit is contained in:
		
							parent
							
								
									5a580df460
								
							
						
					
					
						commit
						235a541597
					
				
					 793 changed files with 60746 additions and 23753 deletions
				
			
		|  | @ -2,21 +2,22 @@ | |||
| /** | ||||
|  * DispatcherTest file | ||||
|  * | ||||
|  * PHP 5 | ||||
|  * | ||||
|  * CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html> | ||||
|  * Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org) | ||||
|  * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) | ||||
|  * | ||||
|  * Licensed under The MIT License | ||||
|  * For full copyright and license information, please see the LICENSE.txt | ||||
|  * Redistributions of files must retain the above copyright notice | ||||
|  * | ||||
|  * @copyright     Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org) | ||||
|  * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) | ||||
|  * @link          http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests | ||||
|  * @package       Cake.Test.Case.Routing | ||||
|  * @since         CakePHP(tm) v 1.2.0.4206 | ||||
|  * @license       MIT License (http://www.opensource.org/licenses/mit-license.php) | ||||
|  * @license       http://www.opensource.org/licenses/mit-license.php MIT License | ||||
|  */ | ||||
| 
 | ||||
| App::uses('Dispatcher', 'Routing'); | ||||
| App::uses('DispatcherFilter', 'Routing'); | ||||
| 
 | ||||
| if (!class_exists('AppController', false)) { | ||||
| 	require_once CAKE . 'Test' . DS . 'test_app' . DS . 'Controller' . DS . 'AppController.php'; | ||||
|  | @ -56,12 +57,11 @@ class TestDispatcher extends Dispatcher { | |||
|  * | ||||
|  * @param Controller $controller | ||||
|  * @param CakeRequest $request | ||||
|  * @param CakeResponse $response | ||||
|  * @return void | ||||
|  * @return CakeResponse | ||||
|  */ | ||||
| 	protected function _invoke(Controller $controller, CakeRequest $request, CakeResponse $response) { | ||||
| 	protected function _invoke(Controller $controller, CakeRequest $request) { | ||||
| 		$this->controller = $controller; | ||||
| 		return parent::_invoke($controller, $request, $response); | ||||
| 		return parent::_invoke($controller, $request); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  | @ -95,12 +95,18 @@ class TestDispatcher extends Dispatcher { | |||
| class MyPluginAppController extends AppController { | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * Abstract Class DispatcherTestAbstractController | ||||
|  */ | ||||
| abstract class DispatcherTestAbstractController extends Controller { | ||||
| 
 | ||||
| 	abstract public function index(); | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * Interface DispatcherTestInterfaceController | ||||
|  */ | ||||
| interface DispatcherTestInterfaceController { | ||||
| 
 | ||||
| 	public function index(); | ||||
|  | @ -114,13 +120,6 @@ interface DispatcherTestInterfaceController { | |||
|  */ | ||||
| class MyPluginController extends MyPluginAppController { | ||||
| 
 | ||||
| /** | ||||
|  * name property | ||||
|  * | ||||
|  * @var string 'MyPlugin' | ||||
|  */ | ||||
| 	public $name = 'MyPlugin'; | ||||
| 
 | ||||
| /** | ||||
|  * uses property | ||||
|  * | ||||
|  | @ -165,13 +164,6 @@ class MyPluginController extends MyPluginAppController { | |||
|  */ | ||||
| class SomePagesController extends AppController { | ||||
| 
 | ||||
| /** | ||||
|  * name property | ||||
|  * | ||||
|  * @var string 'SomePages' | ||||
|  */ | ||||
| 	public $name = 'SomePages'; | ||||
| 
 | ||||
| /** | ||||
|  * uses property | ||||
|  * | ||||
|  | @ -207,6 +199,16 @@ class SomePagesController extends AppController { | |||
| 		return new CakeResponse(array('body' => 'new response')); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * Test file sending | ||||
|  * | ||||
|  * @return CakeResponse | ||||
|  */ | ||||
| 	public function sendfile() { | ||||
| 		$this->response->file(CAKE . 'Test' . DS . 'test_app' . DS . 'Vendor' . DS . 'css' . DS . 'test_asset.css'); | ||||
| 		return $this->response; | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  | @ -216,13 +218,6 @@ class SomePagesController extends AppController { | |||
|  */ | ||||
| class OtherPagesController extends MyPluginAppController { | ||||
| 
 | ||||
| /** | ||||
|  * name property | ||||
|  * | ||||
|  * @var string 'OtherPages' | ||||
|  */ | ||||
| 	public $name = 'OtherPages'; | ||||
| 
 | ||||
| /** | ||||
|  * uses property | ||||
|  * | ||||
|  | @ -258,13 +253,6 @@ class OtherPagesController extends MyPluginAppController { | |||
|  */ | ||||
| class TestDispatchPagesController extends AppController { | ||||
| 
 | ||||
| /** | ||||
|  * name property | ||||
|  * | ||||
|  * @var string 'TestDispatchPages' | ||||
|  */ | ||||
| 	public $name = 'TestDispatchPages'; | ||||
| 
 | ||||
| /** | ||||
|  * uses property | ||||
|  * | ||||
|  | @ -307,13 +295,6 @@ class ArticlesTestAppController extends AppController { | |||
|  */ | ||||
| class ArticlesTestController extends ArticlesTestAppController { | ||||
| 
 | ||||
| /** | ||||
|  * name property | ||||
|  * | ||||
|  * @var string 'ArticlesTest' | ||||
|  */ | ||||
| 	public $name = 'ArticlesTest'; | ||||
| 
 | ||||
| /** | ||||
|  * uses property | ||||
|  * | ||||
|  | @ -348,13 +329,6 @@ class ArticlesTestController extends ArticlesTestAppController { | |||
|  */ | ||||
| class SomePostsController extends AppController { | ||||
| 
 | ||||
| /** | ||||
|  * name property | ||||
|  * | ||||
|  * @var string 'SomePosts' | ||||
|  */ | ||||
| 	public $name = 'SomePosts'; | ||||
| 
 | ||||
| /** | ||||
|  * uses property | ||||
|  * | ||||
|  | @ -365,7 +339,7 @@ class SomePostsController extends AppController { | |||
| /** | ||||
|  * autoRender property | ||||
|  * | ||||
|  * @var bool false | ||||
|  * @var bool | ||||
|  */ | ||||
| 	public $autoRender = false; | ||||
| 
 | ||||
|  | @ -375,7 +349,7 @@ class SomePostsController extends AppController { | |||
|  * @return void | ||||
|  */ | ||||
| 	public function beforeFilter() { | ||||
| 		if ($this->params['action'] == 'index') { | ||||
| 		if ($this->params['action'] === 'index') { | ||||
| 			$this->params['action'] = 'view'; | ||||
| 		} else { | ||||
| 			$this->params['action'] = 'change'; | ||||
|  | @ -410,13 +384,6 @@ class SomePostsController extends AppController { | |||
|  */ | ||||
| class TestCachedPagesController extends Controller { | ||||
| 
 | ||||
| /** | ||||
|  * name property | ||||
|  * | ||||
|  * @var string 'TestCachedPages' | ||||
|  */ | ||||
| 	public $name = 'TestCachedPages'; | ||||
| 
 | ||||
| /** | ||||
|  * uses property | ||||
|  * | ||||
|  | @ -452,7 +419,7 @@ class TestCachedPagesController extends Controller { | |||
| /** | ||||
|  * viewPath property | ||||
|  * | ||||
|  * @var string 'posts' | ||||
|  * @var string | ||||
|  */ | ||||
| 	public $viewPath = 'Posts'; | ||||
| 
 | ||||
|  | @ -495,6 +462,8 @@ class TestCachedPagesController extends Controller { | |||
| 
 | ||||
| /** | ||||
|  * Test cached views with themes. | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function themed() { | ||||
| 		$this->cacheAction = 10; | ||||
|  | @ -511,13 +480,6 @@ class TestCachedPagesController extends Controller { | |||
|  */ | ||||
| class TimesheetsController extends Controller { | ||||
| 
 | ||||
| /** | ||||
|  * name property | ||||
|  * | ||||
|  * @var string 'Timesheets' | ||||
|  */ | ||||
| 	public $name = 'Timesheets'; | ||||
| 
 | ||||
| /** | ||||
|  * uses property | ||||
|  * | ||||
|  | @ -536,6 +498,39 @@ class TimesheetsController extends Controller { | |||
| 
 | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * TestFilterDispatcher class | ||||
|  * | ||||
|  * @package       Cake.Test.Case.Routing | ||||
|  */ | ||||
| class TestFilterDispatcher extends DispatcherFilter { | ||||
| 
 | ||||
| 	public $priority = 10; | ||||
| 
 | ||||
| /** | ||||
|  * TestFilterDispatcher::beforeDispatch() | ||||
|  * | ||||
|  * @param mixed $event | ||||
|  * @return CakeResponse|bool | ||||
|  */ | ||||
| 	public function beforeDispatch(CakeEvent $event) { | ||||
| 		$event->stopPropagation(); | ||||
| 		$response = $event->data['request']; | ||||
| 		$response->addParams(array('settings' => $this->settings)); | ||||
| 		return null; | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * TestFilterDispatcher::afterDispatch() | ||||
|  * | ||||
|  * @param mixed $event | ||||
|  * @return mixed boolean to stop the event dispatching or null to continue | ||||
|  */ | ||||
| 	public function afterDispatch(CakeEvent $event) { | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * DispatcherTest class | ||||
|  * | ||||
|  | @ -549,6 +544,7 @@ class DispatcherTest extends CakeTestCase { | |||
|  * @return void | ||||
|  */ | ||||
| 	public function setUp() { | ||||
| 		parent::setUp(); | ||||
| 		$this->_get = $_GET; | ||||
| 		$_GET = array(); | ||||
| 		$this->_post = $_POST; | ||||
|  | @ -576,6 +572,7 @@ class DispatcherTest extends CakeTestCase { | |||
|  * @return void | ||||
|  */ | ||||
| 	public function tearDown() { | ||||
| 		parent::tearDown(); | ||||
| 		$_GET = $this->_get; | ||||
| 		$_POST = $this->_post; | ||||
| 		$_FILES = $this->_files; | ||||
|  | @ -592,6 +589,7 @@ class DispatcherTest extends CakeTestCase { | |||
|  * testParseParamsWithoutZerosAndEmptyPost method | ||||
|  * | ||||
|  * @return void | ||||
|  * @triggers DispatcherTest $Dispatcher, array('request' => $request) | ||||
|  */ | ||||
| 	public function testParseParamsWithoutZerosAndEmptyPost() { | ||||
| 		$Dispatcher = new Dispatcher(); | ||||
|  | @ -610,6 +608,7 @@ class DispatcherTest extends CakeTestCase { | |||
|  * testParseParamsReturnsPostedData method | ||||
|  * | ||||
|  * @return void | ||||
|  * @triggers DispatcherTest $Dispatcher, array('request' => $request) | ||||
|  */ | ||||
| 	public function testParseParamsReturnsPostedData() { | ||||
| 		$_POST['testdata'] = "My Posted Content"; | ||||
|  | @ -617,7 +616,7 @@ class DispatcherTest extends CakeTestCase { | |||
| 		$request = new CakeRequest("/"); | ||||
| 		$event = new CakeEvent('DispatcherTest', $Dispatcher, array('request' => $request)); | ||||
| 		$Dispatcher->parseParams($event); | ||||
| 		$test = $Dispatcher->parseParams($event); | ||||
| 		$Dispatcher->parseParams($event); | ||||
| 		$this->assertEquals("My Posted Content", $request['data']['testdata']); | ||||
| 	} | ||||
| 
 | ||||
|  | @ -625,6 +624,7 @@ class DispatcherTest extends CakeTestCase { | |||
|  * testParseParamsWithSingleZero method | ||||
|  * | ||||
|  * @return void | ||||
|  * @triggers DispatcherTest $Dispatcher, array('request' => $test) | ||||
|  */ | ||||
| 	public function testParseParamsWithSingleZero() { | ||||
| 		$Dispatcher = new Dispatcher(); | ||||
|  | @ -643,6 +643,7 @@ class DispatcherTest extends CakeTestCase { | |||
|  * testParseParamsWithManySingleZeros method | ||||
|  * | ||||
|  * @return void | ||||
|  * @triggers DispatcherTest $Dispatcher, array('request' => $test) | ||||
|  */ | ||||
| 	public function testParseParamsWithManySingleZeros() { | ||||
| 		$Dispatcher = new Dispatcher(); | ||||
|  | @ -662,6 +663,7 @@ class DispatcherTest extends CakeTestCase { | |||
|  * testParseParamsWithManyZerosInEachSectionOfUrl method | ||||
|  * | ||||
|  * @return void | ||||
|  * @triggers DispatcherTest $Dispatcher, array('request' => $test) | ||||
|  */ | ||||
| 	public function testParseParamsWithManyZerosInEachSectionOfUrl() { | ||||
| 		$Dispatcher = new Dispatcher(); | ||||
|  | @ -681,6 +683,7 @@ class DispatcherTest extends CakeTestCase { | |||
|  * testParseParamsWithMixedOneToManyZerosInEachSectionOfUrl method | ||||
|  * | ||||
|  * @return void | ||||
|  * @triggers DispatcherTest $Dispatcher, array('request' => $test) | ||||
|  */ | ||||
| 	public function testParseParamsWithMixedOneToManyZerosInEachSectionOfUrl() { | ||||
| 		$Dispatcher = new Dispatcher(); | ||||
|  | @ -700,6 +703,8 @@ class DispatcherTest extends CakeTestCase { | |||
|  * testQueryStringOnRoot method | ||||
|  * | ||||
|  * @return void | ||||
|  * @triggers DispatcherTest $Dispatcher, array('request' => $request) | ||||
|  * @triggers DispatcherTest $Dispatcher, array('request' => $request) | ||||
|  */ | ||||
| 	public function testQueryStringOnRoot() { | ||||
| 		Router::reload(); | ||||
|  | @ -865,6 +870,40 @@ class DispatcherTest extends CakeTestCase { | |||
| 		$this->assertEquals('new response', $result); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * testDispatchActionSendsFile | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testDispatchActionSendsFile() { | ||||
| 		Router::connect('/:controller/:action'); | ||||
| 		$Dispatcher = new Dispatcher(); | ||||
| 		$request = new CakeRequest('some_pages/sendfile'); | ||||
| 		$response = $this->getMock('CakeResponse', array( | ||||
| 			'header', | ||||
| 			'type', | ||||
| 			'download', | ||||
| 			'_sendHeader', | ||||
| 			'_setContentType', | ||||
| 			'_isActive', | ||||
| 			'_clearBuffer', | ||||
| 			'_flushBuffer' | ||||
| 		)); | ||||
| 
 | ||||
| 		$response->expects($this->never()) | ||||
| 			->method('body'); | ||||
| 
 | ||||
| 		$response->expects($this->exactly(1)) | ||||
| 			->method('_isActive') | ||||
| 			->will($this->returnValue(true)); | ||||
| 
 | ||||
| 		ob_start(); | ||||
| 		$Dispatcher->dispatch($request, $response); | ||||
| 		$result = ob_get_clean(); | ||||
| 
 | ||||
| 		$this->assertEquals("/* this is the test asset css file */\n", $result); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * testAdminDispatch method | ||||
|  * | ||||
|  | @ -874,7 +913,7 @@ class DispatcherTest extends CakeTestCase { | |||
| 		$_POST = array(); | ||||
| 		$Dispatcher = new TestDispatcher(); | ||||
| 		Configure::write('Routing.prefixes', array('admin')); | ||||
| 		Configure::write('App.baseUrl','/cake/repo/branches/1.2.x.x/index.php'); | ||||
| 		Configure::write('App.baseUrl', '/cake/repo/branches/1.2.x.x/index.php'); | ||||
| 		$url = new CakeRequest('admin/test_dispatch_pages/index/param:value/param2:value2'); | ||||
| 		$response = $this->getMock('CakeResponse'); | ||||
| 
 | ||||
|  | @ -897,6 +936,7 @@ class DispatcherTest extends CakeTestCase { | |||
|  * testPluginDispatch method | ||||
|  * | ||||
|  * @return void | ||||
|  * @triggers DispatcherTest $Dispatcher, array('request' => $url) | ||||
|  */ | ||||
| 	public function testPluginDispatch() { | ||||
| 		$_POST = array(); | ||||
|  | @ -1083,7 +1123,7 @@ class DispatcherTest extends CakeTestCase { | |||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * test plugin shortcut urls with controllers that need to be loaded, | ||||
|  * test plugin shortcut URLs with controllers that need to be loaded, | ||||
|  * the above test uses a controller that has already been included. | ||||
|  * | ||||
|  * @return void | ||||
|  | @ -1195,7 +1235,7 @@ class DispatcherTest extends CakeTestCase { | |||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testDispatcherFilterSuscriber() { | ||||
| 	public function testDispatcherFilterSubscriber() { | ||||
| 		App::build(array( | ||||
| 			'View' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'View' . DS), | ||||
| 			'Plugin' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS) | ||||
|  | @ -1229,6 +1269,23 @@ class DispatcherTest extends CakeTestCase { | |||
| 		$this->assertNull($dispatcher->controller); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * Tests that it is possible to attach filter with config classes to the dispatch cycle | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testDispatcherFilterSettings() { | ||||
| 		Configure::write('Dispatcher.filters', array( | ||||
| 			'TestFilterDispatcher' => array('service' => 'google.com') | ||||
| 		)); | ||||
| 		$Dispatcher = new Dispatcher(); | ||||
| 		$url = new CakeRequest('some_pages/index'); | ||||
| 		$response = $this->getMock('CakeResponse'); | ||||
| 		$Dispatcher->dispatch($url, $response, array('return' => 1)); | ||||
| 		$settings = $url->param('settings'); | ||||
| 		$this->assertEquals($settings, array('service' => 'google.com')); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * Tests that attaching an inexistent class as filter will throw an exception | ||||
|  * | ||||
|  | @ -1280,6 +1337,16 @@ class DispatcherTest extends CakeTestCase { | |||
| 		$dispatcher->dispatch($request, $response); | ||||
| 		$this->assertEquals('Dispatcher.afterDispatch', $request->params['eventName']); | ||||
| 
 | ||||
| 		$dispatcher = new TestDispatcher(); | ||||
| 		Configure::write('Dispatcher.filters', array( | ||||
| 			'filterTest' => array('callable' => array($dispatcher, 'filterTest'), 'on' => 'before') | ||||
| 		)); | ||||
| 
 | ||||
| 		$request = new CakeRequest('/'); | ||||
| 		$response = $this->getMock('CakeResponse', array('send')); | ||||
| 		$dispatcher->dispatch($request, $response); | ||||
| 		$this->assertEquals('Dispatcher.beforeDispatch', $request->params['eventName']); | ||||
| 
 | ||||
| 		// Test that it is possible to skip the route connection process
 | ||||
| 		$dispatcher = new TestDispatcher(); | ||||
| 		Configure::write('Dispatcher.filters', array( | ||||
|  | @ -1582,6 +1649,11 @@ class DispatcherTest extends CakeTestCase { | |||
|  * testHttpMethodOverrides method | ||||
|  * | ||||
|  * @return void | ||||
|  * @triggers DispatcherTest $dispatcher, array('request' => $request) | ||||
|  * @triggers DispatcherTest $dispatcher, array('request' => $request) | ||||
|  * @triggers DispatcherTest $dispatcher, array('request' => $request) | ||||
|  * @triggers DispatcherTest $dispatcher, array('request' => $request) | ||||
|  * @triggers DispatcherTest $dispatcher, array('request' => $request) | ||||
|  */ | ||||
| 	public function testHttpMethodOverrides() { | ||||
| 		Router::reload(); | ||||
|  | @ -1665,7 +1737,7 @@ class DispatcherTest extends CakeTestCase { | |||
|  */ | ||||
| 	protected function _cachePath($here) { | ||||
| 		$path = $here; | ||||
| 		if ($here == '/') { | ||||
| 		if ($here === '/') { | ||||
| 			$path = 'home'; | ||||
| 		} | ||||
| 		$path = strtolower(Inflector::slug($path)); | ||||
|  |  | |||
|  | @ -1,22 +1,28 @@ | |||
| <?php | ||||
| /** | ||||
|  * CakePHP(tm) Tests <http://book.cakephp.org/view/1196/Testing> | ||||
|  * Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org) | ||||
|  * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) | ||||
|  * | ||||
|  * Licensed under The Open Group Test Suite License | ||||
|  * Licensed under The MIT License | ||||
|  * For full copyright and license information, please see the LICENSE.txt | ||||
|  * Redistributions of files must retain the above copyright notice. | ||||
|  * | ||||
|  * @copyright     Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org) | ||||
|  * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) | ||||
|  * @link          http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests | ||||
|  * @package       Cake.Test.Case.Routing.Filter | ||||
|  * @since         CakePHP(tm) v 2.2 | ||||
|  * @license       MIT License (http://www.opensource.org/licenses/mit-license.php) | ||||
|  * @license       http://www.opensource.org/licenses/mit-license.php MIT License | ||||
|  */ | ||||
| 
 | ||||
| App::uses('AssetDispatcher', 'Routing/Filter'); | ||||
| App::uses('CakeEvent', 'Event'); | ||||
| App::uses('CakeResponse', 'Network'); | ||||
| 
 | ||||
| /** | ||||
|  * AssetDispatcherTest | ||||
|  * | ||||
|  * @package       Cake.Test.Case.Routing.Filter | ||||
|  */ | ||||
| class AssetDispatcherTest extends CakeTestCase { | ||||
| 
 | ||||
| /** | ||||
|  | @ -25,6 +31,7 @@ class AssetDispatcherTest extends CakeTestCase { | |||
|  * @return void | ||||
|  */ | ||||
| 	public function tearDown() { | ||||
| 		parent::tearDown(); | ||||
| 		Configure::write('Dispatcher.filters', array()); | ||||
| 	} | ||||
| 
 | ||||
|  | @ -32,6 +39,12 @@ class AssetDispatcherTest extends CakeTestCase { | |||
|  * test that asset filters work for theme and plugin assets | ||||
|  * | ||||
|  * @return void | ||||
|  * @triggers DispatcherTest $this, compact('request', 'response') | ||||
|  * @triggers DispatcherTest $this, compact('request', 'response') | ||||
|  * @triggers DispatcherTest $this, compact('request', 'response') | ||||
|  * @triggers DispatcherTest $this, compact('request', 'response') | ||||
|  * @triggers DispatcherTest $this, compact('request', 'response') | ||||
|  * @triggers DispatcherTest $this, compact('request', 'response') | ||||
|  */ | ||||
| 	public function testAssetFilterForThemeAndPlugins() { | ||||
| 		$filter = new AssetDispatcher(); | ||||
|  | @ -43,7 +56,7 @@ class AssetDispatcherTest extends CakeTestCase { | |||
| 		App::build(array( | ||||
| 			'Plugin' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS), | ||||
| 			'View' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'View' . DS) | ||||
| 		), APP::RESET); | ||||
| 		), App::RESET); | ||||
| 
 | ||||
| 		$request = new CakeRequest('theme/test_theme/ccss/cake.generic.css'); | ||||
| 		$event = new CakeEvent('DispatcherTest', $this, compact('request', 'response')); | ||||
|  | @ -76,11 +89,41 @@ class AssetDispatcherTest extends CakeTestCase { | |||
| 		$this->assertFalse($event->isStopped()); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * AssetDispatcher should not 404 extensions that could be handled | ||||
|  * by Routing. | ||||
|  * | ||||
|  * @return void | ||||
|  * @triggers DispatcherTest $this, compact('request', 'response') | ||||
|  */ | ||||
| 	public function testNoHandleRoutedExtension() { | ||||
| 		$filter = new AssetDispatcher(); | ||||
| 		$response = $this->getMock('CakeResponse', array('_sendHeader')); | ||||
| 		Configure::write('Asset.filter', array( | ||||
| 			'js' => '', | ||||
| 			'css' => '' | ||||
| 		)); | ||||
| 		App::build(array( | ||||
| 			'Plugin' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS), | ||||
| 			'View' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'View' . DS) | ||||
| 		), App::RESET); | ||||
| 		Router::parseExtensions('json'); | ||||
| 		Router::connect('/test_plugin/api/v1/:action', array('controller' => 'api')); | ||||
| 		CakePlugin::load('TestPlugin'); | ||||
| 
 | ||||
| 		$request = new CakeRequest('test_plugin/api/v1/forwarding.json'); | ||||
| 		$event = new CakeEvent('DispatcherTest', $this, compact('request', 'response')); | ||||
| 		$this->assertNull($filter->beforeDispatch($event)); | ||||
| 		$this->assertFalse($event->isStopped(), 'Events for routed extensions should not be stopped'); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * Tests that $response->checkNotModified() is called and bypasses | ||||
|  * file dispatching | ||||
|  * | ||||
|  * @return void | ||||
|  * @triggers DispatcherTest $this, compact('request', 'response') | ||||
|  * @triggers DispatcherTest $this, compact('request', 'response') | ||||
|  */ | ||||
| 	public function testNotModified() { | ||||
| 		$filter = new AssetDispatcher(); | ||||
|  | @ -121,4 +164,102 @@ class AssetDispatcherTest extends CakeTestCase { | |||
| 		$this->assertSame($response, $filter->beforeDispatch($event)); | ||||
| 		$this->assertEquals($time->format('D, j M Y H:i:s') . ' GMT', $response->modified()); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * Test that no exceptions are thrown for //index.php type URLs.
 | ||||
|  * | ||||
|  * @return void | ||||
|  * @triggers Dispatcher.beforeRequest $this, compact('request', 'response') | ||||
|  */ | ||||
| 	public function test404OnDoubleSlash() { | ||||
| 		$filter = new AssetDispatcher(); | ||||
| 
 | ||||
| 		$response = $this->getMock('CakeResponse', array('_sendHeader')); | ||||
| 		$request = new CakeRequest('//index.php'); | ||||
| 		$event = new CakeEvent('Dispatcher.beforeRequest', $this, compact('request', 'response')); | ||||
| 
 | ||||
| 		$this->assertNull($filter->beforeDispatch($event)); | ||||
| 		$this->assertFalse($event->isStopped()); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * Test that attempts to traverse directories are prevented. | ||||
|  * | ||||
|  * @return void | ||||
|  * @triggers Dispatcher.beforeRequest $this, compact('request', 'response') | ||||
|  */ | ||||
| 	public function test404OnDoubleDot() { | ||||
| 		App::build(array( | ||||
| 			'Plugin' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS), | ||||
| 			'View' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'View' . DS) | ||||
| 		), App::RESET); | ||||
| 
 | ||||
| 		$response = $this->getMock('CakeResponse', array('_sendHeader')); | ||||
| 		$request = new CakeRequest('theme/test_theme/../../../../../../VERSION.txt'); | ||||
| 		$event = new CakeEvent('Dispatcher.beforeRequest', $this, compact('request', 'response')); | ||||
| 
 | ||||
| 		$response->expects($this->never())->method('send'); | ||||
| 
 | ||||
| 		$filter = new AssetDispatcher(); | ||||
| 		$this->assertNull($filter->beforeDispatch($event)); | ||||
| 		$this->assertFalse($event->isStopped()); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * Test that attempts to traverse directories with urlencoded paths fail. | ||||
|  * | ||||
|  * @return void | ||||
|  * @triggers Dispatcher.beforeRequest $this, compact('request', 'response') | ||||
|  */ | ||||
| 	public function test404OnDoubleDotEncoded() { | ||||
| 		App::build(array( | ||||
| 			'Plugin' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS), | ||||
| 			'View' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'View' . DS) | ||||
| 		), App::RESET); | ||||
| 
 | ||||
| 		$response = $this->getMock('CakeResponse', array('_sendHeader', 'send')); | ||||
| 		$request = new CakeRequest('theme/test_theme/%2e./%2e./%2e./%2e./%2e./%2e./VERSION.txt'); | ||||
| 		$event = new CakeEvent('Dispatcher.beforeRequest', $this, compact('request', 'response')); | ||||
| 
 | ||||
| 		$response->expects($this->never())->method('send'); | ||||
| 
 | ||||
| 		$filter = new AssetDispatcher(); | ||||
| 		$this->assertNull($filter->beforeDispatch($event)); | ||||
| 		$this->assertFalse($event->isStopped()); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * Test asset content length is unset | ||||
|  * | ||||
|  * If content length is unset, then the webserver can figure it out. | ||||
|  * | ||||
|  * @outputBuffering enabled | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testAssetContentLength() { | ||||
| 		Router::reload(); | ||||
| 		Configure::write('Dispatcher.filters', array('AssetDispatcher')); | ||||
| 		App::build(array( | ||||
| 			'View' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'View' . DS) | ||||
| 		)); | ||||
| 
 | ||||
| 		$url = 'theme/test_theme/css/test_asset.css'; | ||||
| 		$file = 'View/Themed/TestTheme/webroot/css/test_asset.css'; | ||||
| 
 | ||||
| 		$request = new CakeRequest($url); | ||||
| 		$response = $this->getMock('CakeResponse', array('_sendHeader', 'send')); | ||||
| 		$event = new CakeEvent('Dispatcher.beforeRequest', $this, compact('request', 'response')); | ||||
| 
 | ||||
| 		$filter = new AssetDispatcher(); | ||||
| 		$filter->beforeDispatch($event); | ||||
| 		$result = ob_get_clean(); | ||||
| 
 | ||||
| 		$path = CAKE . 'Test' . DS . 'test_app' . DS . str_replace('/', DS, $file); | ||||
| 		$file = file_get_contents($path); | ||||
| 		$this->assertEquals($file, $result); | ||||
| 
 | ||||
| 		$headers = $response->header(); | ||||
| 		$this->assertFalse($headers['Content-Length']); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -2,19 +2,18 @@ | |||
| /** | ||||
|  * CakeRequest Test case file. | ||||
|  * | ||||
|  * PHP 5 | ||||
|  * | ||||
|  * CakePHP(tm) : Rapid Development Framework (http://cakephp.org) | ||||
|  * Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org) | ||||
|  * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) | ||||
|  * | ||||
|  * Licensed under The MIT License | ||||
|  * For full copyright and license information, please see the LICENSE.txt | ||||
|  * Redistributions of files must retain the above copyright notice. | ||||
|  * | ||||
|  * @copyright     Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org) | ||||
|  * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) | ||||
|  * @link          http://cakephp.org CakePHP(tm) Project | ||||
|  * @package       Cake.Test.Case.Routing.Route | ||||
|  * @since         CakePHP(tm) v 2.0 | ||||
|  * @license       MIT License (http://www.opensource.org/licenses/mit-license.php) | ||||
|  * @license       http://www.opensource.org/licenses/mit-license.php MIT License | ||||
|  */ | ||||
| 
 | ||||
| App::uses('CakeRoute', 'Routing/Route'); | ||||
|  | @ -24,7 +23,7 @@ App::uses('Router', 'Routing'); | |||
|  * Test case for CakeRoute | ||||
|  * | ||||
|  * @package       Cake.Test.Case.Routing.Route | ||||
|  **/ | ||||
|  */ | ||||
| class CakeRouteTest extends CakeTestCase { | ||||
| 
 | ||||
| /** | ||||
|  | @ -41,7 +40,7 @@ class CakeRouteTest extends CakeTestCase { | |||
|  * Test the construction of a CakeRoute | ||||
|  * | ||||
|  * @return void | ||||
|  **/ | ||||
|  */ | ||||
| 	public function testConstruction() { | ||||
| 		$route = new CakeRoute('/:controller/:action/:id', array(), array('id' => '[0-9]+')); | ||||
| 
 | ||||
|  | @ -55,7 +54,7 @@ class CakeRouteTest extends CakeTestCase { | |||
|  * test Route compiling. | ||||
|  * | ||||
|  * @return void | ||||
|  **/ | ||||
|  */ | ||||
| 	public function testBasicRouteCompiling() { | ||||
| 		$route = new CakeRoute('/', array('controller' => 'pages', 'action' => 'display', 'home')); | ||||
| 		$result = $route->compile(); | ||||
|  | @ -107,7 +106,7 @@ class CakeRouteTest extends CakeTestCase { | |||
|  * test compiling routes with keys that have patterns | ||||
|  * | ||||
|  * @return void | ||||
|  **/ | ||||
|  */ | ||||
| 	public function testRouteCompilingWithParamPatterns() { | ||||
| 		$route = new CakeRoute( | ||||
| 			'/:controller/:action/:id', | ||||
|  | @ -119,7 +118,7 @@ class CakeRouteTest extends CakeTestCase { | |||
| 		$this->assertRegExp($result, '/posts/view/518098'); | ||||
| 		$this->assertNotRegExp($result, '/posts/edit/name-of-post'); | ||||
| 		$this->assertNotRegExp($result, '/posts/edit/4/other:param'); | ||||
| 		$this->assertEquals(array('controller', 'action', 'id'), $route->keys); | ||||
| 		$this->assertEquals(array('id', 'controller', 'action'), $route->keys); | ||||
| 
 | ||||
| 		$route = new CakeRoute( | ||||
| 			'/:lang/:controller/:action/:id', | ||||
|  | @ -131,7 +130,7 @@ class CakeRouteTest extends CakeTestCase { | |||
| 		$this->assertRegExp($result, '/cze/articles/view/1'); | ||||
| 		$this->assertNotRegExp($result, '/language/articles/view/2'); | ||||
| 		$this->assertNotRegExp($result, '/eng/articles/view/name-of-article'); | ||||
| 		$this->assertEquals(array('lang', 'controller', 'action', 'id'), $route->keys); | ||||
| 		$this->assertEquals(array('lang', 'id', 'controller', 'action'), $route->keys); | ||||
| 
 | ||||
| 		foreach (array(':', '@', ';', '$', '-') as $delim) { | ||||
| 			$route = new CakeRoute('/posts/:id' . $delim . ':title'); | ||||
|  | @ -142,7 +141,7 @@ class CakeRouteTest extends CakeTestCase { | |||
| 			$this->assertNotRegExp($result, '/posts/11!nameofarticle'); | ||||
| 			$this->assertNotRegExp($result, '/posts/11'); | ||||
| 
 | ||||
| 			$this->assertEquals(array('id', 'title'), $route->keys); | ||||
| 			$this->assertEquals(array('title', 'id'), $route->keys); | ||||
| 		} | ||||
| 
 | ||||
| 		$route = new CakeRoute( | ||||
|  | @ -156,7 +155,7 @@ class CakeRouteTest extends CakeTestCase { | |||
| 		$this->assertNotRegExp($result, '/posts/hey_now:nameofarticle'); | ||||
| 		$this->assertNotRegExp($result, '/posts/:nameofarticle/2009'); | ||||
| 		$this->assertNotRegExp($result, '/posts/:nameofarticle/01'); | ||||
| 		$this->assertEquals(array('id', 'title', 'year'), $route->keys); | ||||
| 		$this->assertEquals(array('year', 'title', 'id'), $route->keys); | ||||
| 
 | ||||
| 		$route = new CakeRoute( | ||||
| 			'/posts/:url_title-(uuid::id)', | ||||
|  | @ -205,7 +204,7 @@ class CakeRouteTest extends CakeTestCase { | |||
| 
 | ||||
| 		$this->assertRegExp($result, '/some_extra/page/this_is_the_slug'); | ||||
| 		$this->assertRegExp($result, '/page/this_is_the_slug'); | ||||
| 		$this->assertEquals(array('extra', 'slug'), $route->keys); | ||||
| 		$this->assertEquals(array('slug', 'extra'), $route->keys); | ||||
| 		$this->assertEquals(array('extra' => '[a-z1-9_]*', 'slug' => '[a-z1-9_]+', 'action' => 'view'), $route->options); | ||||
| 		$expected = array( | ||||
| 			'controller' => 'pages', | ||||
|  | @ -235,7 +234,7 @@ class CakeRouteTest extends CakeTestCase { | |||
|  * test that routes match their pattern. | ||||
|  * | ||||
|  * @return void | ||||
|  **/ | ||||
|  */ | ||||
| 	public function testMatchBasic() { | ||||
| 		$route = new CakeRoute('/:controller/:action/:id', array('plugin' => null)); | ||||
| 		$result = $route->match(array('controller' => 'posts', 'action' => 'view', 'plugin' => null)); | ||||
|  | @ -309,6 +308,11 @@ class CakeRouteTest extends CakeTestCase { | |||
| 		$result = $route->match($url); | ||||
| 		$expected = '/admin/subscriptions/edit_admin_e/1'; | ||||
| 		$this->assertEquals($expected, $result); | ||||
| 
 | ||||
| 		$url = array('controller' => 'subscribe', 'admin' => true, 'action' => 'admin_edit', 1); | ||||
| 		$result = $route->match($url); | ||||
| 		$expected = '/admin/subscriptions/edit/1'; | ||||
| 		$this->assertEquals($expected, $result); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  | @ -483,6 +487,40 @@ class CakeRouteTest extends CakeTestCase { | |||
| 		$this->assertEquals('red', $result['color']); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * test persist with a non array value | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testPersistParamsNonArray() { | ||||
| 		$url = array('controller' => 'posts', 'action' => 'index'); | ||||
| 		$params = array('lang' => 'en', 'color' => 'blue'); | ||||
| 
 | ||||
| 		$route = new CakeRoute( | ||||
| 			'/:lang/:color/blog/:action', | ||||
| 			array('controller' => 'posts') | ||||
| 			// No persist options
 | ||||
| 		); | ||||
| 		$result = $route->persistParams($url, $params); | ||||
| 		$this->assertEquals($url, $result); | ||||
| 
 | ||||
| 		$route = new CakeRoute( | ||||
| 			'/:lang/:color/blog/:action', | ||||
| 			array('controller' => 'posts'), | ||||
| 			array('persist' => false) | ||||
| 		); | ||||
| 		$result = $route->persistParams($url, $params); | ||||
| 		$this->assertEquals($url, $result); | ||||
| 
 | ||||
| 		$route = new CakeRoute( | ||||
| 			'/:lang/:color/blog/:action', | ||||
| 			array('controller' => 'posts'), | ||||
| 			array('persist' => 'derp') | ||||
| 		); | ||||
| 		$result = $route->persistParams($url, $params); | ||||
| 		$this->assertEquals($url, $result); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * test the parse method of CakeRoute. | ||||
|  * | ||||
|  | @ -817,6 +855,41 @@ class CakeRouteTest extends CakeTestCase { | |||
| 		$this->assertEquals($expected, $result); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * Test matching of parameters where one parameter name starts with another parameter name | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testMatchSimilarParameters() { | ||||
| 		$route = new CakeRoute('/:thisParam/:thisParamIsLonger'); | ||||
| 
 | ||||
| 		$url = array( | ||||
| 			'thisParamIsLonger' => 'bar', | ||||
| 			'thisParam' => 'foo', | ||||
| 		); | ||||
| 
 | ||||
| 		$result = $route->match($url); | ||||
| 		$expected = '/foo/bar'; | ||||
| 		$this->assertEquals($expected, $result); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * Test match() with trailing ** style routes. | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testMatchTrailing() { | ||||
| 		$route = new CakeRoute('/pages/**', array('controller' => 'pages', 'action' => 'display')); | ||||
| 		$id = 'test/ spaces/漢字/la†în'; | ||||
| 		$result = $route->match(array( | ||||
| 			'controller' => 'pages', | ||||
| 			'action' => 'display', | ||||
| 			$id | ||||
| 		)); | ||||
| 		$expected = '/pages/test/%20spaces/%E6%BC%A2%E5%AD%97/la%E2%80%A0%C3%AEn'; | ||||
| 		$this->assertEquals($expected, $result); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * test restructuring args with pass key | ||||
|  * | ||||
|  | @ -869,7 +942,7 @@ class CakeRouteTest extends CakeTestCase { | |||
|  * @return void | ||||
|  */ | ||||
| 	public function testParseTrailingUTF8() { | ||||
| 		$route = new CakeRoute('/category/**', array('controller' => 'categories','action' => 'index')); | ||||
| 		$route = new CakeRoute('/category/**', array('controller' => 'categories', 'action' => 'index')); | ||||
| 		$result = $route->parse('/category/%D9%85%D9%88%D8%A8%D8%A7%DB%8C%D9%84'); | ||||
| 		$expected = array( | ||||
| 			'controller' => 'categories', | ||||
|  | @ -880,4 +953,58 @@ class CakeRouteTest extends CakeTestCase { | |||
| 		$this->assertEquals($expected, $result); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * test that utf-8 patterns work for :section | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testUTF8PatternOnSection() { | ||||
| 		$route = new CakeRoute( | ||||
| 			'/:section', | ||||
| 			array('plugin' => 'blogs', 'controller' => 'posts', 'action' => 'index'), | ||||
| 			array( | ||||
| 				'persist' => array('section'), | ||||
| 				'section' => 'آموزش|weblog' | ||||
| 			) | ||||
| 		); | ||||
| 
 | ||||
| 		$result = $route->parse('/%D8%A2%D9%85%D9%88%D8%B2%D8%B4'); | ||||
| 		$expected = array('section' => 'آموزش', 'plugin' => 'blogs', 'controller' => 'posts', 'action' => 'index', 'pass' => array(), 'named' => array()); | ||||
| 		$this->assertEquals($expected, $result); | ||||
| 
 | ||||
| 		$result = $route->parse('/weblog'); | ||||
| 		$expected = array('section' => 'weblog', 'plugin' => 'blogs', 'controller' => 'posts', 'action' => 'index', 'pass' => array(), 'named' => array()); | ||||
| 		$this->assertEquals($expected, $result); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * Test for __set_state magic method on CakeRoute | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testSetState() { | ||||
| 		$route = CakeRoute::__set_state(array( | ||||
| 			'keys' => array(), | ||||
| 			'options' => array(), | ||||
| 			'defaults' => array( | ||||
| 				'controller' => 'pages', | ||||
| 				'action' => 'display', | ||||
| 				'home', | ||||
| 			), | ||||
| 			'template' => '/', | ||||
| 			'_greedy' => false, | ||||
| 			'_compiledRoute' => null, | ||||
| 			'_headerMap' => array ( | ||||
| 				'type' => 'content_type', | ||||
| 				'method' => 'request_method', | ||||
| 				'server' => 'server_name', | ||||
| 			), | ||||
| 		)); | ||||
| 		$this->assertInstanceOf('CakeRoute', $route); | ||||
| 		$this->assertSame('/', $route->match(array('controller' => 'pages', 'action' => 'display', 'home'))); | ||||
| 		$this->assertFalse($route->match(array('controller' => 'pages', 'action' => 'display', 'about'))); | ||||
| 		$expected = array('controller' => 'pages', 'action' => 'display', 'pass' => array('home'), 'named' => array()); | ||||
| 		$this->assertEquals($expected, $route->parse('/')); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -2,19 +2,18 @@ | |||
| /** | ||||
|  * CakeRequest Test case file. | ||||
|  * | ||||
|  * PHP 5 | ||||
|  * | ||||
|  * CakePHP(tm) : Rapid Development Framework (http://cakephp.org) | ||||
|  * Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org) | ||||
|  * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) | ||||
|  * | ||||
|  * Licensed under The MIT License | ||||
|  * For full copyright and license information, please see the LICENSE.txt | ||||
|  * Redistributions of files must retain the above copyright notice. | ||||
|  * | ||||
|  * @copyright     Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org) | ||||
|  * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) | ||||
|  * @link          http://cakephp.org CakePHP(tm) Project | ||||
|  * @package       Cake.Test.Case.Routing.Route | ||||
|  * @since         CakePHP(tm) v 2.0 | ||||
|  * @license       MIT License (http://www.opensource.org/licenses/mit-license.php) | ||||
|  * @license       http://www.opensource.org/licenses/mit-license.php MIT License | ||||
|  */ | ||||
| 
 | ||||
| App::uses('PluginShortRoute', 'Routing/Route'); | ||||
|  | @ -25,7 +24,7 @@ App::uses('Router', 'Routing'); | |||
|  * | ||||
|  * @package       Cake.Test.Case.Routing.Route | ||||
|  */ | ||||
| class PluginShortRouteTest extends  CakeTestCase { | ||||
| class PluginShortRouteTest extends CakeTestCase { | ||||
| 
 | ||||
| /** | ||||
|  * setUp method | ||||
|  | @ -56,7 +55,7 @@ class PluginShortRouteTest extends  CakeTestCase { | |||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * test the reverse routing of the plugin shortcut urls. | ||||
|  * test the reverse routing of the plugin shortcut URLs. | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
|  |  | |||
|  | @ -2,19 +2,18 @@ | |||
| /** | ||||
|  * CakeRequest Test case file. | ||||
|  * | ||||
|  * PHP 5 | ||||
|  * | ||||
|  * CakePHP(tm) : Rapid Development Framework (http://cakephp.org) | ||||
|  * Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org) | ||||
|  * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) | ||||
|  * | ||||
|  * Licensed under The MIT License | ||||
|  * For full copyright and license information, please see the LICENSE.txt | ||||
|  * Redistributions of files must retain the above copyright notice. | ||||
|  * | ||||
|  * @copyright     Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org) | ||||
|  * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) | ||||
|  * @link          http://cakephp.org CakePHP(tm) Project | ||||
|  * @package       Cake.Test.Case.Routing.Route | ||||
|  * @since         CakePHP(tm) v 2.0 | ||||
|  * @license       MIT License (http://www.opensource.org/licenses/mit-license.php) | ||||
|  * @license       http://www.opensource.org/licenses/mit-license.php MIT License | ||||
|  */ | ||||
| 
 | ||||
| App::uses('RedirectRoute', 'Routing/Route'); | ||||
|  | @ -26,7 +25,7 @@ App::uses('Router', 'Routing'); | |||
|  * | ||||
|  * @package       Cake.Test.Case.Routing.Route | ||||
|  */ | ||||
| class RedirectRouteTest extends  CakeTestCase { | ||||
| class RedirectRouteTest extends CakeTestCase { | ||||
| 
 | ||||
| /** | ||||
|  * setUp method | ||||
|  | @ -48,14 +47,14 @@ class RedirectRouteTest extends  CakeTestCase { | |||
| 		$route = new RedirectRoute('/home', array('controller' => 'posts')); | ||||
| 		$route->stop = false; | ||||
| 		$route->response = $this->getMock('CakeResponse', array('_sendHeader')); | ||||
| 		$result = $route->parse('/home'); | ||||
| 		$route->parse('/home'); | ||||
| 		$header = $route->response->header(); | ||||
| 		$this->assertEquals(Router::url('/posts', true), $header['Location']); | ||||
| 
 | ||||
| 		$route = new RedirectRoute('/home', array('controller' => 'posts', 'action' => 'index')); | ||||
| 		$route->stop = false; | ||||
| 		$route->response = $this->getMock('CakeResponse', array('_sendHeader')); | ||||
| 		$result = $route->parse('/home'); | ||||
| 		$route->parse('/home'); | ||||
| 		$header = $route->response->header(); | ||||
| 		$this->assertEquals(Router::url('/posts', true), $header['Location']); | ||||
| 		$this->assertEquals(301, $route->response->statusCode()); | ||||
|  | @ -63,14 +62,14 @@ class RedirectRouteTest extends  CakeTestCase { | |||
| 		$route = new RedirectRoute('/google', 'http://google.com'); | ||||
| 		$route->stop = false; | ||||
| 		$route->response = $this->getMock('CakeResponse', array('_sendHeader')); | ||||
| 		$result = $route->parse('/google'); | ||||
| 		$route->parse('/google'); | ||||
| 		$header = $route->response->header(); | ||||
| 		$this->assertEquals('http://google.com', $header['Location']); | ||||
| 
 | ||||
| 		$route = new RedirectRoute('/posts/*', array('controller' => 'posts', 'action' => 'view'), array('status' => 302)); | ||||
| 		$route->stop = false; | ||||
| 		$route->response = $this->getMock('CakeResponse', array('_sendHeader')); | ||||
| 		$result = $route->parse('/posts/2'); | ||||
| 		$route->parse('/posts/2'); | ||||
| 		$header = $route->response->header(); | ||||
| 		$this->assertEquals(Router::url('/posts/view', true), $header['Location']); | ||||
| 		$this->assertEquals(302, $route->response->statusCode()); | ||||
|  | @ -78,30 +77,46 @@ class RedirectRouteTest extends  CakeTestCase { | |||
| 		$route = new RedirectRoute('/posts/*', array('controller' => 'posts', 'action' => 'view'), array('persist' => true)); | ||||
| 		$route->stop = false; | ||||
| 		$route->response = $this->getMock('CakeResponse', array('_sendHeader')); | ||||
| 		$result = $route->parse('/posts/2'); | ||||
| 		$route->parse('/posts/2'); | ||||
| 		$header = $route->response->header(); | ||||
| 		$this->assertEquals(Router::url('/posts/view/2', true), $header['Location']); | ||||
| 
 | ||||
| 		$route = new RedirectRoute('/posts/*', '/test', array('persist' => true)); | ||||
| 		$route->stop = false; | ||||
| 		$route->response = $this->getMock('CakeResponse', array('_sendHeader')); | ||||
| 		$result = $route->parse('/posts/2'); | ||||
| 		$route->parse('/posts/2'); | ||||
| 		$header = $route->response->header(); | ||||
| 		$this->assertEquals(Router::url('/test', true), $header['Location']); | ||||
| 
 | ||||
| 		$route = new RedirectRoute('/my_controllers/:action/*', array('controller' => 'tags', 'action' => 'add'), array('persist' => true)); | ||||
| 		$route->stop = false; | ||||
| 		$route->response = $this->getMock('CakeResponse', array('_sendHeader')); | ||||
| 		$result = $route->parse('/my_controllers/do_something/passme/named:param'); | ||||
| 		$route->parse('/my_controllers/do_something/passme/named:param'); | ||||
| 		$header = $route->response->header(); | ||||
| 		$this->assertEquals(Router::url('/tags/add/passme/named:param', true), $header['Location']); | ||||
| 
 | ||||
| 		$route = new RedirectRoute('/my_controllers/:action/*', array('controller' => 'tags', 'action' => 'add')); | ||||
| 		$route->stop = false; | ||||
| 		$route->response = $this->getMock('CakeResponse', array('_sendHeader')); | ||||
| 		$result = $route->parse('/my_controllers/do_something/passme/named:param'); | ||||
| 		$route->parse('/my_controllers/do_something/passme/named:param'); | ||||
| 		$header = $route->response->header(); | ||||
| 		$this->assertEquals(Router::url('/tags/add', true), $header['Location']); | ||||
| 
 | ||||
| 		$route = new RedirectRoute('/:lang/my_controllers', array('controller' => 'tags', 'action' => 'add'), array('lang' => '(nl|en)', 'persist' => array('lang'))); | ||||
| 		$route->stop = false; | ||||
| 		$route->response = $this->getMock('CakeResponse', array('_sendHeader')); | ||||
| 		$route->parse('/nl/my_controllers/'); | ||||
| 		$header = $route->response->header(); | ||||
| 		$this->assertEquals(Router::url('/tags/add/lang:nl', true), $header['Location']); | ||||
| 
 | ||||
| 		Router::$routes = array(); // reset default routes
 | ||||
| 		Router::connect('/:lang/preferred_controllers', array('controller' => 'tags', 'action' => 'add'), array('lang' => '(nl|en)', 'persist' => array('lang'))); | ||||
| 		$route = new RedirectRoute('/:lang/my_controllers', array('controller' => 'tags', 'action' => 'add'), array('lang' => '(nl|en)', 'persist' => array('lang'))); | ||||
| 		$route->stop = false; | ||||
| 		$route->response = $this->getMock('CakeResponse', array('_sendHeader')); | ||||
| 		$route->parse('/nl/my_controllers/'); | ||||
| 		$header = $route->response->header(); | ||||
| 		$this->assertEquals(Router::url('/nl/preferred_controllers', true), $header['Location']); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -2,19 +2,18 @@ | |||
| /** | ||||
|  * RouterTest file | ||||
|  * | ||||
|  * PHP 5 | ||||
|  * | ||||
|  * CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html> | ||||
|  * Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org) | ||||
|  * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) | ||||
|  * | ||||
|  *	Licensed under The Open Group Test Suite License | ||||
|  *	Redistributions of files must retain the above copyright notice. | ||||
|  * Licensed under The MIT License | ||||
|  * For full copyright and license information, please see the LICENSE.txt | ||||
|  * Redistributions of files must retain the above copyright notice. | ||||
|  * | ||||
|  * @copyright     Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org) | ||||
|  * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) | ||||
|  * @link          http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests | ||||
|  * @package       Cake.Test.Case.Routing | ||||
|  * @since         CakePHP(tm) v 1.2.0.4206 | ||||
|  * @license       MIT License (http://www.opensource.org/licenses/mit-license.php) | ||||
|  * @license       http://www.opensource.org/licenses/mit-license.php MIT License | ||||
|  */ | ||||
| 
 | ||||
| App::uses('Router', 'Routing'); | ||||
|  | @ -49,24 +48,49 @@ class RouterTest extends CakeTestCase { | |||
| 	public function tearDown() { | ||||
| 		parent::tearDown(); | ||||
| 		CakePlugin::unload(); | ||||
| 		Router::fullBaseUrl(''); | ||||
| 		Configure::write('App.fullBaseUrl', 'http://localhost'); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * testFullBaseURL method | ||||
|  * testFullBaseUrl method | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testFullBaseURL() { | ||||
| 		$skip = PHP_SAPI == 'cli'; | ||||
| 		if ($skip) { | ||||
| 			$this->markTestSkipped('Cannot validate base urls in CLI'); | ||||
| 		} | ||||
| 	public function testFullBaseUrl() { | ||||
| 		$this->assertRegExp('/^http(s)?:\/\//', Router::url('/', true)); | ||||
| 		$this->assertRegExp('/^http(s)?:\/\//', Router::url(null, true)); | ||||
| 		$this->assertRegExp('/^http(s)?:\/\//', Router::url(array('full_base' => true))); | ||||
| 		$this->assertSame(FULL_BASE_URL . '/', Router::url(array('full_base' => true))); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * Tests that the base URL can be changed at runtime. | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testBaseUrl() { | ||||
| 		$this->assertEquals(FULL_BASE_URL, Router::fullBaseUrl()); | ||||
| 		Router::fullBaseUrl('http://example.com'); | ||||
| 		$this->assertEquals('http://example.com/', Router::url('/', true)); | ||||
| 		$this->assertEquals('http://example.com', Configure::read('App.fullBaseUrl')); | ||||
| 		Router::fullBaseUrl('https://example.com'); | ||||
| 		$this->assertEquals('https://example.com/', Router::url('/', true)); | ||||
| 		$this->assertEquals('https://example.com', Configure::read('App.fullBaseUrl')); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * Test that Router uses App.base to build URL's when there are no stored | ||||
|  * request objects. | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testBaseUrlWithBasePath() { | ||||
| 		Configure::write('App.base', '/cakephp'); | ||||
| 		Router::fullBaseUrl('http://example.com'); | ||||
| 		$this->assertEquals('http://example.com/cakephp/tasks', Router::url('/tasks', true)); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * testRouteDefaultParams method | ||||
|  * | ||||
|  | @ -166,6 +190,28 @@ class RouterTest extends CakeTestCase { | |||
| 		$this->assertEquals($expected, $result); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * testMapResources with custom connectOptions | ||||
|  */ | ||||
| 	public function testMapResourcesConnectOptions() { | ||||
| 		App::build(array( | ||||
| 			'Plugin' => array( | ||||
| 				CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS | ||||
| 			) | ||||
| 		)); | ||||
| 		CakePlugin::load('TestPlugin'); | ||||
| 		App::uses('TestRoute', 'TestPlugin.Routing/Route'); | ||||
| 		Router::mapResources('Posts', array( | ||||
| 			'connectOptions' => array( | ||||
| 				'routeClass' => 'TestPlugin.TestRoute', | ||||
| 				'foo' => '^(bar)$', | ||||
| 			), | ||||
| 		)); | ||||
| 		$route = end(Router::$routes); | ||||
| 		$this->assertInstanceOf('TestRoute', $route); | ||||
| 		$this->assertEquals('^(bar)$', $route->options['foo']); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * Test mapResources with a plugin and prefix. | ||||
|  * | ||||
|  | @ -191,6 +237,20 @@ class RouterTest extends CakeTestCase { | |||
| 		); | ||||
| 		$this->assertEquals($expected, $result); | ||||
| 		$this->assertEquals(array('test_plugin'), $resources); | ||||
| 
 | ||||
| 		Router::mapResources('Posts', array('prefix' => 'api')); | ||||
| 
 | ||||
| 		$_SERVER['REQUEST_METHOD'] = 'GET'; | ||||
| 		$result = Router::parse('/api/posts'); | ||||
| 		$expected = array( | ||||
| 			'pass' => array(), | ||||
| 			'named' => array(), | ||||
| 			'plugin' => null, | ||||
| 			'controller' => 'posts', | ||||
| 			'action' => 'index', | ||||
| 			'[method]' => 'GET' | ||||
| 		); | ||||
| 		$this->assertEquals($expected, $result); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  | @ -315,7 +375,7 @@ class RouterTest extends CakeTestCase { | |||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * test generation of basic urls. | ||||
|  * test generation of basic URLs. | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
|  | @ -484,7 +544,7 @@ class RouterTest extends CakeTestCase { | |||
| 		$result = Router::url(array('controller' => 'tests', 'pages' => array( | ||||
| 			1, 2, 3 | ||||
| 		))); | ||||
| 		$expected = '/tests/index/pages[0]:1/pages[1]:2/pages[2]:3'; | ||||
| 		$expected = '/tests/index/pages%5B0%5D:1/pages%5B1%5D:2/pages%5B2%5D:3'; | ||||
| 		$this->assertEquals($expected, $result); | ||||
| 
 | ||||
| 		$result = Router::url(array('controller' => 'tests', | ||||
|  | @ -496,7 +556,7 @@ class RouterTest extends CakeTestCase { | |||
| 				'three' | ||||
| 			) | ||||
| 		)); | ||||
| 		$expected = '/tests/index/pages[param1][0]:one/pages[param1][1]:two/pages[0]:three'; | ||||
| 		$expected = '/tests/index/pages%5Bparam1%5D%5B0%5D:one/pages%5Bparam1%5D%5B1%5D:two/pages%5B0%5D:three'; | ||||
| 		$this->assertEquals($expected, $result); | ||||
| 
 | ||||
| 		$result = Router::url(array('controller' => 'tests', | ||||
|  | @ -508,7 +568,7 @@ class RouterTest extends CakeTestCase { | |||
| 				'three' | ||||
| 			) | ||||
| 		)); | ||||
| 		$expected = '/tests/index/pages[param1][one]:1/pages[param1][two]:2/pages[0]:three'; | ||||
| 		$expected = '/tests/index/pages%5Bparam1%5D%5Bone%5D:1/pages%5Bparam1%5D%5Btwo%5D:2/pages%5B0%5D:three'; | ||||
| 		$this->assertEquals($expected, $result); | ||||
| 
 | ||||
| 		$result = Router::url(array('controller' => 'tests', | ||||
|  | @ -520,14 +580,14 @@ class RouterTest extends CakeTestCase { | |||
| 				'cool' | ||||
| 			) | ||||
| 		)); | ||||
| 		$expected = '/tests/index/super[nested][array]:awesome/super[nested][something]:else/super[0]:cool'; | ||||
| 		$expected = '/tests/index/super%5Bnested%5D%5Barray%5D:awesome/super%5Bnested%5D%5Bsomething%5D:else/super%5B0%5D:cool'; | ||||
| 		$this->assertEquals($expected, $result); | ||||
| 
 | ||||
| 		$result = Router::url(array('controller' => 'tests', 'namedParam' => array( | ||||
| 			'keyed' => 'is an array', | ||||
| 			'test' | ||||
| 		))); | ||||
| 		$expected = '/tests/index/namedParam[keyed]:is%20an%20array/namedParam[0]:test'; | ||||
| 		$expected = '/tests/index/namedParam%5Bkeyed%5D:is%20an%20array/namedParam%5B0%5D:test'; | ||||
| 		$this->assertEquals($expected, $result); | ||||
| 	} | ||||
| 
 | ||||
|  | @ -535,7 +595,7 @@ class RouterTest extends CakeTestCase { | |||
|  * Test generation of routes with query string parameters. | ||||
|  * | ||||
|  * @return void | ||||
|  **/ | ||||
|  */ | ||||
| 	public function testUrlGenerationWithQueryStrings() { | ||||
| 		$result = Router::url(array('controller' => 'posts', 'action' => 'index', '0', '?' => 'var=test&var2=test2')); | ||||
| 		$expected = '/posts/index/0?var=test&var2=test2'; | ||||
|  | @ -559,7 +619,7 @@ class RouterTest extends CakeTestCase { | |||
|  * test that regex validation of keyed route params is working. | ||||
|  * | ||||
|  * @return void | ||||
|  **/ | ||||
|  */ | ||||
| 	public function testUrlGenerationWithRegexQualifiedParams() { | ||||
| 		Router::connect( | ||||
| 			':language/galleries', | ||||
|  | @ -639,7 +699,7 @@ class RouterTest extends CakeTestCase { | |||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * Test url generation with an admin prefix | ||||
|  * Test URL generation with an admin prefix | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
|  | @ -936,6 +996,23 @@ class RouterTest extends CakeTestCase { | |||
| 		$this->assertEquals('/admin/other/posts/index', $result); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * Test that URL's fail to parse when they are prefixed with //
 | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testUrlParseFailureDoubleSlash() { | ||||
| 		Router::connect('/posts', array('controller' => 'posts', 'action' => 'index')); | ||||
| 		$result = Router::parse('/posts'); | ||||
| 		$this->assertEquals( | ||||
| 			array('pass' => array(), 'named' => array(), 'plugin' => null, 'controller' => 'posts', 'action' => 'index'), | ||||
| 			$result | ||||
| 		); | ||||
| 
 | ||||
| 		$result = Router::parse('//posts'); | ||||
| 		$this->assertEquals(array(), $result); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * testUrlParsing method | ||||
|  * | ||||
|  | @ -944,7 +1021,7 @@ class RouterTest extends CakeTestCase { | |||
| 	public function testUrlParsing() { | ||||
| 		extract(Router::getNamedExpressions()); | ||||
| 
 | ||||
| 		Router::connect('/posts/:value/:somevalue/:othervalue/*', array('controller' => 'posts', 'action' => 'view'), array('value','somevalue', 'othervalue')); | ||||
| 		Router::connect('/posts/:value/:somevalue/:othervalue/*', array('controller' => 'posts', 'action' => 'view'), array('value', 'somevalue', 'othervalue')); | ||||
| 		$result = Router::parse('/posts/2007/08/01/title-of-post-here'); | ||||
| 		$expected = array('value' => '2007', 'somevalue' => '08', 'othervalue' => '01', 'controller' => 'posts', 'action' => 'view', 'plugin' => '', 'pass' => array('0' => 'title-of-post-here'), 'named' => array()); | ||||
| 		$this->assertEquals($expected, $result); | ||||
|  | @ -1053,6 +1130,12 @@ class RouterTest extends CakeTestCase { | |||
| 		$result = Router::parse('/posts/view/foo:bar/routing:fun/answer:42'); | ||||
| 		$expected = array('pass' => array(), 'named' => array('foo' => 'bar', 'routing' => 'fun', 'answer' => '42'), 'plugin' => null, 'controller' => 'posts', 'action' => 'view'); | ||||
| 		$this->assertEquals($expected, $result); | ||||
| 
 | ||||
| 		Router::reload(); | ||||
| 		Router::connect('/posts/view/*', array('controller' => 'posts', 'action' => 'view'), array('named' => array('foo', 'answer'), 'greedyNamed' => true)); | ||||
| 		$result = Router::parse('/posts/view/foo:bar/routing:fun/answer:42?id=123&tab=abc'); | ||||
| 		$expected = array('pass' => array(), 'named' => array('foo' => 'bar', 'routing' => 'fun', 'answer' => '42'), 'plugin' => null, 'controller' => 'posts', 'action' => 'view', '?' => array('id' => '123', 'tab' => 'abc')); | ||||
| 		$this->assertEquals($expected, $result); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  | @ -1065,13 +1148,13 @@ class RouterTest extends CakeTestCase { | |||
| 		Router::connect( | ||||
| 			'/:lang/:color/posts/view/*', | ||||
| 			array('controller' => 'posts', 'action' => 'view'), | ||||
| 			array('persist' => array('lang', 'color') | ||||
| 		)); | ||||
| 			array('persist' => array('lang', 'color')) | ||||
| 		); | ||||
| 		Router::connect( | ||||
| 			'/:lang/:color/posts/index', | ||||
| 			array('controller' => 'posts', 'action' => 'index'), | ||||
| 			array('persist' => array('lang') | ||||
| 		)); | ||||
| 			array('persist' => array('lang')) | ||||
| 		); | ||||
| 		Router::connect('/:lang/:color/posts/edit/*', array('controller' => 'posts', 'action' => 'edit')); | ||||
| 		Router::connect('/about', array('controller' => 'pages', 'action' => 'view', 'about')); | ||||
| 		Router::parse('/en/red/posts/view/5'); | ||||
|  | @ -1169,6 +1252,33 @@ class RouterTest extends CakeTestCase { | |||
| 		$this->assertEquals($expected, $result); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * Test parse and reverse symmetry | ||||
|  * | ||||
|  * @return void | ||||
|  * @dataProvider parseReverseSymmetryData | ||||
|  */ | ||||
| 	public function testParseReverseSymmetry($url) { | ||||
| 		$this->assertSame($url, Router::reverse(Router::parse($url) + array('url' => array()))); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * Data for parse and reverse test | ||||
|  * | ||||
|  * @return array | ||||
|  */ | ||||
| 	public function parseReverseSymmetryData() { | ||||
| 		return array( | ||||
| 			array('/'), | ||||
| 			array('/controller/action'), | ||||
| 			array('/controller/action/param'), | ||||
| 			array('/controller/action?param1=value1¶m2=value2'), | ||||
| 			array('/controller/action/param?param1=value1'), | ||||
| 			array('/controller/action/named1:nv1'), | ||||
| 			array('/controller/action/named1:nv1?param1=value1') | ||||
| 		); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * Test that Routing.prefixes are used when a Router instance is created | ||||
|  * or reset | ||||
|  | @ -1315,13 +1425,15 @@ class RouterTest extends CakeTestCase { | |||
| 		$this->assertEquals($expected, $result); | ||||
| 
 | ||||
| 		$result = Router::parse('/posts/view/1.rss'); | ||||
| 		$expected = array('plugin' => null, 'controller' => 'posts', 'action' => 'view', 'pass' => array('1'), 'named' => array(), 'ext' => 'rss', 'named' => array()); | ||||
| 		$expected = array('plugin' => null, 'controller' => 'posts', 'action' => 'view', 'pass' => array('1'), 'named' => array(), 'ext' => 'rss'); | ||||
| 		$this->assertEquals($expected, $result); | ||||
| 
 | ||||
| 		$result = Router::parse('/posts/view/1.rss?query=test'); | ||||
| 		$expected['?'] = array('query' => 'test'); | ||||
| 		$this->assertEquals($expected, $result); | ||||
| 
 | ||||
| 		$result = Router::parse('/posts/view/1.atom'); | ||||
| 		unset($expected['?']); | ||||
| 		$expected['ext'] = 'atom'; | ||||
| 		$this->assertEquals($expected, $result); | ||||
| 
 | ||||
|  | @ -1335,7 +1447,7 @@ class RouterTest extends CakeTestCase { | |||
| 		$this->assertEquals($expected, $result); | ||||
| 
 | ||||
| 		$result = Router::parse('/posts.atom?hello=goodbye'); | ||||
| 		$expected = array('plugin' => null, 'controller' => 'posts.atom', 'action' => 'index', 'pass' => array(), 'named' => array()); | ||||
| 		$expected = array('plugin' => null, 'controller' => 'posts.atom', 'action' => 'index', 'pass' => array(), 'named' => array(), '?' => array('hello' => 'goodbye')); | ||||
| 		$this->assertEquals($expected, $result); | ||||
| 
 | ||||
| 		Router::reload(); | ||||
|  | @ -1467,7 +1579,7 @@ class RouterTest extends CakeTestCase { | |||
| 		$request->base = '/'; | ||||
| 		Router::setRequestInfo($request); | ||||
| 
 | ||||
| 		$result = Router::parse('/admin/controller/index/type:whatever'); | ||||
| 		Router::parse('/admin/controller/index/type:whatever'); | ||||
| 		$result = Router::url(array('type' => 'new')); | ||||
| 		$expected = "/admin/controller/index/type:new"; | ||||
| 		$this->assertEquals($expected, $result); | ||||
|  | @ -1535,7 +1647,7 @@ class RouterTest extends CakeTestCase { | |||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * test url generation with legacy (1.2) style prefix routes. | ||||
|  * Test URL generation with legacy (1.2) style prefix routes. | ||||
|  * | ||||
|  * @return void | ||||
|  * @see testUrlGenerationWithAutoPrefixes | ||||
|  | @ -1552,7 +1664,7 @@ class RouterTest extends CakeTestCase { | |||
| 		Router::setRequestInfo( | ||||
| 			$request->addParams(array( | ||||
| 				'plugin' => null, 'controller' => 'images', 'action' => 'index', | ||||
| 				'prefix' => null, 'admin' => false,'url' => array('url' => 'images/index') | ||||
| 				'prefix' => null, 'admin' => false, 'url' => array('url' => 'images/index') | ||||
| 			))->addPaths(array( | ||||
| 				'base' => '', | ||||
| 				'here' => '/images/index', | ||||
|  | @ -2161,6 +2273,16 @@ class RouterTest extends CakeTestCase { | |||
| 		$this->assertEquals(Router::stripPlugin($url, null), $url); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * testCurrentRouteWhenNonExistentRoute | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testCurrentRouteWhenNonExistentRoute() { | ||||
| 		$route = Router::currentRoute(); | ||||
| 		$this->assertFalse($route); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * testCurrentRoute | ||||
|  * | ||||
|  | @ -2189,14 +2311,12 @@ class RouterTest extends CakeTestCase { | |||
| 		$this->assertEquals(array_merge($url, array('plugin' => null)), $route->defaults); | ||||
| 
 | ||||
| 		// test that the first route is matched
 | ||||
| 		$newUrl = array('controller' => 'products', 'action' => 'display', 6); | ||||
| 		Router::connect('/government', $url); | ||||
| 		Router::parse('/government'); | ||||
| 		$route = Router::requestRoute(); | ||||
| 		$this->assertEquals(array_merge($url, array('plugin' => null)), $route->defaults); | ||||
| 
 | ||||
| 		// test that an unmatched route does not change the current route
 | ||||
| 		$newUrl = array('controller' => 'products', 'action' => 'display', 6); | ||||
| 		Router::connect('/actor', $url); | ||||
| 		Router::parse('/government'); | ||||
| 		$route = Router::requestRoute(); | ||||
|  | @ -2218,10 +2338,10 @@ class RouterTest extends CakeTestCase { | |||
| 			'named' => array(), 'pass' => array(), | ||||
| 			'param1' => '1', 'param2' => '2', | ||||
| 		); | ||||
| 		$this->assertEquals(Router::getParams(), $expected); | ||||
| 		$this->assertEquals(Router::getParam('controller'), false); | ||||
| 		$this->assertEquals(Router::getParam('param1'), '1'); | ||||
| 		$this->assertEquals(Router::getParam('param2'), '2'); | ||||
| 		$this->assertEquals($expected, Router::getParams()); | ||||
| 		$this->assertEquals(false, Router::getParam('controller')); | ||||
| 		$this->assertEquals('1', Router::getParam('param1')); | ||||
| 		$this->assertEquals('2', Router::getParam('param2')); | ||||
| 
 | ||||
| 		Router::reload(); | ||||
| 
 | ||||
|  | @ -2231,8 +2351,8 @@ class RouterTest extends CakeTestCase { | |||
| 			'plugin' => null, 'controller' => 'pages', 'action' => 'display', | ||||
| 			'named' => array(), 'pass' => array(), | ||||
| 		); | ||||
| 		$this->assertEquals(Router::getParams(), $expected); | ||||
| 		$this->assertEquals(Router::getParams(true), $expected); | ||||
| 		$this->assertEquals($expected, Router::getParams()); | ||||
| 		$this->assertEquals($expected, Router::getParams(true)); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  | @ -2290,13 +2410,13 @@ class RouterTest extends CakeTestCase { | |||
|  * @return void | ||||
|  */ | ||||
| 	public function testUsingCustomRouteClass() { | ||||
| 		$mock = $this->getMock('CakeRoute', array(), array(), 'MockConnectedRoute', false); | ||||
| 		$this->getMock('CakeRoute', array(), array(), 'MockConnectedRoute', false); | ||||
| 		$routes = Router::connect( | ||||
| 			'/:slug', | ||||
| 			array('controller' => 'posts', 'action' => 'view'), | ||||
| 			array('routeClass' => 'MockConnectedRoute', 'slug' => '[a-z_-]+') | ||||
| 		); | ||||
| 		$this->assertTrue(is_a($routes[0], 'MockConnectedRoute'), 'Incorrect class used. %s'); | ||||
| 		$this->assertInstanceOf('MockConnectedRoute', $routes[0], 'Incorrect class used. %s'); | ||||
| 		$expected = array('controller' => 'posts', 'action' => 'view', 'slug' => 'test'); | ||||
| 		$routes[0]->expects($this->any()) | ||||
| 			->method('parse') | ||||
|  | @ -2305,6 +2425,28 @@ class RouterTest extends CakeTestCase { | |||
| 		$this->assertEquals($expected, $result); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * test using custom route class in PluginDot notation | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testUsingCustomRouteClassPluginDotSyntax() { | ||||
| 		App::build(array( | ||||
| 			'Plugin' => array( | ||||
| 				CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS | ||||
| 			) | ||||
| 		)); | ||||
| 		CakePlugin::load('TestPlugin'); | ||||
| 		App::uses('TestRoute', 'TestPlugin.Routing/Route'); | ||||
| 		$routes = Router::connect( | ||||
| 			'/:slug', | ||||
| 			array('controller' => 'posts', 'action' => 'view'), | ||||
| 			array('routeClass' => 'TestPlugin.TestRoute', 'slug' => '[a-z_-]+') | ||||
| 		); | ||||
| 		$this->assertInstanceOf('TestRoute', $routes[0]); | ||||
| 		CakePlugin::unload('TestPlugin'); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * test that route classes must extend CakeRoute | ||||
|  * | ||||
|  | @ -2312,15 +2454,19 @@ class RouterTest extends CakeTestCase { | |||
|  * @return void | ||||
|  */ | ||||
| 	public function testCustomRouteException() { | ||||
| 		Router::connect('/:controller', array(), array('routeClass' => 'Object')); | ||||
| 		Router::connect('/:controller', array(), array('routeClass' => 'CakeObject')); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * test reversing parameter arrays back into strings. | ||||
|  * | ||||
|  * Mark the router as initialized so it doesn't auto-load routes | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testRouterReverse() { | ||||
| 		Router::$initialized = true; | ||||
| 
 | ||||
| 		$params = array( | ||||
| 			'controller' => 'posts', | ||||
| 			'action' => 'view', | ||||
|  | @ -2445,6 +2591,8 @@ class RouterTest extends CakeTestCase { | |||
| 
 | ||||
| /** | ||||
|  * Test that Router::url() uses the first request | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testUrlWithRequestAction() { | ||||
| 		$firstRequest = new CakeRequest('/posts/index'); | ||||
|  | @ -2474,7 +2622,7 @@ class RouterTest extends CakeTestCase { | |||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * test that a route object returning a full url is not modified. | ||||
|  * test that a route object returning a full URL is not modified. | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
|  | @ -2507,6 +2655,28 @@ class RouterTest extends CakeTestCase { | |||
| 
 | ||||
| 		$url = '://example.com'; | ||||
| 		$this->assertEquals($url, Router::url($url)); | ||||
| 
 | ||||
| 		$url = '//example.com'; | ||||
| 		$this->assertEquals($url, Router::url($url)); | ||||
| 
 | ||||
| 		$url = 'javascript:void(0)'; | ||||
| 		$this->assertEquals($url, Router::url($url)); | ||||
| 
 | ||||
| 		$url = 'tel:012345-678'; | ||||
| 		$this->assertEquals($url, Router::url($url)); | ||||
| 
 | ||||
| 		$url = 'sms:012345-678'; | ||||
| 		$this->assertEquals($url, Router::url($url)); | ||||
| 
 | ||||
| 		$url = '#here'; | ||||
| 		$this->assertEquals($url, Router::url($url)); | ||||
| 
 | ||||
| 		$url = '?param=0'; | ||||
| 		$this->assertEquals($url, Router::url($url)); | ||||
| 
 | ||||
| 		$url = 'posts/index#here'; | ||||
| 		$expected = FULL_BASE_URL . '/posts/index#here'; | ||||
| 		$this->assertEquals($expected, Router::url($url, true)); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  | @ -2542,22 +2712,22 @@ class RouterTest extends CakeTestCase { | |||
| 	public function testResourceMap() { | ||||
| 		$default = Router::resourceMap(); | ||||
| 		$expected = array( | ||||
| 			array('action' => 'index',	'method' => 'GET',		'id' => false), | ||||
| 			array('action' => 'view',	'method' => 'GET',		'id' => true), | ||||
| 			array('action' => 'add',	'method' => 'POST',		'id' => false), | ||||
| 			array('action' => 'edit',	'method' => 'PUT', 		'id' => true), | ||||
| 			array('action' => 'delete',	'method' => 'DELETE',	'id' => true), | ||||
| 			array('action' => 'edit',	'method' => 'POST', 	'id' => true) | ||||
| 			array('action' => 'index', 'method' => 'GET', 'id' => false), | ||||
| 			array('action' => 'view', 'method' => 'GET', 'id' => true), | ||||
| 			array('action' => 'add', 'method' => 'POST', 'id' => false), | ||||
| 			array('action' => 'edit', 'method' => 'PUT', 'id' => true), | ||||
| 			array('action' => 'delete', 'method' => 'DELETE', 'id' => true), | ||||
| 			array('action' => 'edit', 'method' => 'POST', 'id' => true) | ||||
| 		); | ||||
| 		$this->assertEquals($default, $expected); | ||||
| 		$this->assertEquals($expected, $default); | ||||
| 
 | ||||
| 		$custom = array( | ||||
| 			array('action' => 'index',	'method' => 'GET',		'id' => false), | ||||
| 			array('action' => 'view',	'method' => 'GET',		'id' => true), | ||||
| 			array('action' => 'add',	'method' => 'POST',		'id' => false), | ||||
| 			array('action' => 'edit',	'method' => 'PUT', 		'id' => true), | ||||
| 			array('action' => 'delete',	'method' => 'DELETE',	'id' => true), | ||||
| 			array('action' => 'update',	'method' => 'POST', 	'id' => true) | ||||
| 			array('action' => 'index', 'method' => 'GET', 'id' => false), | ||||
| 			array('action' => 'view', 'method' => 'GET', 'id' => true), | ||||
| 			array('action' => 'add', 'method' => 'POST', 'id' => false), | ||||
| 			array('action' => 'edit', 'method' => 'PUT', 'id' => true), | ||||
| 			array('action' => 'delete', 'method' => 'DELETE', 'id' => true), | ||||
| 			array('action' => 'update', 'method' => 'POST', 'id' => true) | ||||
| 		); | ||||
| 		Router::resourceMap($custom); | ||||
| 		$this->assertEquals(Router::resourceMap(), $custom); | ||||
|  | @ -2631,7 +2801,7 @@ class RouterTest extends CakeTestCase { | |||
|  * @return void | ||||
|  */ | ||||
| 	public function testSettingInvalidDefaultRouteException() { | ||||
| 		Router::defaultRouteClass('Object'); | ||||
| 		Router::defaultRouteClass('CakeObject'); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Brm Ko
						Brm Ko