From 010135d5cf36dfad8ede5906e68379071b34ccd2 Mon Sep 17 00:00:00 2001 From: Anja Leichsenring <aleichsenring@ab-softlab.de> Date: Sun, 1 Mar 2015 19:45:05 +0100 Subject: [PATCH] [TASK] Make AliasViewHelper Compilable Change-Id: Ib3e5093902b5d2b46d4b2c6a3365abf8340da6ed Resolves: #65438 Releases: master Reviewed-on: http://review.typo3.org/37428 Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch> Tested-by: Christian Kuhn <lolli@schwarzbu.ch> Reviewed-by: Helmut Hummel <helmut.hummel@typo3.org> Tested-by: Helmut Hummel <helmut.hummel@typo3.org> --- .../Classes/ViewHelpers/AliasViewHelper.php | 33 +++++++++++-- .../Unit/ViewHelpers/AliasViewHelperTest.php | 49 +++++++------------ 2 files changed, 48 insertions(+), 34 deletions(-) diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/AliasViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/AliasViewHelper.php index b5df6f1083cc..fac25019e0dc 100644 --- a/typo3/sysext/fluid/Classes/ViewHelpers/AliasViewHelper.php +++ b/typo3/sysext/fluid/Classes/ViewHelpers/AliasViewHelper.php @@ -11,6 +11,10 @@ namespace TYPO3\CMS\Fluid\ViewHelpers; * The TYPO3 project - inspiring people to share! * * */ +use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper; +use TYPO3\CMS\Fluid\Core\ViewHelper\Facets\CompilableInterface; +use TYPO3\CMS\Fluid\Core\Rendering\RenderingContextInterface; + /** * Declares new variables which are aliases of other variables. * Takes a "map"-Parameter which is an associative array which defines the shorthand mapping. @@ -39,21 +43,42 @@ namespace TYPO3\CMS\Fluid\ViewHelpers; * * @api */ -class AliasViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper { +class AliasViewHelper extends AbstractViewHelper implements CompilableInterface { /** + * Declare aliases * * @param array $map array that specifies which variables should be mapped to which alias * @return string Rendered string * @api */ public function render(array $map) { + return self::renderStatic( + array('map' => $map), + $this->buildRenderChildrenClosure(), + $this->renderingContext + ); + } + + /** + * Declare aliases + * + * @param array $arguments + * @param \Closure $renderChildrenClosure + * @param RenderingContextInterface $renderingContext + * + * @return string + */ + static public function renderStatic(array $arguments, \Closure $renderChildrenClosure, RenderingContextInterface $renderingContext) { + $map = $arguments['map']; + $templateVariableContainer = $renderingContext->getTemplateVariableContainer(); + foreach ($map as $aliasName => $value) { - $this->templateVariableContainer->add($aliasName, $value); + $templateVariableContainer->add($aliasName, $value); } - $output = $this->renderChildren(); + $output = $renderChildrenClosure(); foreach ($map as $aliasName => $value) { - $this->templateVariableContainer->remove($aliasName); + $templateVariableContainer->remove($aliasName); } return $output; } diff --git a/typo3/sysext/fluid/Tests/Unit/ViewHelpers/AliasViewHelperTest.php b/typo3/sysext/fluid/Tests/Unit/ViewHelpers/AliasViewHelperTest.php index ff413ee39826..780bd413e1cd 100644 --- a/typo3/sysext/fluid/Tests/Unit/ViewHelpers/AliasViewHelperTest.php +++ b/typo3/sysext/fluid/Tests/Unit/ViewHelpers/AliasViewHelperTest.php @@ -11,63 +11,52 @@ namespace TYPO3\CMS\Fluid\Tests\Unit\ViewHelpers; * The TYPO3 project - inspiring people to share! * * */ +use TYPO3\CMS\Fluid\ViewHelpers\AliasViewHelper; + /** - * Testcase for AliasViewHelper + * Test case */ -class AliasViewHelperTest extends \TYPO3\CMS\Fluid\Tests\Unit\ViewHelpers\ViewHelperBaseTestcase { +class AliasViewHelperTest extends ViewHelperBaseTestcase { /** - * @test + * @var AliasViewHelper */ - public function renderAddsSingleValueToTemplateVariableContainerAndRemovesItAfterRendering() { - $viewHelper = new \TYPO3\CMS\Fluid\ViewHelpers\AliasViewHelper(); + protected $subject; - $mockViewHelperNode = $this->getMock(\TYPO3\CMS\Fluid\Core\Parser\SyntaxTree\ViewHelperNode::class, array('evaluateChildNodes'), array(), '', FALSE); - $mockViewHelperNode->expects($this->once())->method('evaluateChildNodes')->will($this->returnValue('foo')); + public function setUp(){ + parent::setUp(); + $this->subject = $this->getMock(AliasViewHelper::class, array('renderChildren')); + $this->injectDependenciesIntoViewHelper($this->subject); + } + /** + * @test + */ + public function renderAddsSingleValueToTemplateVariableContainerAndRemovesItAfterRendering() { $this->templateVariableContainer->expects($this->at(0))->method('add')->with('someAlias', 'someValue'); $this->templateVariableContainer->expects($this->at(1))->method('remove')->with('someAlias'); - - $this->injectDependenciesIntoViewHelper($viewHelper); - $viewHelper->setViewHelperNode($mockViewHelperNode); - $viewHelper->render(array('someAlias' => 'someValue')); + $this->subject->render(array('someAlias' => 'someValue')); } /** * @test */ public function renderAddsMultipleValuesToTemplateVariableContainerAndRemovesThemAfterRendering() { - $viewHelper = new \TYPO3\CMS\Fluid\ViewHelpers\AliasViewHelper(); - - $mockViewHelperNode = $this->getMock(\TYPO3\CMS\Fluid\Core\Parser\SyntaxTree\ViewHelperNode::class, array('evaluateChildNodes'), array(), '', FALSE); - $mockViewHelperNode->expects($this->once())->method('evaluateChildNodes')->will($this->returnValue('foo')); - $this->templateVariableContainer->expects($this->at(0))->method('add')->with('someAlias', 'someValue'); $this->templateVariableContainer->expects($this->at(1))->method('add')->with('someOtherAlias', 'someOtherValue'); $this->templateVariableContainer->expects($this->at(2))->method('remove')->with('someAlias'); $this->templateVariableContainer->expects($this->at(3))->method('remove')->with('someOtherAlias'); - - $this->injectDependenciesIntoViewHelper($viewHelper); - $viewHelper->setViewHelperNode($mockViewHelperNode); - $viewHelper->render(array('someAlias' => 'someValue', 'someOtherAlias' => 'someOtherValue')); + $this->subject->render(array('someAlias' => 'someValue', 'someOtherAlias' => 'someOtherValue')); } /** * @test */ public function renderDoesNotTouchTemplateVariableContainerAndReturnsChildNodesIfMapIsEmpty() { - $viewHelper = new \TYPO3\CMS\Fluid\ViewHelpers\AliasViewHelper(); - - $mockViewHelperNode = $this->getMock(\TYPO3\CMS\Fluid\Core\Parser\SyntaxTree\ViewHelperNode::class, array('evaluateChildNodes'), array(), '', FALSE); - $mockViewHelperNode->expects($this->once())->method('evaluateChildNodes')->will($this->returnValue('foo')); - + $this->subject->expects($this->once())->method('renderChildren')->will($this->returnValue('foo')); $this->templateVariableContainer->expects($this->never())->method('add'); $this->templateVariableContainer->expects($this->never())->method('remove'); - - $this->injectDependenciesIntoViewHelper($viewHelper); - $viewHelper->setViewHelperNode($mockViewHelperNode); - - $this->assertEquals('foo', $viewHelper->render(array())); + $this->assertEquals('foo', $this->subject->render(array())); } } -- GitLab