|
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/ChildNodeAccessFacetViewHelper.php'); 00024 require_once(dirname(__FILE__) . '/../../Fixtures/TestViewHelper.php'); 00025 00026 /** 00027 * Testcase for [insert classname here] 00028 * 00029 * @license http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public License, version 3 or later 00030 */ 00031 class Tx_Fluid_Tests_Unit_Core_Parser_SyntaxTree_ViewHelperNodeTest extends Tx_Extbase_Tests_Unit_BaseTestCase { 00032 00033 /** 00034 * Rendering Context 00035 * @var Tx_Fluid_Core_Rendering_RenderingContext 00036 */ 00037 protected $renderingContext; 00038 00039 /** 00040 * Object factory mock 00041 * @var Tx_Extbase_Object_ObjectManagerInterface 00042 */ 00043 protected $mockObjectManager; 00044 00045 /** 00046 * Template Variable Container 00047 * @var Tx_Fluid_Core_ViewHelper_TemplateVariableContainer 00048 */ 00049 protected $templateVariableContainer; 00050 00051 /** 00052 * 00053 * @var Tx_Extbase_MVC_Controller_ControllerContext 00054 */ 00055 protected $controllerContext; 00056 00057 /** 00058 * @var Tx_Fluid_Core_ViewHelper_ViewHelperVariableContainer 00059 */ 00060 protected $viewHelperVariableContainer; 00061 00062 /** 00063 * Setup fixture 00064 * @author Sebastian Kurfürst <sebastian@typo3.org> 00065 */ 00066 public function setUp() { 00067 $this->renderingContext = new Tx_Fluid_Core_Rendering_RenderingContext(); 00068 00069 $this->mockObjectManager = $this->getMock('Tx_Extbase_Object_ObjectManagerInterface'); 00070 $this->renderingContext->injectObjectManager($this->mockObjectManager); 00071 00072 $this->templateVariableContainer = $this->getMock('Tx_Fluid_Core_ViewHelper_TemplateVariableContainer'); 00073 $this->renderingContext->setTemplateVariableContainer($this->templateVariableContainer); 00074 00075 $this->controllerContext = $this->getMock('Tx_Extbase_MVC_Controller_ControllerContext', array(), array(), '', FALSE); 00076 $this->renderingContext->setControllerContext($this->controllerContext); 00077 00078 $this->viewHelperVariableContainer = $this->getMock('Tx_Fluid_Core_ViewHelper_ViewHelperVariableContainer'); 00079 $this->renderingContext->setViewHelperVariableContainer($this->viewHelperVariableContainer); 00080 } 00081 00082 /** 00083 * @test 00084 * @author Bastian Waidelich <bastian@typo3.org> 00085 */ 00086 public function constructorSetsViewHelperAndArguments() { 00087 $viewHelper = $this->getMock('Tx_Fluid_Core_ViewHelper_AbstractViewHelper'); 00088 $arguments = array('foo' => 'bar'); 00089 $viewHelperNode = $this->getAccessibleMock('Tx_Fluid_Core_Parser_SyntaxTree_ViewHelperNode', array('dummy'), array($viewHelper, $arguments)); 00090 00091 $this->assertEquals(get_class($viewHelper), $viewHelperNode->getViewHelperClassName()); 00092 $this->assertEquals($arguments, $viewHelperNode->_get('arguments')); 00093 } 00094 00095 /** 00096 * @test 00097 * @author Sebastian Kurfürst <sebastian@typo3.org> 00098 * @author Bastian Waidelich <bastian@typo3.org> 00099 */ 00100 public function childNodeAccessFacetWorksAsExpected() { 00101 $childNode = $this->getMock('Tx_Fluid_Core_Parser_SyntaxTree_TextNode', array(), array('foo')); 00102 00103 $mockViewHelper = $this->getMock('Tx_Fluid_Core_Parser_Fixtures_ChildNodeAccessFacetViewHelper', array('setChildNodes', 'initializeArguments', 'render', 'prepareArguments')); 00104 00105 $mockViewHelperArguments = $this->getMock('Tx_Fluid_Core_ViewHelper_Arguments', array(), array(), '', FALSE); 00106 00107 $this->mockObjectManager->expects($this->once())->method('create')->with('Tx_Fluid_Core_ViewHelper_Arguments')->will($this->returnValue($mockViewHelperArguments)); 00108 00109 $viewHelperNode = new Tx_Fluid_Core_Parser_SyntaxTree_ViewHelperNode($mockViewHelper, array()); 00110 $viewHelperNode->addChildNode($childNode); 00111 00112 $mockViewHelper->expects($this->once())->method('setChildNodes')->with($this->equalTo(array($childNode))); 00113 00114 $viewHelperNode->evaluate($this->renderingContext); 00115 } 00116 00117 /** 00118 * @test 00119 * @author Sebastian Kurfürst <sebastian@typo3.org> 00120 * @author Bastian Waidelich <bastian@typo3.org> 00121 */ 00122 public function initializeArgumentsAndRenderIsCalledByViewHelperNode() { 00123 $mockViewHelper = $this->getMock('Tx_Fluid_Core_ViewHelper_AbstractViewHelper', array('initializeArgumentsAndRender', 'prepareArguments')); 00124 $mockViewHelper->expects($this->once())->method('initializeArgumentsAndRender'); 00125 00126 $mockViewHelperArguments = $this->getMock('Tx_Fluid_Core_ViewHelper_Arguments', array(), array(), '', FALSE); 00127 00128 $this->mockObjectManager->expects($this->once())->method('create')->with('Tx_Fluid_Core_ViewHelper_Arguments')->will($this->returnValue($mockViewHelperArguments)); 00129 00130 $viewHelperNode = new Tx_Fluid_Core_Parser_SyntaxTree_ViewHelperNode($mockViewHelper, array()); 00131 00132 $viewHelperNode->evaluate($this->renderingContext); 00133 } 00134 00135 /** 00136 * @test 00137 * @author Sebastian Kurfürst <sebastian@typo3.org> 00138 * @author Bastian Waidelich <bastian@typo3.org> 00139 */ 00140 public function initializeArgumentsAndRenderIsCalledWithCorrectArguments() { 00141 $arguments = array( 00142 'param0' => new Tx_Fluid_Core_ViewHelper_ArgumentDefinition('param1', 'string', 'Hallo', TRUE, null, FALSE), 00143 'param1' => new Tx_Fluid_Core_ViewHelper_ArgumentDefinition('param1', 'string', 'Hallo', TRUE, null, TRUE), 00144 'param2' => new Tx_Fluid_Core_ViewHelper_ArgumentDefinition('param2', 'string', 'Hallo', TRUE, null, TRUE) 00145 ); 00146 00147 $mockViewHelper = $this->getMock('Tx_Fluid_Core_ViewHelper_AbstractViewHelper', array('initializeArgumentsAndRender', 'prepareArguments')); 00148 $mockViewHelper->expects($this->any())->method('prepareArguments')->will($this->returnValue($arguments)); 00149 $mockViewHelper->expects($this->once())->method('initializeArgumentsAndRender')->with(array('param1' => 'a', 'param2' => 'b')); 00150 00151 $mockViewHelperArguments = $this->getMock('Tx_Fluid_Core_ViewHelper_Arguments', array(), array(), '', FALSE); 00152 00153 $this->mockObjectManager->expects($this->once())->method('create')->with('Tx_Fluid_Core_ViewHelper_Arguments')->will($this->returnValue($mockViewHelperArguments)); 00154 00155 $viewHelperNode = new Tx_Fluid_Core_Parser_SyntaxTree_ViewHelperNode($mockViewHelper, array( 00156 'param2' => new Tx_Fluid_Core_Parser_SyntaxTree_TextNode('b'), 00157 'param1' => new Tx_Fluid_Core_Parser_SyntaxTree_TextNode('a'), 00158 )); 00159 00160 $viewHelperNode->evaluate($this->renderingContext); 00161 } 00162 00163 /** 00164 * @test 00165 * @author Sebastian Kurfürst <sebastian@typo3.org> 00166 */ 00167 public function evaluateMethodPassesControllerContextToViewHelper() { 00168 $mockViewHelper = $this->getMock('Tx_Fluid_Core_ViewHelper_AbstractViewHelper', array('render', 'validateArguments', 'prepareArguments', 'setControllerContext')); 00169 $mockViewHelper->expects($this->once())->method('setControllerContext')->with($this->controllerContext); 00170 00171 $viewHelperNode = new Tx_Fluid_Core_Parser_SyntaxTree_ViewHelperNode($mockViewHelper, array()); 00172 $mockViewHelperArguments = $this->getMock('Tx_Fluid_Core_ViewHelper_Arguments', array(), array(), '', FALSE); 00173 00174 $this->mockObjectManager->expects($this->once())->method('create')->with('Tx_Fluid_Core_ViewHelper_Arguments')->will($this->returnValue($mockViewHelperArguments)); 00175 00176 $viewHelperNode->evaluate($this->renderingContext); 00177 } 00178 00179 /** 00180 * @test 00181 * @author Sebastian Kurfürst <sebastian@typo3.org> 00182 */ 00183 public function evaluateMethodPassesViewHelperVariableContainerToViewHelper() { 00184 $mockViewHelper = $this->getMock('Tx_Fluid_Core_ViewHelper_AbstractViewHelper', array('render', 'validateArguments', 'prepareArguments', 'setViewHelperVariableContainer')); 00185 $mockViewHelper->expects($this->once())->method('setViewHelperVariableContainer')->with($this->viewHelperVariableContainer); 00186 00187 $viewHelperNode = new Tx_Fluid_Core_Parser_SyntaxTree_ViewHelperNode($mockViewHelper, array()); 00188 $mockViewHelperArguments = $this->getMock('Tx_Fluid_Core_ViewHelper_Arguments', array(), array(), '', FALSE); 00189 00190 $this->mockObjectManager->expects($this->once())->method('create')->with('Tx_Fluid_Core_ViewHelper_Arguments')->will($this->returnValue($mockViewHelperArguments)); 00191 00192 $viewHelperNode->evaluate($this->renderingContext); 00193 } 00194 00195 /** 00196 * @test 00197 * @author Sebastian Kurfürst <sebastian@typo3.org> 00198 */ 00199 public function multipleEvaluateCallsShareTheSameViewHelperInstance() { 00200 $mockViewHelper = $this->getMock('Tx_Fluid_Core_ViewHelper_AbstractViewHelper', array('render', 'validateArguments', 'prepareArguments', 'setViewHelperVariableContainer')); 00201 $mockViewHelper->expects($this->any())->method('render')->will($this->returnValue('String')); 00202 00203 $viewHelperNode = new Tx_Fluid_Core_Parser_SyntaxTree_ViewHelperNode($mockViewHelper, array()); 00204 $mockViewHelperArguments = $this->getMock('Tx_Fluid_Core_ViewHelper_Arguments', array(), array(), '', FALSE); 00205 00206 $this->mockObjectManager->expects($this->at(0))->method('create')->with('Tx_Fluid_Core_ViewHelper_Arguments')->will($this->returnValue($mockViewHelperArguments)); 00207 $this->mockObjectManager->expects($this->at(1))->method('create')->with('Tx_Fluid_Core_ViewHelper_Arguments')->will($this->returnValue($mockViewHelperArguments)); 00208 00209 $viewHelperNode->evaluate($this->renderingContext); 00210 $viewHelperNode->evaluate($this->renderingContext); 00211 } 00212 00213 /** 00214 * @test 00215 * @author Bastian Waidelich <bastian@typo3.org> 00216 */ 00217 public function convertArgumentValueCallsConvertToBooleanForArgumentsOfTypeBoolean() { 00218 $viewHelperNode = $this->getAccessibleMock('Tx_Fluid_Core_Parser_SyntaxTree_ViewHelperNode', array('convertToBoolean'), array(), '', FALSE); 00219 $argumentViewHelperNode = $this->getMock('Tx_Fluid_Core_Parser_SyntaxTree_AbstractNode', array('evaluate'), array(), '', FALSE); 00220 $argumentViewHelperNode->expects($this->once())->method('evaluate')->will($this->returnValue('foo')); 00221 00222 $viewHelperNode->expects($this->once())->method('convertToBoolean')->with('foo')->will($this->returnValue('bar')); 00223 00224 $actualResult = $viewHelperNode->_call('convertArgumentValue', $argumentViewHelperNode, 'boolean', $this->renderingContext); 00225 $this->assertEquals('bar', $actualResult); 00226 } 00227 00228 /** 00229 * @test 00230 * @author Bastian Waidelich <bastian@typo3.org> 00231 */ 00232 public function convertToBooleanProperlyConvertsValuesOfTypeBoolean() { 00233 $viewHelperNode = $this->getAccessibleMock('Tx_Fluid_Core_Parser_SyntaxTree_ViewHelperNode', array('dummy'), array(), '', FALSE); 00234 00235 $this->assertFalse($viewHelperNode->_call('convertToBoolean', FALSE)); 00236 $this->assertTrue($viewHelperNode->_call('convertToBoolean', TRUE)); 00237 } 00238 00239 /** 00240 * @test 00241 * @author Bastian Waidelich <bastian@typo3.org> 00242 */ 00243 public function convertToBooleanProperlyConvertsValuesOfTypeString() { 00244 $viewHelperNode = $this->getAccessibleMock('Tx_Fluid_Core_Parser_SyntaxTree_ViewHelperNode', array('dummy'), array(), '', FALSE); 00245 00246 $this->assertFalse($viewHelperNode->_call('convertToBoolean', '')); 00247 $this->assertFalse($viewHelperNode->_call('convertToBoolean', 'false')); 00248 $this->assertFalse($viewHelperNode->_call('convertToBoolean', 'FALSE')); 00249 00250 $this->assertTrue($viewHelperNode->_call('convertToBoolean', 'true')); 00251 $this->assertTrue($viewHelperNode->_call('convertToBoolean', 'TRUE')); 00252 } 00253 00254 /** 00255 * @test 00256 * @author Bastian Waidelich <bastian@typo3.org> 00257 */ 00258 public function convertToBooleanProperlyConvertsNumericValues() { 00259 $viewHelperNode = $this->getAccessibleMock('Tx_Fluid_Core_Parser_SyntaxTree_ViewHelperNode', array('dummy'), array(), '', FALSE); 00260 00261 $this->assertFalse($viewHelperNode->_call('convertToBoolean', 0)); 00262 $this->assertFalse($viewHelperNode->_call('convertToBoolean', -1)); 00263 $this->assertFalse($viewHelperNode->_call('convertToBoolean', '-1')); 00264 $this->assertFalse($viewHelperNode->_call('convertToBoolean', -.5)); 00265 00266 $this->assertTrue($viewHelperNode->_call('convertToBoolean', 1)); 00267 $this->assertTrue($viewHelperNode->_call('convertToBoolean', .5)); 00268 } 00269 00270 /** 00271 * @test 00272 * @author Bastian Waidelich <bastian@typo3.org> 00273 */ 00274 public function convertToBooleanProperlyConvertsValuesOfTypeArray() { 00275 $viewHelperNode = $this->getAccessibleMock('Tx_Fluid_Core_Parser_SyntaxTree_ViewHelperNode', array('dummy'), array(), '', FALSE); 00276 00277 $this->assertFalse($viewHelperNode->_call('convertToBoolean', array())); 00278 00279 $this->assertTrue($viewHelperNode->_call('convertToBoolean', array('foo'))); 00280 $this->assertTrue($viewHelperNode->_call('convertToBoolean', array('foo' => 'bar'))); 00281 } 00282 00283 /** 00284 * @test 00285 * @author Bastian Waidelich <bastian@typo3.org> 00286 */ 00287 public function convertToBooleanProperlyConvertsObjects() { 00288 $viewHelperNode = $this->getAccessibleMock('Tx_Fluid_Core_Parser_SyntaxTree_ViewHelperNode', array('dummy'), array(), '', FALSE); 00289 00290 $this->assertFalse($viewHelperNode->_call('convertToBoolean', NULL)); 00291 00292 $this->assertTrue($viewHelperNode->_call('convertToBoolean', new stdClass())); 00293 } 00294 } 00295 00296 ?>
1.8.0