| [ Index ] |
PHP Cross Reference of Limb3 |
[Summary view] [Print] [Text view]
1 <?php 2 /* 3 * Limb PHP Framework 4 * 5 * @link http://limb-project.com 6 * @copyright Copyright © 2004-2007 BIT(http://bit-creative.com) 7 * @license LGPL http://www.gnu.org/copyleft/lesser.html 8 */ 9 lmb_require('limb/filter_chain/src/lmbFilterChain.class.php'); 10 lmb_require('limb/web_app/src/filter/lmbRequestDispatchingFilter.class.php'); 11 lmb_require('limb/web_app/src/request/lmbRequestDispatcher.interface.php'); 12 lmb_require('limb/toolkit/src/lmbMockToolsWrapper.class.php'); 13 lmb_require('limb/web_app/src/toolkit/lmbWebAppTools.class.php'); 14 lmb_require('limb/web_app/src/controller/lmbStaticCommandController.class.php'); 15 16 Mock :: generate('lmbFilterChain', 'MockFilterChain'); 17 Mock :: generate('lmbRequestDispatcher', 'MockRequestDispatcher'); 18 Mock :: generate('lmbWebAppTools', 'MockWebAppTools'); 19 20 class lmbRequestDispatchingTestingController extends lmbStaticCommandController 21 { 22 function __construct($name) 23 { 24 $this->name = $name; 25 parent :: __construct(); 26 } 27 28 protected function _defineActions() 29 { 30 return array('display' => array()); 31 } 32 } 33 34 //this class used to test exceptions since SimpleTest does not support exception generation by mocks yet. 35 class lmbRequestDispatchingFilterTestTools extends lmbAbstractTools 36 { 37 protected $exception_controller_name; 38 protected $controller; 39 40 function __construct($exception_controller_name) 41 { 42 $this->exception_controller_name = $exception_controller_name; 43 } 44 45 function setController($controller) 46 { 47 $this->controller = $controller; 48 } 49 50 function createController($controller_name) 51 { 52 if($controller_name == $this->exception_controller_name) 53 throw new lmbException('Controller not created!'); 54 else 55 return $this->controller; 56 } 57 } 58 59 class lmbRequestDispatchingFilterTest extends UnitTestCase 60 { 61 protected $toolkit; 62 protected $request; 63 protected $mock_tools; 64 protected $dispatcher; 65 protected $filter; 66 protected $chain; 67 68 function setUp() 69 { 70 $this->mock_tools = new MockWebAppTools(); 71 $tools = new lmbMockToolsWrapper($this->mock_tools, array('createController')); 72 73 lmbToolkit :: save(); 74 $this->toolkit = lmbToolkit :: merge($tools); 75 $this->request = $this->toolkit->getRequest(); 76 77 $this->dispatcher = new MockRequestDispatcher(); 78 $this->filter = new lmbRequestDispatchingFilter($this->dispatcher); 79 $this->chain = new MockFilterChain(); 80 } 81 82 function tearDown() 83 { 84 lmbToolkit :: restore(); 85 } 86 87 protected function _setUpMocks($dispatched_params, $controller = null, $default_controller_name = '') 88 { 89 $this->chain->expectOnce('next'); 90 91 $this->dispatcher->expectOnce('dispatch', array($this->request)); 92 $this->dispatcher->setReturnValue('dispatch', $dispatched_params); 93 94 if($controller) 95 { 96 $this->mock_tools->expectArgumentsAt(0, 'createController', array($controller->getName())); 97 $this->mock_tools->setReturnValueAt(0, 'createController', $controller, array($controller->getName())); 98 } 99 } 100 101 function testSetDispatchedRequestInToolkit() 102 { 103 $controller = new lmbRequestDispatchingTestingController($controller_name = 'SomeController'); 104 105 $dispatched_params = array('controller' => $controller_name, 106 'action' => 'display'); 107 108 $this->_setUpMocks($dispatched_params, $controller); 109 110 $this->filter->run($this->chain); 111 112 $this->assertDispatchedOk($controller, 'display', __LINE__); 113 } 114 115 function testUseDefaultActionFromControllerIsActionWasNotDispatchedFromRequest() 116 { 117 $dispatched_params = array('controller' => $controller_name = 'SomeController'); 118 119 $controller = new lmbRequestDispatchingTestingController($controller_name); 120 121 $this->_setUpMocks($dispatched_params, $controller); 122 123 $this->filter->run($this->chain); 124 125 $this->assertDispatchedOk($controller, $controller->getDefaultAction(), __LINE__); 126 } 127 128 function testUse404ControllerIsNoSuchActionInDispatchedController() 129 { 130 $dispatched_params = array('controller' => $controller_name = 'SomeController', 131 'action' => 'no_such_action'); 132 133 $controller = new lmbRequestDispatchingTestingController($controller_name); 134 135 $this->_setUpMocks($dispatched_params, $controller); 136 137 $not_found_controller = new lmbRequestDispatchingTestingController('404'); 138 139 $this->mock_tools->expectArgumentsAt(1, 'createController', array('404')); 140 $this->mock_tools->setReturnValueAt(1, 'createController', $not_found_controller, array('404')); 141 142 $this->filter->setDefaultControllerName('404'); 143 $this->filter->run($this->chain); 144 145 $this->assertDispatchedOk($not_found_controller, $not_found_controller->getDefaultAction(), __LINE__); 146 } 147 148 function testControllerParamIsEmpty() 149 { 150 $this->filter->setDefaultControllerName('404'); 151 152 $dispatched_params = array('id' => 150); 153 154 $controller = new lmbRequestDispatchingTestingController('404'); 155 156 $this->_setUpMocks($dispatched_params, $controller); 157 158 $this->filter->run($this->chain); 159 160 $this->assertDispatchedOk($controller, 'display', __LINE__); 161 } 162 163 function testNoSuchController() 164 { 165 $this->filter->setDefaultControllerName($default_controller_name = '404'); 166 167 $dispatched_params = array('controller' => $exception_controller_name = 'no_such_controller'. time()); 168 169 $this->_setUpMocks($dispatched_params); 170 171 $tools = new lmbRequestDispatchingFilterTestTools($exception_controller_name); 172 $tools->setController($controller = new lmbRequestDispatchingTestingController($default_controller_name)); 173 174 $this->toolkit = lmbToolkit :: merge($tools); 175 176 $this->filter->run($this->chain); 177 178 $this->assertDispatchedOk($controller, 'display', __LINE__); 179 } 180 181 function testPutOtherParamsToRequest() 182 { 183 $dispatched_params = array('controller' => 'SomeController', 184 'id' => 150, 185 'extra' => 'bla-bla'); 186 187 $controller = new lmbRequestDispatchingTestingController('SomeController'); 188 $this->_setUpMocks($dispatched_params, $controller); 189 190 $this->filter->run($this->chain); 191 192 $this->assertDispatchedOk($controller, $controller->getDefaultAction(), __LINE__); 193 194 $this->assertEqual($this->request->get('id'), 150); 195 $this->assertEqual($this->request->get('extra'), 'bla-bla'); 196 } 197 198 function assertDispatchedOk($controller, $action, $line) 199 { 200 $dispatched_request = $this->toolkit->getDispatchedController(); 201 $this->assertEqual($dispatched_request->getName(), $controller->getName(), '%s ' . $line); 202 $this->assertEqual($dispatched_request->getCurrentAction(), $action, '%s ' . $line); 203 } 204 } 205 206 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Mon Dec 1 03:56:46 2008 | Cross-referenced by PHPXref 0.7 |