TYPO3 API  SVNRelease
ViewHelperNodeTest.php
Go to the documentation of this file.
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 ?>