TYPO3 CMS  TYPO3_6-2
AbstractViewHelperTest.php
Go to the documentation of this file.
1 <?php
3 
4 /* *
5  * This script is backported from the TYPO3 Flow package "TYPO3.Fluid". *
6  * *
7  * It is free software; you can redistribute it and/or modify it under *
8  * the terms of the GNU Lesser General Public License, either version 3 *
9  * of the License, or (at your option) any later version. *
10  * *
11  * The TYPO3 project - inspiring people to share! *
12  * */
13 
18 
23 
27  protected $fixtureMethodParameters = array(
28  'param1' => array(
29  'position' => 0,
30  'optional' => FALSE,
31  'type' => 'integer',
32  'defaultValue' => NULL
33  ),
34  'param2' => array(
35  'position' => 1,
36  'optional' => FALSE,
37  'type' => 'array',
38  'array' => TRUE,
39  'defaultValue' => NULL
40  ),
41  'param3' => array(
42  'position' => 2,
43  'optional' => TRUE,
44  'type' => 'string',
45  'array' => FALSE,
46  'defaultValue' => 'default'
47  ),
48  );
49 
53  protected $fixtureMethodTags = array(
54  'param' => array(
55  'integer $param1 P1 Stuff',
56  'array $param2 P2 Stuff',
57  'string $param3 P3 Stuff'
58  )
59  );
60 
61  public function setUp() {
62  $this->mockReflectionService = $this->getMock('TYPO3\\CMS\\Extbase\\Reflection\\ReflectionService', array(), array(), '', FALSE);
63  }
64 
68  public function argumentsCanBeRegistered() {
69  $viewHelper = $this->getAccessibleMock('TYPO3\\CMS\\Fluid\\Core\\ViewHelper\\AbstractViewHelper', array('render'), array(), '', FALSE);
70  $viewHelper->injectReflectionService($this->mockReflectionService);
71 
72  $name = 'This is a name';
73  $description = 'Example desc';
74  $type = 'string';
75  $isRequired = TRUE;
76  $expected = new \TYPO3\CMS\Fluid\Core\ViewHelper\ArgumentDefinition($name, $type, $description, $isRequired);
77 
78  $viewHelper->_call('registerArgument', $name, $type, $description, $isRequired);
79  $this->assertEquals(array($name => $expected), $viewHelper->prepareArguments(), 'Argument definitions not returned correctly.');
80  }
81 
87  $viewHelper = $this->getAccessibleMock('TYPO3\\CMS\\Fluid\\Core\\ViewHelper\\AbstractViewHelper', array('render'), array(), '', FALSE);
88 
89  $name = 'shortName';
90  $description = 'Example desc';
91  $type = 'string';
92  $isRequired = TRUE;
93 
94  $viewHelper->_call('registerArgument', $name, $type, $description, $isRequired);
95  $viewHelper->_call('registerArgument', $name, 'integer', $description, $isRequired);
96  }
97 
102  $viewHelper = $this->getAccessibleMock('TYPO3\\CMS\\Fluid\\Core\\ViewHelper\\AbstractViewHelper', array('render'), array(), '', FALSE);
103  $viewHelper->injectReflectionService($this->mockReflectionService);
104 
105  $name = 'argumentName';
106  $description = 'argument description';
107  $overriddenDescription = 'overwritten argument description';
108  $type = 'string';
109  $overriddenType = 'integer';
110  $isRequired = TRUE;
111  $expected = new \TYPO3\CMS\Fluid\Core\ViewHelper\ArgumentDefinition($name, $overriddenType, $overriddenDescription, $isRequired);
112 
113  $viewHelper->_call('registerArgument', $name, $type, $description, $isRequired);
114  $viewHelper->_call('overrideArgument', $name, $overriddenType, $overriddenDescription, $isRequired);
115  $this->assertEquals($viewHelper->prepareArguments(), array($name => $expected), 'Argument definitions not returned correctly. The original ArgumentDefinition could not be overridden.');
116  }
117 
123  $viewHelper = $this->getAccessibleMock('TYPO3\\CMS\\Fluid\\Core\\ViewHelper\\AbstractViewHelper', array('render'), array(), '', FALSE);
124  $viewHelper->injectReflectionService($this->mockReflectionService);
125 
126  $viewHelper->_call('overrideArgument', 'argumentName', 'string', 'description', TRUE);
127  }
128 
133  $viewHelper = $this->getAccessibleMock('TYPO3\\CMS\\Fluid\\Core\\ViewHelper\\AbstractViewHelper', array('render', 'initializeArguments'), array(), '', FALSE);
134  $viewHelper->injectReflectionService($this->mockReflectionService);
135 
136  $viewHelper->expects($this->once())->method('initializeArguments');
137 
138  $viewHelper->prepareArguments();
139  }
140 
145 
147 
148  $dataCacheMock = $this->getMock('TYPO3\\CMS\\Core\\Cache\\Frontend\\VariableFrontend', array(), array(), '', FALSE);
149  $dataCacheMock->expects($this->any())->method('has')->will($this->returnValue(TRUE));
150  $dataCacheMock->expects($this->any())->method('get')->will($this->returnValue(array()));
151 
152  $viewHelper = new \TYPO3\CMS\Fluid\Tests\Unit\Core\Fixtures\TestViewHelper();
153 
154  $this->mockReflectionService->expects($this->once())->method('getMethodParameters')->with('TYPO3\\CMS\\Fluid\\Tests\\Unit\\Core\\Fixtures\\TestViewHelper', 'render')->will($this->returnValue($this->fixtureMethodParameters));
155  $this->mockReflectionService->expects($this->once())->method('getMethodTagsValues')->with('TYPO3\\CMS\\Fluid\\Tests\\Unit\\Core\\Fixtures\\TestViewHelper', 'render')->will($this->returnValue($this->fixtureMethodTags));
156  $viewHelper->injectReflectionService($this->mockReflectionService);
157 
158  $expected = array(
159  'param1' => new \TYPO3\CMS\Fluid\Core\ViewHelper\ArgumentDefinition('param1', 'integer', 'P1 Stuff', TRUE, null, TRUE),
160  'param2' => new \TYPO3\CMS\Fluid\Core\ViewHelper\ArgumentDefinition('param2', 'array', 'P2 Stuff', TRUE, null, TRUE),
161  'param3' => new \TYPO3\CMS\Fluid\Core\ViewHelper\ArgumentDefinition('param3', 'string', 'P3 Stuff', FALSE, 'default', TRUE),
162  );
163 
164  $this->assertEquals($expected, $viewHelper->prepareArguments(), 'Annotation based arguments were not registered.');
165 
167  }
168 
173 
175 
176  $dataCacheMock = $this->getMock('TYPO3\\CMS\\Core\\Cache\\Frontend\\VariableFrontend', array(), array(), '', FALSE);
177  $dataCacheMock->expects($this->any())->method('has')->will($this->returnValue(TRUE));
178  $dataCacheMock->expects($this->any())->method('get')->will($this->returnValue(array()));
179 
180  $viewHelper = new \TYPO3\CMS\Fluid\Tests\Unit\Core\Fixtures\TestViewHelper2();
181 
182  $this->mockReflectionService->expects($this->once())->method('getMethodParameters')->with('TYPO3\\CMS\\Fluid\\Tests\\Unit\\Core\\Fixtures\\TestViewHelper2', 'render')->will($this->returnValue($this->fixtureMethodParameters));
183  $this->mockReflectionService->expects($this->never())->method('getMethodTagsValues');
184  $viewHelper->injectReflectionService($this->mockReflectionService);
185 
186  $expected = array(
187  'param1' => new \TYPO3\CMS\Fluid\Core\ViewHelper\ArgumentDefinition('param1', 'integer', '', TRUE, NULL, TRUE),
188  'param2' => new \TYPO3\CMS\Fluid\Core\ViewHelper\ArgumentDefinition('param2', 'array', '', TRUE, NULL, TRUE),
189  'param3' => new \TYPO3\CMS\Fluid\Core\ViewHelper\ArgumentDefinition('param3', 'string', '', FALSE, 'default', TRUE)
190  );
191 
192  $this->assertEquals($expected, $viewHelper->prepareArguments(), 'Annotation based arguments were not registered.');
193  }
194 
199  $viewHelper = $this->getAccessibleMock('TYPO3\\CMS\\Fluid\\Core\\ViewHelper\\AbstractViewHelper', array('render', 'prepareArguments'), array(), '', FALSE);
200  $viewHelper->injectReflectionService($this->mockReflectionService);
201 
202  $viewHelper->expects($this->once())->method('prepareArguments')->will($this->returnValue(array()));
203 
204  $viewHelper->validateArguments();
205  }
206 
211  $viewHelper = $this->getAccessibleMock('TYPO3\\CMS\\Fluid\\Core\\ViewHelper\\AbstractViewHelper', array('render', 'prepareArguments'), array(), '', FALSE);
212 
213  $viewHelper->setArguments(array('test' => new \ArrayObject));
214  $viewHelper->expects($this->once())->method('prepareArguments')->will($this->returnValue(array('test' => new \TYPO3\CMS\Fluid\Core\ViewHelper\ArgumentDefinition('test', 'array', FALSE, 'documentation'))));
215  $viewHelper->validateArguments();
216  }
217 
222  $viewHelper = $this->getAccessibleMock('TYPO3\\CMS\\Fluid\\Core\\ViewHelper\\AbstractViewHelper', array('render', 'prepareArguments'), array(), '', FALSE);
223  $viewHelper->injectReflectionService($this->mockReflectionService);
224 
225  $viewHelper->setArguments(array('test' => 'Value of argument'));
226 
227  $viewHelper->expects($this->once())->method('prepareArguments')->will($this->returnValue(array(
228  'test' => new \TYPO3\CMS\Fluid\Core\ViewHelper\ArgumentDefinition('test', 'string', FALSE, 'documentation')
229  )));
230 
231  $viewHelper->validateArguments();
232  }
233 
239  $viewHelper = $this->getAccessibleMock('TYPO3\\CMS\\Fluid\\Core\\ViewHelper\\AbstractViewHelper', array('render', 'prepareArguments'), array(), '', FALSE);
240  $viewHelper->injectReflectionService($this->mockReflectionService);
241 
242  $viewHelper->setArguments(array('test' => 'test'));
243 
244  $viewHelper->expects($this->once())->method('prepareArguments')->will($this->returnValue(array(
245  'test' => new \TYPO3\CMS\Fluid\Core\ViewHelper\ArgumentDefinition('test', 'stdClass', FALSE, 'documentation')
246  )));
247 
248  $viewHelper->validateArguments();
249  }
250 
255  $viewHelper = $this->getAccessibleMock('TYPO3\\CMS\\Fluid\\Core\\ViewHelper\\AbstractViewHelper', array('validateArguments', 'initialize', 'callRenderMethod'));
256  $viewHelper->expects($this->at(0))->method('validateArguments');
257  $viewHelper->expects($this->at(1))->method('initialize');
258  $viewHelper->expects($this->at(2))->method('callRenderMethod')->will($this->returnValue('Output'));
259 
260  $expectedOutput = 'Output';
261  $actualOutput = $viewHelper->initializeArgumentsAndRender(array('argument1' => 'value1'));
262  $this->assertEquals($expectedOutput, $actualOutput);
263  }
264 
269  $templateVariableContainer = $this->getMock('TYPO3\\CMS\\Fluid\\Core\\ViewHelper\\TemplateVariableContainer');
270  $viewHelperVariableContainer = $this->getMock('TYPO3\\CMS\\Fluid\\Core\\ViewHelper\\ViewHelperVariableContainer');
271  $controllerContext = $this->getMock('TYPO3\\CMS\\Extbase\\Mvc\\Controller\\ControllerContext', array(), array(), '', FALSE);
272 
273  $renderingContext = $this->getAccessibleMock('TYPO3\\CMS\\Fluid\\Core\\Rendering\\RenderingContext', array('dummy'));
274  $renderingContext->injectTemplateVariableContainer($templateVariableContainer);
275  $renderingContext->_set('viewHelperVariableContainer', $viewHelperVariableContainer);
276  $renderingContext->setControllerContext($controllerContext);
277 
278  $viewHelper = $this->getAccessibleMock('TYPO3\\CMS\\Fluid\\Core\\ViewHelper\\AbstractViewHelper', array('render', 'prepareArguments'), array(), '', FALSE);
279 
280  $viewHelper->setRenderingContext($renderingContext);
281 
282  $this->assertSame($viewHelper->_get('templateVariableContainer'), $templateVariableContainer);
283  $this->assertSame($viewHelper->_get('viewHelperVariableContainer'), $viewHelperVariableContainer);
284  $this->assertSame($viewHelper->_get('controllerContext'), $controllerContext);
285  }
286 }
getAccessibleMock( $originalClassName, array $methods=array(), array $arguments=array(), $mockClassName='', $callOriginalConstructor=TRUE, $callOriginalClone=TRUE, $callAutoload=TRUE)