FrontcontrollerTest.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418
  1. <?php
  2. /**
  3. * Zend Framework
  4. *
  5. * LICENSE
  6. *
  7. * This source file is subject to the new BSD license that is bundled
  8. * with this package in the file LICENSE.txt.
  9. * It is also available through the world-wide-web at this URL:
  10. * http://framework.zend.com/license/new-bsd
  11. * If you did not receive a copy of the license and are unable to
  12. * obtain it through the world-wide-web, please send an email
  13. * to license@zend.com so we can send you a copy immediately.
  14. *
  15. * @category Zend
  16. * @package Zend_Application
  17. * @subpackage UnitTests
  18. * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
  19. * @license http://framework.zend.com/license/new-bsd New BSD License
  20. * @version $Id$
  21. */
  22. if (!defined('PHPUnit_MAIN_METHOD')) {
  23. define('PHPUnit_MAIN_METHOD', 'Zend_Application_Resource_FrontcontrollerTest::main');
  24. }
  25. /**
  26. * Zend_Loader_Autoloader
  27. */
  28. require_once 'Zend/Loader/Autoloader.php';
  29. /**
  30. * Zend_Controller_Front
  31. */
  32. require_once 'Zend/Controller/Front.php';
  33. /**
  34. * @category Zend
  35. * @package Zend_Application
  36. * @subpackage UnitTests
  37. * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
  38. * @license http://framework.zend.com/license/new-bsd New BSD License
  39. * @group Zend_Application
  40. */
  41. class Zend_Application_Resource_FrontcontrollerTest extends PHPUnit_Framework_TestCase
  42. {
  43. public static function main()
  44. {
  45. $suite = new PHPUnit_Framework_TestSuite(__CLASS__);
  46. $result = PHPUnit_TextUI_TestRunner::run($suite);
  47. }
  48. public function setUp()
  49. {
  50. // Store original autoloaders
  51. $this->loaders = spl_autoload_functions();
  52. if (!is_array($this->loaders)) {
  53. // spl_autoload_functions does not return empty array when no
  54. // autoloaders registered...
  55. $this->loaders = array();
  56. }
  57. Zend_Loader_Autoloader::resetInstance();
  58. $this->autoloader = Zend_Loader_Autoloader::getInstance();
  59. $this->application = new Zend_Application('testing');
  60. require_once dirname(__FILE__) . '/../_files/ZfAppBootstrap.php';
  61. $this->bootstrap = new ZfAppBootstrap($this->application);
  62. }
  63. public function tearDown()
  64. {
  65. // Restore original autoloaders
  66. $loaders = spl_autoload_functions();
  67. foreach ($loaders as $loader) {
  68. spl_autoload_unregister($loader);
  69. }
  70. foreach ($this->loaders as $loader) {
  71. spl_autoload_register($loader);
  72. }
  73. Zend_Controller_Front::getInstance()->resetInstance();
  74. // Reset autoloader instance so it doesn't affect other tests
  75. Zend_Loader_Autoloader::resetInstance();
  76. }
  77. public function testInitializationCreatesFrontControllerInstance()
  78. {
  79. require_once 'Zend/Application/Resource/Frontcontroller.php';
  80. $resource = new Zend_Application_Resource_Frontcontroller(array());
  81. $resource->init();
  82. $this->assertTrue($resource->getFrontController() instanceof Zend_Controller_Front);
  83. }
  84. public function testInitializationPushesFrontControllerToBootstrapWhenPresent()
  85. {
  86. require_once 'Zend/Application/Resource/Frontcontroller.php';
  87. $resource = new Zend_Application_Resource_Frontcontroller(array());
  88. $resource->setBootstrap($this->bootstrap);
  89. $resource->init();
  90. $this->assertSame($resource->getFrontController(), $this->bootstrap->frontController);
  91. }
  92. public function testShouldSetControllerDirectoryWhenStringOptionPresent()
  93. {
  94. require_once 'Zend/Application/Resource/Frontcontroller.php';
  95. $resource = new Zend_Application_Resource_Frontcontroller(array(
  96. 'controllerDirectory' => dirname(__FILE__),
  97. ));
  98. $resource->init();
  99. $front = $resource->getFrontController();
  100. $dir = $front->getControllerDirectory('default');
  101. $this->assertEquals(dirname(__FILE__), $dir);
  102. }
  103. public function testShouldSetControllerDirectoryWhenArrayOptionPresent()
  104. {
  105. require_once 'Zend/Application/Resource/Frontcontroller.php';
  106. $resource = new Zend_Application_Resource_Frontcontroller(array(
  107. 'controllerDirectory' => array(
  108. 'foo' => dirname(__FILE__),
  109. ),
  110. ));
  111. $resource->init();
  112. $front = $resource->getFrontController();
  113. $dir = $front->getControllerDirectory('foo');
  114. $this->assertEquals(dirname(__FILE__), $dir);
  115. }
  116. /**
  117. * @group ZF-6458
  118. */
  119. public function testAllControllerDirectoriesShouldBeSetWhenArrayPassedToControllerDirectoryOption()
  120. {
  121. require_once 'Zend/Application/Resource/Frontcontroller.php';
  122. $resource = new Zend_Application_Resource_Frontcontroller(array(
  123. 'controllerDirectory' => array(
  124. 'foo' => dirname(__FILE__),
  125. 'bar' => dirname(__FILE__),
  126. ),
  127. ));
  128. $resource->init();
  129. $front = $resource->getFrontController();
  130. $dirs = $front->getControllerDirectory();
  131. $this->assertEquals(array(
  132. 'foo' => dirname(__FILE__),
  133. 'bar' => dirname(__FILE__),
  134. ), $dirs);
  135. }
  136. public function testShouldSetModuleControllerDirectoryNameWhenOptionPresent()
  137. {
  138. require_once 'Zend/Application/Resource/Frontcontroller.php';
  139. $resource = new Zend_Application_Resource_Frontcontroller(array(
  140. 'moduleControllerDirectoryName' => 'foo',
  141. ));
  142. $resource->init();
  143. $front = $resource->getFrontController();
  144. $dir = $front->getModuleControllerDirectoryName();
  145. $this->assertEquals('foo', $dir);
  146. }
  147. public function testShouldSetModuleDirectoryWhenOptionPresent()
  148. {
  149. require_once 'Zend/Application/Resource/Frontcontroller.php';
  150. $resource = new Zend_Application_Resource_Frontcontroller(array(
  151. 'moduleDirectory' => dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR
  152. . '_files' . DIRECTORY_SEPARATOR . 'modules',
  153. ));
  154. $resource->init();
  155. $front = $resource->getFrontController();
  156. $dir = $front->getControllerDirectory();
  157. $expected = array(
  158. 'bar' => dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR
  159. . '_files' . DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR
  160. . 'bar' . DIRECTORY_SEPARATOR . 'controllers',
  161. 'default' => dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR
  162. . '_files' . DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR
  163. . 'default' . DIRECTORY_SEPARATOR . 'controllers',
  164. 'foo-bar' => dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR
  165. . '_files' . DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR
  166. . 'foo-bar' . DIRECTORY_SEPARATOR . 'controllers',
  167. 'foo' => dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR
  168. . '_files' . DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR
  169. . 'foo' . DIRECTORY_SEPARATOR . 'controllers',
  170. 'baz' => dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR
  171. . '_files' . DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR
  172. . 'baz' . DIRECTORY_SEPARATOR . 'controllers',
  173. 'zfappbootstrap' => dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR
  174. . '_files' . DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR
  175. . 'zfappbootstrap' . DIRECTORY_SEPARATOR . 'controllers',
  176. );
  177. $this->assertEquals($expected, $dir);
  178. }
  179. /**
  180. * @group ZF-9258
  181. */
  182. public function testShouldSetMultipleModuleDirectorysWhenOptionPresent()
  183. {
  184. require_once 'Zend/Application/Resource/Frontcontroller.php';
  185. $resource = new Zend_Application_Resource_Frontcontroller(array(
  186. 'moduleDirectory' => array(dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR
  187. . '_files' . DIRECTORY_SEPARATOR . 'modules',
  188. dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR
  189. . '_files' . DIRECTORY_SEPARATOR . 'more_modules')
  190. ));
  191. $resource->init();
  192. $front = $resource->getFrontController();
  193. $dir = $front->getControllerDirectory();
  194. $expected = array(
  195. 'bar' => dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR
  196. . '_files' . DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR
  197. . 'bar' . DIRECTORY_SEPARATOR . 'controllers',
  198. 'default' => dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR
  199. . '_files' . DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR
  200. . 'default' . DIRECTORY_SEPARATOR . 'controllers',
  201. 'foo-bar' => dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR
  202. . '_files' . DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR
  203. . 'foo-bar' . DIRECTORY_SEPARATOR . 'controllers',
  204. 'foo' => dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR
  205. . '_files' . DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR
  206. . 'foo' . DIRECTORY_SEPARATOR . 'controllers',
  207. 'baz' => dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR
  208. . '_files' . DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR
  209. . 'baz' . DIRECTORY_SEPARATOR . 'controllers',
  210. 'zfappbootstrap' => dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR
  211. . '_files' . DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR
  212. . 'zfappbootstrap' . DIRECTORY_SEPARATOR . 'controllers',
  213. 'bat' => dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR
  214. . '_files' . DIRECTORY_SEPARATOR . 'more_modules' . DIRECTORY_SEPARATOR
  215. . 'bat' . DIRECTORY_SEPARATOR . 'controllers',
  216. 'foobaz' => dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR
  217. . '_files' . DIRECTORY_SEPARATOR . 'more_modules' . DIRECTORY_SEPARATOR
  218. . 'foobaz' . DIRECTORY_SEPARATOR . 'controllers',
  219. );
  220. $this->assertEquals($expected, $dir);
  221. }
  222. public function testShouldSetDefaultControllerNameWhenOptionPresent()
  223. {
  224. require_once 'Zend/Application/Resource/Frontcontroller.php';
  225. $resource = new Zend_Application_Resource_Frontcontroller(array(
  226. 'defaultControllerName' => 'foo',
  227. ));
  228. $resource->init();
  229. $front = $resource->getFrontController();
  230. $test = $front->getDefaultControllerName();
  231. $this->assertEquals('foo', $test);
  232. }
  233. public function testShouldSetDefaultActionWhenOptionPresent()
  234. {
  235. require_once 'Zend/Application/Resource/Frontcontroller.php';
  236. $resource = new Zend_Application_Resource_Frontcontroller(array(
  237. 'defaultAction' => 'foo',
  238. ));
  239. $resource->init();
  240. $front = $resource->getFrontController();
  241. $test = $front->getDefaultAction();
  242. $this->assertEquals('foo', $test);
  243. }
  244. public function testShouldSetDefaultModuleWhenOptionPresent()
  245. {
  246. require_once 'Zend/Application/Resource/Frontcontroller.php';
  247. $resource = new Zend_Application_Resource_Frontcontroller(array(
  248. 'defaultModule' => 'foo',
  249. ));
  250. $resource->init();
  251. $front = $resource->getFrontController();
  252. $test = $front->getDefaultModule();
  253. $this->assertEquals('foo', $test);
  254. }
  255. public function testShouldSetBaseUrlWhenOptionPresent()
  256. {
  257. require_once 'Zend/Application/Resource/Frontcontroller.php';
  258. $resource = new Zend_Application_Resource_Frontcontroller(array(
  259. 'baseUrl' => '/foo',
  260. ));
  261. $resource->init();
  262. $front = $resource->getFrontController();
  263. $test = $front->getBaseUrl();
  264. $this->assertEquals('/foo', $test);
  265. }
  266. public function testShouldSetParamsWhenOptionPresent()
  267. {
  268. $params = array(
  269. 'foo' => 'bar',
  270. 'bar' => 'baz',
  271. );
  272. require_once 'Zend/Application/Resource/Frontcontroller.php';
  273. $resource = new Zend_Application_Resource_Frontcontroller(array(
  274. 'params' => $params,
  275. ));
  276. $resource->init();
  277. $front = $resource->getFrontController();
  278. $test = $front->getParams();
  279. $this->assertEquals($params, $test);
  280. }
  281. public function testShouldInstantiateAndRegisterPluginsWhenOptionPassed()
  282. {
  283. $plugins = array(
  284. 'Zend_Controller_Plugin_ActionStack',
  285. );
  286. require_once 'Zend/Application/Resource/Frontcontroller.php';
  287. $resource = new Zend_Application_Resource_Frontcontroller(array(
  288. 'plugins' => $plugins,
  289. ));
  290. $resource->init();
  291. $front = $resource->getFrontController();
  292. foreach ($plugins as $class) {
  293. $this->assertTrue($front->hasPlugin($class));
  294. }
  295. }
  296. public function testShouldReturnFrontControllerWhenComplete()
  297. {
  298. require_once 'Zend/Application/Resource/Frontcontroller.php';
  299. $resource = new Zend_Application_Resource_Frontcontroller(array(
  300. 'controllerDirectory' => dirname(__FILE__),
  301. ));
  302. $front = $resource->init();
  303. $this->assertTrue($front instanceof Zend_Controller_Front);
  304. }
  305. public function testNoBaseUrlShouldBeSetIfEmptyBaseUrlProvidedInOptions()
  306. {
  307. require_once 'Zend/Application/Resource/Frontcontroller.php';
  308. $resource = new Zend_Application_Resource_Frontcontroller(array(
  309. 'baseurl' => '',
  310. ));
  311. $resource->init();
  312. $front = $resource->getFrontController();
  313. $this->assertNull($front->getBaseUrl());
  314. }
  315. /**
  316. * @group ZF-9044
  317. */
  318. public function testSettingOfRegisterPluginIndexActuallyWorks()
  319. {
  320. $plugins = array(
  321. array('class' => 'Zend_Controller_Plugin_ErrorHandler',
  322. 'stackindex' => 10),
  323. 'Zend_Controller_Plugin_ActionStack',
  324. array('class' => 'Zend_Controller_Plugin_PutHandler',
  325. 'stackIndex' => 5),
  326. );
  327. $expected = array(
  328. 1 => 'Zend_Controller_Plugin_ActionStack',
  329. 5 => 'Zend_Controller_Plugin_PutHandler',
  330. 10 => 'Zend_Controller_Plugin_ErrorHandler',
  331. );
  332. $resource = new Zend_Application_Resource_Frontcontroller(array(
  333. 'plugins' => $plugins
  334. ));
  335. $resource->init();
  336. $front = $resource->getFrontController();
  337. $plugins = $front->getPlugins();
  338. $this->assertEquals(count($expected), count($plugins));
  339. foreach($expected as $index => $class) {
  340. $this->assertEquals($class, get_class($plugins[$index]));
  341. }
  342. }
  343. /**
  344. * @group ZF-7367
  345. */
  346. public function testPassingReturnResponseFlagShouldAlterFrontControllerStatus()
  347. {
  348. require_once 'Zend/Application/Resource/Frontcontroller.php';
  349. $resource = new Zend_Application_Resource_Frontcontroller(array(
  350. 'returnresponse' => true,
  351. ));
  352. $resource->init();
  353. $front = $resource->getFrontController();
  354. $this->assertTrue($front->returnResponse());
  355. }
  356. /**
  357. * @group ZF-9724
  358. */
  359. public function testShouldSetDispatcherFromConfiguration()
  360. {
  361. require_once 'Zend/Application/Resource/Frontcontroller.php';
  362. $resource = new Zend_Application_Resource_Frontcontroller(array(
  363. 'dispatcher' => array(
  364. 'class' => 'ZF9724_Dispatcher',
  365. 'params' => array(
  366. 'bar' => 'baz'
  367. )
  368. )
  369. ));
  370. $resource->init();
  371. $front = $resource->getFrontController();
  372. $this->assertEquals('ZF9724_Dispatcher', get_class($front->getDispatcher()));
  373. $this->assertEquals('baz', $front->getDispatcher()->getParam('bar'));
  374. }
  375. }
  376. require_once 'Zend/Controller/Dispatcher/Standard.php';
  377. class ZF9724_Dispatcher extends Zend_Controller_Dispatcher_Standard {}
  378. if (PHPUnit_MAIN_METHOD == 'Zend_Application_Resource_FrontcontrollerTest::main') {
  379. Zend_Application_Resource_FrontcontrollerTest::main();
  380. }