Initial commit

This commit is contained in:
2018-04-02 08:07:38 +02:00
commit 7330c1ed3e
2054 changed files with 405203 additions and 0 deletions

View File

@@ -0,0 +1,232 @@
<?php
namespace FluidTYPO3\Vhs\Tests\Unit\ViewHelpers;
/*
* This file is part of the FluidTYPO3/Vhs project under GPLv2 or later.
*
* For the full copyright and license information, please read the
* LICENSE.md file that was distributed with this source code.
*/
use TYPO3\CMS\Core\Tests\UnitTestCase;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Mvc\Controller\ControllerContext;
use TYPO3\CMS\Extbase\Mvc\Web\Request;
use TYPO3\CMS\Extbase\Mvc\Web\Response;
use TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder;
use TYPO3\CMS\Extbase\Object\ObjectManagerInterface;
use TYPO3\CMS\Extbase\Reflection\ObjectAccess;
use TYPO3\CMS\Fluid\Core\Parser\SyntaxTree\NodeInterface;
use TYPO3\CMS\Fluid\Core\Parser\SyntaxTree\ViewHelperNode;
use TYPO3\CMS\Fluid\Core\Rendering\RenderingContext;
use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
use TYPO3\CMS\Fluid\Core\ViewHelper\Facets\ChildNodeAccessInterface;
use TYPO3\CMS\Fluid\Core\ViewHelper\TemplateVariableContainer;
use TYPO3\CMS\Fluid\Core\ViewHelper\ViewHelperVariableContainer;
use TYPO3\CMS\Fluid\Core\Widget\WidgetContext;
/**
* @author Claus Due <claus@namelesscoder.net>
* @package Vhs
* @subpackage ViewHelpers
*/
abstract class AbstractViewHelperTest extends UnitTestCase {
/**
* @var ObjectManagerInterface
*/
protected $objectManager;
/**
* Setup global
*/
public function setUp() {
parent::setUp();
$this->objectManager = GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager');
}
/**
* @test
*/
public function canCreateViewHelperInstance() {
$instance = $this->createInstance();
$this->assertInstanceOf($this->getViewHelperClassName(), $instance);
}
/**
* @test
*/
public function canPrepareArguments() {
$instance = $this->createInstance();
$arguments = $instance->prepareArguments();
$this->assertThat($arguments, new \PHPUnit_Framework_Constraint_IsType(\PHPUnit_Framework_Constraint_IsType::TYPE_ARRAY));
}
/**
* @return string
*/
protected function getViewHelperClassName() {
$class = get_class($this);
$class = substr($class, 0, -4);
$class = str_replace('Tests\\Unit\\', '', $class);
return $class;
}
/**
* @param string $type
* @param mixed $value
* @return NodeInterface
*/
protected function createNode($type, $value) {
if ('Boolean' === $type) {
$value = $this->createNode('Text', strval($value));
}
/** @var NodeInterface $node */
$className = 'TYPO3\\CMS\\Fluid\\Core\\Parser\\SyntaxTree\\' . $type . 'Node';
$node = new $className($value);
return $node;
}
/**
* @return AbstractViewHelper
*/
protected function createInstance() {
$className = $this->getViewHelperClassName();
/** @var AbstractViewHelper $instance */
$instance = $this->objectManager->get($className);
$instance->initialize();
return $instance;
}
/**
* @param array $arguments
* @param array $variables
* @param NodeInterface $childNode
* @param string $extensionName
* @param string $pluginName
* @return AbstractViewHelper
*/
protected function buildViewHelperInstance($arguments = array(), $variables = array(), $childNode = NULL, $extensionName = NULL, $pluginName = NULL) {
$instance = $this->createInstance();
$node = new ViewHelperNode($instance, $arguments);
/** @var RenderingContext $this->renderingContext */
$this->renderingContext = $this->objectManager->get('TYPO3\\CMS\\Fluid\\Core\\Rendering\\RenderingContext');
/** @var TemplateVariableContainer $container */
$container = $this->objectManager->get('TYPO3\\CMS\\Fluid\\Core\\ViewHelper\\TemplateVariableContainer');
if (0 < count($variables)) {
ObjectAccess::setProperty($container, 'variables', $variables, TRUE);
}
ObjectAccess::setProperty($this->renderingContext, 'templateVariableContainer', $container, TRUE);
if (NULL !== $extensionName || NULL !== $pluginName) {
/** @var ViewHelperVariableContainer $viewHelperContainer */
$viewHelperContainer = $this->objectManager->get('TYPO3\\CMS\\Fluid\\Core\\ViewHelper\\ViewHelperVariableContainer');
/** @var UriBuilder $uriBuilder */
$uriBuilder = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Mvc\\Web\\Routing\\UriBuilder');
/** @var Request $request */
$request = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Mvc\\Web\\Request');
if (NULL !== $extensionName) {
$request->setControllerExtensionName($extensionName);
}
if (NULL !== $pluginName) {
$request->setPluginName($pluginName);
}
/** @var Response $response */
$response = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Mvc\\Web\\Response');
/** @var ControllerContext $controllerContext */
$controllerContext = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Mvc\\Controller\\ControllerContext');
$controllerContext->setRequest($request);
$controllerContext->setResponse($response);
$controllerContext->setUriBuilder($uriBuilder);
ObjectAccess::setProperty($this->renderingContext, 'viewHelperVariableContainer', $viewHelperContainer, TRUE);
$this->renderingContext->setControllerContext($controllerContext);
}
if (TRUE === $instance instanceof \Tx_Fluidwidget_Core_Widget_AbstractWidgetViewHelper) {
/** @var WidgetContext $widgetContext */
$widgetContext = $this->objectManager->get('TYPO3\\CMS\\Fluid\\Core\\Widget\\WidgetContext');
ObjectAccess::setProperty($instance, 'widgetContext', $widgetContext, TRUE);
}
if (NULL !== $childNode) {
$node->addChildNode($childNode);
if ($instance instanceof ChildNodeAccessInterface) {
$instance->setChildNodes(array($childNode));
}
}
$instance->setArguments($arguments);
$instance->setRenderingContext($this->renderingContext);
$instance->setViewHelperNode($node);
return $instance;
}
/**
* @param array $arguments
* @param array $variables
* @param NodeInterface $childNode
* @param string $extensionName
* @param string $pluginName
* @return mixed
*/
protected function executeViewHelper($arguments = array(), $variables = array(), $childNode = NULL, $extensionName = NULL, $pluginName = NULL) {
$instance = $this->buildViewHelperInstance($arguments, $variables, $childNode, $extensionName, $pluginName);
$output = $instance->initializeArgumentsAndRender();
return $output;
}
/**
* @param array $arguments
* @param array $variables
* @param NodeInterface $childNode
* @param string $extensionName
* @param string $pluginName
* @return mixed
*/
protected function executeViewHelperStatic($arguments = array(), $variables = array(), $childNode = NULL, $extensionName = NULL, $pluginName = NULL) {
$instance = $this->buildViewHelperInstance($arguments, $variables, $childNode, $extensionName, $pluginName);
if ($childNode !== NULL) {
$childClosure = function() use ($childNode) {
return $childNode->evaluate($this->renderingContext);
};
} else {
$childClosure = function() {};
}
$viewHelperClassName = $this->getViewHelperClassName();
return $viewHelperClassName::renderStatic($arguments, $childClosure, $this->renderingContext);
}
/**
* @param string $nodeType
* @param mixed $nodeValue
* @param array $arguments
* @param array $variables
* @param string $extensionName
* @param string $pluginName
* @return mixed
*/
protected function executeViewHelperUsingTagContent($nodeType, $nodeValue, $arguments = array(), $variables = array(), $extensionName = NULL, $pluginName = NULL) {
$childNode = $this->createNode($nodeType, $nodeValue);
$instance = $this->buildViewHelperInstance($arguments, $variables, $childNode, $extensionName, $pluginName);
$output = $instance->initializeArgumentsAndRender();
return $output;
}
/**
* @param string $nodeType
* @param mixed $nodeValue
* @param array $arguments
* @param array $variables
* @param string $extensionName
* @param string $pluginName
* @return mixed
*/
protected function executeViewHelperUsingTagContentStatic($nodeType, $nodeValue, $arguments = array(), $variables = array(), $extensionName = NULL, $pluginName = NULL) {
$childNode = $this->createNode($nodeType, $nodeValue);
$instance = $this->buildViewHelperInstance($arguments, $variables, $childNode, $extensionName, $pluginName);
$childClosure = function() use ($childNode) {
return $childNode->evaluate($this->renderingContext);
};
$viewHelperClassName = $this->getViewHelperClassName();
return $viewHelperClassName::renderStatic($arguments, $childClosure, $this->renderingContext);
}
}