|
TYPO3 API
SVNRelease
|
00001 <?php 00002 00003 /* * 00004 * This script belongs to the FLOW3 package "Fluid". * 00005 * * 00006 * It is free software; you can redistribute it and/or modify it under * 00007 * the terms of the GNU Lesser General Public License as published by the * 00008 * Free Software Foundation, either version 3 of the License, or (at your * 00009 * option) any later version. * 00010 * * 00011 * This script is distributed in the hope that it will be useful, but * 00012 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN- * 00013 * TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser * 00014 * General Public License for more details. * 00015 * * 00016 * You should have received a copy of the GNU Lesser General Public * 00017 * License along with the script. * 00018 * If not, see http://www.gnu.org/licenses/lgpl.html * 00019 * * 00020 * The TYPO3 project - inspiring people to share! * 00021 * */ 00022 00023 require_once(dirname(__FILE__) . '/Fixtures/EmptySyntaxTreeNode.php'); 00024 require_once(dirname(__FILE__) . '/Fixtures/Fixture_UserDomainClass.php'); 00025 require_once(dirname(__FILE__) . '/../ViewHelperBaseTestcase.php'); 00026 00027 /** 00028 * Test for the "Select" Form view helper 00029 * 00030 * @license http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public License, version 3 or later 00031 */ 00032 class Tx_Fluid_Tests_Unit_ViewHelpers_Form_SelectViewHelperTest extends Tx_Fluid_ViewHelpers_ViewHelperBaseTestcase { 00033 00034 /** 00035 * var Tx_Fluid_ViewHelpers_Form_SelectViewHelper 00036 */ 00037 protected $viewHelper; 00038 00039 public function setUp() { 00040 parent::setUp(); 00041 $this->viewHelper = $this->getAccessibleMock('Tx_Fluid_ViewHelpers_Form_SelectViewHelper', array('setErrorClassAttribute', 'registerFieldNameForFormTokenGeneration')); 00042 $this->injectDependenciesIntoViewHelper($this->viewHelper); 00043 $this->viewHelper->initializeArguments(); 00044 } 00045 00046 /** 00047 * @test 00048 * @author Bastian Waidelich <bastian@typo3.org> 00049 */ 00050 public function selectCorrectlySetsTagName() { 00051 $mockTagBuilder = $this->getMock('Tx_Fluid_Core_ViewHelper_TagBuilder', array('setTagName'), array(), '', FALSE); 00052 $mockTagBuilder->expects($this->once())->method('setTagName')->with('select'); 00053 $this->viewHelper->_set('tag', $mockTagBuilder); 00054 00055 $arguments = new Tx_Fluid_Core_ViewHelper_Arguments(array( 00056 'options' => array() 00057 )); 00058 $this->viewHelper->setArguments($arguments); 00059 00060 $this->viewHelper->initialize(); 00061 $this->viewHelper->render(); 00062 } 00063 00064 /** 00065 * @test 00066 * @author Sebastian Kurfürst <sebastian@typo3.org> 00067 * @author Bastian Waidelich <bastian@typo3.org> 00068 */ 00069 public function selectCreatesExpectedOptions() { 00070 $mockTagBuilder = $this->getMock('Tx_Fluid_Core_ViewHelper_TagBuilder', array('addAttribute', 'setContent', 'render'), array(), '', FALSE); 00071 $mockTagBuilder->expects($this->once())->method('addAttribute')->with('name', 'myName'); 00072 $this->viewHelper->expects($this->once())->method('registerFieldNameForFormTokenGeneration')->with('myName'); 00073 $mockTagBuilder->expects($this->once())->method('setContent')->with('<option value="value1">label1</option>' . chr(10) . '<option value="value2" selected="selected">label2</option>' . chr(10)); 00074 $mockTagBuilder->expects($this->once())->method('render'); 00075 $this->viewHelper->_set('tag', $mockTagBuilder); 00076 00077 $arguments = new Tx_Fluid_Core_ViewHelper_Arguments(array( 00078 'options' => array( 00079 'value1' => 'label1', 00080 'value2' => 'label2' 00081 ), 00082 'value' => 'value2', 00083 'name' => 'myName' 00084 )); 00085 $this->viewHelper->setArguments($arguments); 00086 00087 $this->viewHelper->initialize(); 00088 $this->viewHelper->render(); 00089 } 00090 00091 /** 00092 * @test 00093 * @author Bastian Waidelich <bastian@typo3.org> 00094 */ 00095 public function anEmptyOptionTagIsRenderedIfOptionsArrayIsEmptyToAssureXhtmlCompatibility() { 00096 $mockTagBuilder = $this->getMock('Tx_Fluid_Core_ViewHelper_TagBuilder', array('addAttribute', 'setContent', 'render'), array(), '', FALSE); 00097 $mockTagBuilder->expects($this->once())->method('addAttribute')->with('name', 'myName'); 00098 $this->viewHelper->expects($this->once())->method('registerFieldNameForFormTokenGeneration')->with('myName'); 00099 $mockTagBuilder->expects($this->once())->method('setContent')->with('<option value=""></option>' . chr(10)); 00100 $mockTagBuilder->expects($this->once())->method('render'); 00101 $this->viewHelper->_set('tag', $mockTagBuilder); 00102 00103 $arguments = new Tx_Fluid_Core_ViewHelper_Arguments(array( 00104 'options' => array(), 00105 'value' => 'value2', 00106 'name' => 'myName' 00107 )); 00108 $this->viewHelper->setArguments($arguments); 00109 00110 $this->viewHelper->initialize(); 00111 $this->viewHelper->render(); 00112 } 00113 00114 /** 00115 * @test 00116 * @author Bastian Waidelich <bastian@typo3.org> 00117 */ 00118 public function OrderOfOptionsIsNotAlteredByDefault() { 00119 $mockTagBuilder = $this->getMock('Tx_Fluid_Core_ViewHelper_TagBuilder', array('addAttribute', 'setContent', 'render'), array(), '', FALSE); 00120 $mockTagBuilder->expects($this->once())->method('addAttribute')->with('name', 'myName'); 00121 $this->viewHelper->expects($this->once())->method('registerFieldNameForFormTokenGeneration')->with('myName'); 00122 $mockTagBuilder->expects($this->once())->method('setContent')->with('<option value="value3">label3</option>' . chr(10) . '<option value="value1">label1</option>' . chr(10) . '<option value="value2" selected="selected">label2</option>' . chr(10)); 00123 $mockTagBuilder->expects($this->once())->method('render'); 00124 $this->viewHelper->_set('tag', $mockTagBuilder); 00125 00126 $arguments = new Tx_Fluid_Core_ViewHelper_Arguments(array( 00127 'options' => array( 00128 'value3' => 'label3', 00129 'value1' => 'label1', 00130 'value2' => 'label2' 00131 ), 00132 'value' => 'value2', 00133 'name' => 'myName' 00134 )); 00135 $this->viewHelper->setArguments($arguments); 00136 00137 $this->viewHelper->initialize(); 00138 $this->viewHelper->render(); 00139 } 00140 00141 /** 00142 * @test 00143 * @author Bastian Waidelich <bastian@typo3.org> 00144 */ 00145 public function optionsAreSortedByLabelIfSortByOptionLabelIsSet() { 00146 $mockTagBuilder = $this->getMock('Tx_Fluid_Core_ViewHelper_TagBuilder', array('addAttribute', 'setContent', 'render'), array(), '', FALSE); 00147 $mockTagBuilder->expects($this->once())->method('addAttribute')->with('name', 'myName'); 00148 $this->viewHelper->expects($this->once())->method('registerFieldNameForFormTokenGeneration')->with('myName'); 00149 $mockTagBuilder->expects($this->once())->method('setContent')->with('<option value="value1">label1</option>' . chr(10) . '<option value="value2" selected="selected">label2</option>' . chr(10) . '<option value="value3">label3</option>' . chr(10)); 00150 $mockTagBuilder->expects($this->once())->method('render'); 00151 $this->viewHelper->_set('tag', $mockTagBuilder); 00152 00153 $arguments = new Tx_Fluid_Core_ViewHelper_Arguments(array( 00154 'options' => array( 00155 'value3' => 'label3', 00156 'value1' => 'label1', 00157 'value2' => 'label2' 00158 ), 00159 'value' => 'value2', 00160 'name' => 'myName', 00161 'sortByOptionLabel' => TRUE 00162 )); 00163 $this->viewHelper->setArguments($arguments); 00164 00165 $this->viewHelper->initialize(); 00166 $this->viewHelper->render(); 00167 } 00168 00169 /** 00170 * @test 00171 * @author Bastian Waidelich <bastian@typo3.org> 00172 */ 00173 public function multipleSelectCreatesExpectedOptions() { 00174 $mockTagBuilder = $this->getMock('Tx_Fluid_Core_ViewHelper_TagBuilder', array('addAttribute', 'setContent', 'render'), array(), '', FALSE); 00175 $mockTagBuilder->expects($this->at(0))->method('addAttribute')->with('multiple', 'multiple'); 00176 $mockTagBuilder->expects($this->at(1))->method('addAttribute')->with('name', 'myName[]'); 00177 $this->viewHelper->expects($this->exactly(3))->method('registerFieldNameForFormTokenGeneration')->with('myName[]'); 00178 $mockTagBuilder->expects($this->once())->method('setContent')->with('<option value="value1" selected="selected">label1</option>' . chr(10) . '<option value="value2">label2</option>' . chr(10) . '<option value="value3" selected="selected">label3</option>' . chr(10)); 00179 $mockTagBuilder->expects($this->once())->method('render'); 00180 $this->viewHelper->_set('tag', $mockTagBuilder); 00181 00182 $arguments = new Tx_Fluid_Core_ViewHelper_Arguments(array( 00183 'options' => array( 00184 'value1' => 'label1', 00185 'value2' => 'label2', 00186 'value3' => 'label3' 00187 ), 00188 'value' => array('value3', 'value1'), 00189 'name' => 'myName', 00190 'multiple' => 'multiple', 00191 )); 00192 $this->viewHelper->setArguments($arguments); 00193 00194 $this->viewHelper->initialize(); 00195 $this->viewHelper->render(); 00196 } 00197 00198 /** 00199 * @test 00200 * @author Sebastian Kurfürst <sebastian@typo3.org> 00201 * @author Bastian Waidelich <bastian@typo3.org> 00202 * @author Robert Lemke <robert@typo3.org> 00203 */ 00204 public function selectOnDomainObjectsCreatesExpectedOptions() { 00205 $mockPersistenceBackend = $this->getMock('Tx_Extbase_Persistence_BackendInterface'); 00206 $mockPersistenceBackend->expects($this->any())->method('getIdentifierByObject')->will($this->returnValue(NULL)); 00207 00208 $mockPersistenceManager = $this->getMock('Tx_Extbase_Persistence_ManagerInterface'); 00209 $mockPersistenceManager->expects($this->any())->method('getBackend')->will($this->returnValue($mockPersistenceBackend)); 00210 $this->viewHelper->injectPersistenceManager($mockPersistenceManager); 00211 00212 $mockTagBuilder = $this->getMock('Tx_Fluid_Core_ViewHelper_TagBuilder', array('addAttribute', 'setContent', 'render'), array(), '', FALSE); 00213 $mockTagBuilder->expects($this->once())->method('addAttribute')->with('name', 'myName'); 00214 $this->viewHelper->expects($this->once())->method('registerFieldNameForFormTokenGeneration')->with('myName'); 00215 $mockTagBuilder->expects($this->once())->method('setContent')->with('<option value="1">Ingmar</option>' . chr(10) . '<option value="2" selected="selected">Sebastian</option>' . chr(10) . '<option value="3">Robert</option>' . chr(10)); 00216 $mockTagBuilder->expects($this->once())->method('render'); 00217 $this->viewHelper->_set('tag', $mockTagBuilder); 00218 00219 $user_is = new Tx_Fluid_ViewHelpers_Fixtures_UserDomainClass(1, 'Ingmar', 'Schlecht'); 00220 $user_sk = new Tx_Fluid_ViewHelpers_Fixtures_UserDomainClass(2, 'Sebastian', 'Kurfuerst'); 00221 $user_rl = new Tx_Fluid_ViewHelpers_Fixtures_UserDomainClass(3, 'Robert', 'Lemke'); 00222 00223 $arguments = new Tx_Fluid_Core_ViewHelper_Arguments(array( 00224 'options' => array( 00225 $user_is, 00226 $user_sk, 00227 $user_rl 00228 ), 00229 'value' => $user_sk, 00230 'optionValueField' => 'id', 00231 'optionLabelField' => 'firstName', 00232 'name' => 'myName' 00233 )); 00234 $this->viewHelper->setArguments($arguments); 00235 00236 $this->viewHelper->initialize(); 00237 $this->viewHelper->render(); 00238 } 00239 00240 /** 00241 * @test 00242 * @author Bastian Waidelich <bastian@typo3.org> 00243 */ 00244 public function multipleSelectOnDomainObjectsCreatesExpectedOptions() { 00245 $mockTagBuilder = $this->getMock('Tx_Fluid_Core_ViewHelper_TagBuilder', array('addAttribute', 'setContent', 'render'), array(), '', FALSE); 00246 $mockTagBuilder->expects($this->at(0))->method('addAttribute')->with('multiple', 'multiple'); 00247 $mockTagBuilder->expects($this->at(1))->method('addAttribute')->with('name', 'myName[]'); 00248 $this->viewHelper->expects($this->exactly(3))->method('registerFieldNameForFormTokenGeneration')->with('myName[]'); 00249 $mockTagBuilder->expects($this->once())->method('setContent')->with('<option value="1" selected="selected">Schlecht</option>' . chr(10) . '<option value="2">Kurfuerst</option>' . chr(10) . '<option value="3" selected="selected">Lemke</option>' . chr(10)); 00250 $mockTagBuilder->expects($this->once())->method('render'); 00251 $this->viewHelper->_set('tag', $mockTagBuilder); 00252 00253 $user_is = new Tx_Fluid_ViewHelpers_Fixtures_UserDomainClass(1, 'Ingmar', 'Schlecht'); 00254 $user_sk = new Tx_Fluid_ViewHelpers_Fixtures_UserDomainClass(2, 'Sebastian', 'Kurfuerst'); 00255 $user_rl = new Tx_Fluid_ViewHelpers_Fixtures_UserDomainClass(3, 'Robert', 'Lemke'); 00256 00257 $arguments = new Tx_Fluid_Core_ViewHelper_Arguments(array( 00258 'options' => array( 00259 $user_is, 00260 $user_sk, 00261 $user_rl 00262 ), 00263 'value' => array($user_rl, $user_is), 00264 'optionValueField' => 'id', 00265 'optionLabelField' => 'lastName', 00266 'name' => 'myName', 00267 'multiple' => 'multiple' 00268 )); 00269 $this->viewHelper->setArguments($arguments); 00270 00271 $this->viewHelper->initialize(); 00272 $this->viewHelper->render(); 00273 } 00274 00275 /** 00276 * @test 00277 * @author Karsten Dambekalns <karsten@typo3.org> 00278 */ 00279 public function selectWithoutFurtherConfigurationOnDomainObjectsUsesUuidForValueAndLabel() { $this->markTestIncomplete("This does not work right now due to a renaming in FLOW3."); 00280 $mockPersistenceManager = $this->getMock('Tx_Extbase_Persistence_ManagerInterface'); 00281 $mockPersistenceManager->expects($this->any())->method('getIdentifierByObject')->will($this->returnValue('fakeUID')); 00282 $this->viewHelper->injectPersistenceManager($mockPersistenceManager); 00283 00284 $mockTagBuilder = $this->getMock('Tx_Fluid_Core_ViewHelper_TagBuilder', array('addAttribute', 'setContent', 'render'), array(), '', FALSE); 00285 $mockTagBuilder->expects($this->once())->method('addAttribute')->with('name', 'myName'); 00286 $this->viewHelper->expects($this->once())->method('registerFieldNameForFormTokenGeneration')->with('myName'); 00287 $mockTagBuilder->expects($this->once())->method('setContent')->with('<option value="fakeUID">fakeUID</option>' . chr(10)); 00288 $mockTagBuilder->expects($this->once())->method('render'); 00289 $this->viewHelper->_set('tag', $mockTagBuilder); 00290 00291 $user = new Tx_Fluid_ViewHelpers_Fixtures_UserDomainClass(1, 'Ingmar', 'Schlecht'); 00292 00293 $arguments = new Tx_Fluid_Core_ViewHelper_Arguments(array( 00294 'options' => array( 00295 $user 00296 ), 00297 'name' => 'myName' 00298 )); 00299 $this->viewHelper->setArguments($arguments); 00300 00301 $this->viewHelper->initialize(); 00302 $this->viewHelper->render(); 00303 } 00304 00305 /** 00306 * @test 00307 * @author Karsten Dambekalns <karsten@typo3.org> 00308 */ 00309 public function selectWithoutFurtherConfigurationOnDomainObjectsUsesToStringForLabelIfAvailable() { $this->markTestIncomplete("This does not work right now due to a renaming in FLOW3."); 00310 $mockPersistenceManager = $this->getMock('Tx_Extbase_Persistence_ManagerInterface'); 00311 $mockPersistenceManager->expects($this->any())->method('getIdentifierByObject')->will($this->returnValue('fakeUID')); 00312 $this->viewHelper->injectPersistenceManager($mockPersistenceManager); 00313 00314 $mockTagBuilder = $this->getMock('Tx_Fluid_Core_ViewHelper_TagBuilder', array('addAttribute', 'setContent', 'render'), array(), '', FALSE); 00315 $mockTagBuilder->expects($this->once())->method('addAttribute')->with('name', 'myName'); 00316 $this->viewHelper->expects($this->once())->method('registerFieldNameForFormTokenGeneration')->with('myName'); 00317 $mockTagBuilder->expects($this->once())->method('setContent')->with('<option value="fakeUID">toStringResult</option>' . chr(10)); 00318 $mockTagBuilder->expects($this->once())->method('render'); 00319 $this->viewHelper->_set('tag', $mockTagBuilder); 00320 00321 $user = $this->getMock('Tx_Fluid_ViewHelpers_Fixtures_UserDomainClass', array('__toString'), array(1, 'Ingmar', 'Schlecht')); 00322 $user->expects($this->atLeastOnce())->method('__toString')->will($this->returnValue('toStringResult')); 00323 00324 $arguments = new Tx_Fluid_Core_ViewHelper_Arguments(array( 00325 'options' => array( 00326 $user 00327 ), 00328 'name' => 'myName' 00329 )); 00330 $this->viewHelper->setArguments($arguments); 00331 00332 $this->viewHelper->initialize(); 00333 $this->viewHelper->render(); 00334 } 00335 00336 /** 00337 * @test 00338 * @author Karsten Dambekalns <karsten@typo3.org> 00339 * @expectedException Tx_Fluid_Core_ViewHelper_Exception 00340 */ 00341 public function selectOnDomainObjectsThrowsExceptionIfNoValueCanBeFound() { 00342 $mockPersistenceBackend = $this->getMock('Tx_Extbase_Persistence_BackendInterface'); 00343 $mockPersistenceBackend->expects($this->any())->method('getIdentifierByObject')->will($this->returnValue(NULL)); 00344 00345 $mockPersistenceManager = $this->getMock('Tx_Extbase_Persistence_ManagerInterface'); 00346 $mockPersistenceManager->expects($this->any())->method('getBackend')->will($this->returnValue($mockPersistenceBackend)); 00347 $this->viewHelper->injectPersistenceManager($mockPersistenceManager); 00348 00349 $mockTagBuilder = $this->getMock('Tx_Fluid_Core_ViewHelper_TagBuilder', array('addAttribute', 'setContent', 'render'), array(), '', FALSE); 00350 $this->viewHelper->_set('tag', $mockTagBuilder); 00351 00352 $user = new Tx_Fluid_ViewHelpers_Fixtures_UserDomainClass(1, 'Ingmar', 'Schlecht'); 00353 00354 $arguments = new Tx_Fluid_Core_ViewHelper_Arguments(array( 00355 'options' => array( 00356 $user 00357 ), 00358 'name' => 'myName' 00359 )); 00360 $this->viewHelper->setArguments($arguments); 00361 00362 $this->viewHelper->initialize(); 00363 $this->viewHelper->render(); 00364 } 00365 00366 /** 00367 * @test 00368 * @author Bastian Waidelich <bastian@typo3.org> 00369 */ 00370 public function renderCallsSetErrorClassAttribute() { 00371 $arguments = new Tx_Fluid_Core_ViewHelper_Arguments(array( 00372 'options' => array() 00373 )); 00374 $this->viewHelper->setArguments($arguments); 00375 00376 $this->viewHelper->expects($this->once())->method('setErrorClassAttribute'); 00377 $this->viewHelper->render(); 00378 } 00379 00380 /** 00381 * @test 00382 * @author Bastian Waidelich <bastian@typo3.org> 00383 */ 00384 public function allOptionsAreSelectedIfSelectAllIsTrue() { 00385 $mockTagBuilder = $this->getMock('Tx_Fluid_Core_ViewHelper_TagBuilder', array('addAttribute', 'setContent', 'render'), array(), '', FALSE); 00386 $mockTagBuilder->expects($this->once())->method('setContent')->with('<option value="value1" selected="selected">label1</option>' . chr(10) . '<option value="value2" selected="selected">label2</option>' . chr(10) . '<option value="value3" selected="selected">label3</option>' . chr(10)); 00387 $this->viewHelper->_set('tag', $mockTagBuilder); 00388 00389 $arguments = new Tx_Fluid_Core_ViewHelper_Arguments(array( 00390 'options' => array( 00391 'value1' => 'label1', 00392 'value2' => 'label2', 00393 'value3' => 'label3' 00394 ), 00395 'name' => 'myName', 00396 'multiple' => 'multiple', 00397 'selectAllByDefault' => TRUE 00398 )); 00399 $this->viewHelper->setArguments($arguments); 00400 00401 $this->viewHelper->initialize(); 00402 $this->viewHelper->render(); 00403 } 00404 00405 /** 00406 * @test 00407 * @author Bastian Waidelich <bastian@typo3.org> 00408 */ 00409 public function selectAllHasNoEffectIfValueIsSet() { 00410 $mockTagBuilder = $this->getMock('Tx_Fluid_Core_ViewHelper_TagBuilder', array('addAttribute', 'setContent', 'render'), array(), '', FALSE); 00411 $mockTagBuilder->expects($this->once())->method('setContent')->with('<option value="value1" selected="selected">label1</option>' . chr(10) . '<option value="value2" selected="selected">label2</option>' . chr(10) . '<option value="value3">label3</option>' . chr(10)); 00412 $this->viewHelper->_set('tag', $mockTagBuilder); 00413 00414 $arguments = new Tx_Fluid_Core_ViewHelper_Arguments(array( 00415 'options' => array( 00416 'value1' => 'label1', 00417 'value2' => 'label2', 00418 'value3' => 'label3' 00419 ), 00420 'value' => array('value2', 'value1'), 00421 'name' => 'myName', 00422 'multiple' => 'multiple', 00423 'selectAllByDefault' => TRUE 00424 )); 00425 $this->viewHelper->setArguments($arguments); 00426 00427 $this->viewHelper->initialize(); 00428 $this->viewHelper->render(); 00429 } 00430 } 00431 00432 ?>
1.8.0