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