‪TYPO3CMS  ‪main
PageRendererTest.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
20 use PHPUnit\Framework\Attributes\DataProvider;
21 use PHPUnit\Framework\Attributes\Test;
29 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
30 
31 final class ‪PageRendererTest extends UnitTestCase
32 {
34 
35  protected bool ‪$resetSingletonInstances = true;
36 
37  protected function ‪setUp(): void
38  {
39  parent::setUp();
40  $importMapMock = $this->createMock(ImportMap::class);
41  $importMapMock->method('render')
42  ->with(self::isType('string'), self::isInstanceOf(ConsumableNonce::class))
43  ->willReturn('');
44  $importMapFactoryMock = $this->createMock(ImportMapFactory::class);
45  $importMapFactoryMock->method('create')->willReturn($importMapMock);
46  GeneralUtility::setSingletonInstance(ImportMapFactory::class, $importMapFactoryMock);
47  }
48 
49  #[Test]
50  public function ‪renderMethodCallsResetInAnyCase(): void
51  {
52  $pageRenderer = $this->getMockBuilder(PageRenderer::class)
53  ->setConstructorArgs($this->‪getPageRendererConstructorArgs())
54  ->onlyMethods(['reset', 'prepareRendering', 'renderJavaScriptAndCss', 'getPreparedMarkerArray', 'getTemplate'])
55  ->getMock();
56 
57  $pageRenderer->expects(self::once())->method('reset');
58  $pageRenderer->render();
59  }
60 
61  #[Test]
62  public function ‪addBodyContentAddsContent(): void
63  {
64  $subject = $this->getAccessibleMock(PageRenderer::class, null, [], '', false);
65  $expectedReturnValue = 'ABCDE';
66  $subject->addBodyContent('A');
67  $subject->addBodyContent('B');
68  $subject->addBodyContent('C');
69  $subject->addBodyContent('D');
70  $subject->addBodyContent('E');
71  $out = $subject->getBodyContent();
72  self::assertEquals($expectedReturnValue, $out);
73  }
74 
75  #[Test]
77  {
78  $subject = $this->getAccessibleMock(PageRenderer::class, null, [], '', false);
79  $fileReference = ‪StringUtility::getUniqueId('file_');
80  $selectionPrefix = ‪StringUtility::getUniqueId('prefix_');
81  $stripFromSelectionName = ‪StringUtility::getUniqueId('strip_');
82 
83  $expectedInlineLanguageLabelFile = [
84  'fileRef' => $fileReference,
85  'selectionPrefix' => $selectionPrefix,
86  'stripFromSelectionName' => $stripFromSelectionName,
87  ];
88 
89  $subject->addInlineLanguageLabelFile($fileReference, $selectionPrefix, $stripFromSelectionName);
90  $actualResult = $subject->getInlineLanguageLabelFiles();
91 
92  self::assertSame($expectedInlineLanguageLabelFile, array_pop($actualResult));
93  }
94 
95  #[Test]
97  {
98  $subject = $this->getAccessibleMock(PageRenderer::class, null, [], '', false);
99  $fileReference1 = ‪StringUtility::getUniqueId('file1_');
100  $selectionPrefix1 = ‪StringUtility::getUniqueId('prefix1_');
101  $stripFromSelectionName1 = ‪StringUtility::getUniqueId('strip1_');
102  $expectedInlineLanguageLabelFile1 = [
103  'fileRef' => $fileReference1,
104  'selectionPrefix' => $selectionPrefix1,
105  'stripFromSelectionName' => $stripFromSelectionName1,
106  ];
107  $fileReference2 = ‪StringUtility::getUniqueId('file2_');
108  $selectionPrefix2 = ‪StringUtility::getUniqueId('prefix2_');
109  $stripFromSelectionName2 = ‪StringUtility::getUniqueId('strip2_');
110  $expectedInlineLanguageLabelFile2 = [
111  'fileRef' => $fileReference2,
112  'selectionPrefix' => $selectionPrefix2,
113  'stripFromSelectionName' => $stripFromSelectionName2,
114  ];
115 
116  $subject->addInlineLanguageLabelFile($fileReference1, $selectionPrefix1, $stripFromSelectionName1);
117  $subject->addInlineLanguageLabelFile($fileReference2, $selectionPrefix2, $stripFromSelectionName2);
118  $actualResult = $subject->getInlineLanguageLabelFiles();
119 
120  self::assertSame($expectedInlineLanguageLabelFile2, array_pop($actualResult));
121  self::assertSame($expectedInlineLanguageLabelFile1, array_pop($actualResult));
122  }
123 
124  #[Test]
126  {
127  $subject = $this->getAccessibleMock(PageRenderer::class, null, [], '', false);
128  $fileReference = ‪StringUtility::getUniqueId('file2_');
129  $selectionPrefix = ‪StringUtility::getUniqueId('prefix2_');
130  $stripFromSelectionName = ‪StringUtility::getUniqueId('strip2_');
131 
132  $subject->addInlineLanguageLabelFile($fileReference, $selectionPrefix, $stripFromSelectionName);
133  $subject->addInlineLanguageLabelFile($fileReference, $selectionPrefix, $stripFromSelectionName);
134  self::assertCount(1, $subject->getInlineLanguageLabelFiles());
135  }
136 
137  #[Test]
139  {
140  $subject = $this->getAccessibleMock(PageRenderer::class, ['readLLfile'], [], '', false);
141  $subject->setLanguage(new ‪Locale());
142  $subject->method('readLLfile')->willReturn([]);
143  $subject->_call('includeLanguageFileForInline', 'someLLFile.xml');
144  self::assertEquals([], $subject->_get('inlineLanguageLabels'));
145  }
146 
148  {
149  $llFileContent = [
150  'inline_label_first_Key' => 'first',
151  'inline_label_second_Key' => 'second',
152  'thirdKey' => 'third',
153  ];
154  return [
155  'No processing' => [
156  $llFileContent,
157  '',
158  '',
159  $llFileContent,
160  ],
161  'Respect $selectionPrefix' => [
162  $llFileContent,
163  'inline_',
164  '',
165  [
166  'inline_label_first_Key' => 'first',
167  'inline_label_second_Key' => 'second',
168  ],
169  ],
170  'Respect $stripFromSelectionName' => [
171  $llFileContent,
172  '',
173  'inline_',
174  [
175  'label_first_Key' => 'first',
176  'label_second_Key' => 'second',
177  'thirdKey' => 'third',
178  ],
179  ],
180  'Respect $selectionPrefix and $stripFromSelectionName' => [
181  $llFileContent,
182  'inline_',
183  'inline_label_',
184  [
185  'first_Key' => 'first',
186  'second_Key' => 'second',
187  ],
188  ],
189  ];
190  }
191 
192  #[DataProvider('includeLanguageFileForInlineAddsProcessesLabelsToInlineLanguageLabelsProvider')]
193  #[Test]
194  public function ‪includeLanguageFileForInlineAddsProcessesLabelsToInlineLanguageLabels(array $llFileContent, string $selectionPrefix, string $stripFromSelectionName, array $expectation): void
195  {
196  $subject = $this->getAccessibleMock(PageRenderer::class, ['readLLfile'], [], '', false);
197  $subject->setLanguage(new ‪Locale());
198  $subject->method('readLLfile')->willReturn($llFileContent);
199  $subject->_call('includeLanguageFileForInline', 'someLLFile.xml', $selectionPrefix, $stripFromSelectionName);
200  self::assertEquals($expectation, $subject->_get('inlineLanguageLabels'));
201  }
202 
203  #[Test]
204  public function ‪getAddedMetaTag(): void
205  {
206  $subject = $this->getMockBuilder(PageRenderer::class)
207  ->setConstructorArgs($this->‪getPageRendererConstructorArgs())
208  ->onlyMethods([])
209  ->getMock();
210  $subject->setMetaTag('nAme', 'Author', 'foobar');
211  $actualResult = $subject->getMetaTag('naMe', 'AUTHOR');
212  $expectedResult = [
213  'type' => 'name',
214  'name' => 'author',
215  'content' => 'foobar',
216  ];
217  self::assertSame($expectedResult, $actualResult);
218  }
219 
220  #[Test]
221  public function ‪overrideMetaTag(): void
222  {
223  $subject = $this->getMockBuilder(PageRenderer::class)
224  ->setConstructorArgs($this->‪getPageRendererConstructorArgs())
225  ->onlyMethods([])
226  ->getMock();
227  $subject->setMetaTag('nAme', 'Author', 'Axel Foley');
228  $subject->setMetaTag('nAme', 'Author', 'foobar');
229  $actualResult = $subject->getMetaTag('naMe', 'AUTHOR');
230  $expectedResult = [
231  'type' => 'name',
232  'name' => 'author',
233  'content' => 'foobar',
234  ];
235  self::assertSame($expectedResult, $actualResult);
236  }
237 
238  #[Test]
239  public function ‪unsetAddedMetaTag(): void
240  {
241  $subject = $this->getMockBuilder(PageRenderer::class)
242  ->setConstructorArgs($this->‪getPageRendererConstructorArgs())
243  ->onlyMethods([])
244  ->getMock();
245  $subject->setMetaTag('nAme', 'Author', 'foobar');
246  $subject->removeMetaTag('naMe', 'AUTHOR');
247  $actualResult = $subject->getMetaTag('naMe', 'AUTHOR');
248  $expectedResult = [];
249  self::assertSame($expectedResult, $actualResult);
250  }
251 
252  #[Test]
254  {
255  $subject = $this->getAccessibleMock(PageRenderer::class, null, [], '', false);
256  $inlineLanguageLabels = [];
257  $subject->_set('inlineLanguageLabels', $inlineLanguageLabels);
258  $actual = $subject->_call('parseLanguageLabelsForJavaScript');
259  self::assertEmpty($actual);
260  }
261 
262  #[Test]
264  {
265  $subject = $this->getAccessibleMock(PageRenderer::class, null, [], '', false);
266  $inlineLanguageLabels = [
267  'key' => 'label',
268  'foo' => 'bar',
269  'husel' => [
270  [
271  'source' => 'pusel',
272  ],
273  ],
274  'hello' => [
275  [
276  'source' => 'world',
277  'target' => 'welt',
278  ],
279  ],
280  ];
281  $subject->_set('inlineLanguageLabels', $inlineLanguageLabels);
282  $expected = [
283  'key' => 'label',
284  'foo' => 'bar',
285  'husel' => 'pusel',
286  'hello' => 'welt',
287  ];
288  $actual = $subject->_call('parseLanguageLabelsForJavaScript');
289  self::assertSame($expected, $actual);
290  }
291 }
‪TYPO3\CMS\Core\Tests\Unit\Page
Definition: AssetCollectorTest.php:18
‪TYPO3\CMS\Core\Tests\Unit\Page\PageRendererTest\$resetSingletonInstances
‪bool $resetSingletonInstances
Definition: PageRendererTest.php:34
‪TYPO3\CMS\Core\Tests\Unit\Page\PageRendererTest\renderMethodCallsResetInAnyCase
‪renderMethodCallsResetInAnyCase()
Definition: PageRendererTest.php:49
‪TYPO3\CMS\Core\Tests\Unit\Page\PageRendererTest\includeLanguageFileForInlineAddsProcessesLabelsToInlineLanguageLabelsProvider
‪static includeLanguageFileForInlineAddsProcessesLabelsToInlineLanguageLabelsProvider()
Definition: PageRendererTest.php:146
‪TYPO3\CMS\Core\Tests\Unit\Page\PageRendererTest
Definition: PageRendererTest.php:32
‪TYPO3\CMS\Core\Tests\Unit\Page\PageRendererTest\addInlineLanguageLabelFileSetsInlineLanguageLabelFiles
‪addInlineLanguageLabelFileSetsInlineLanguageLabelFiles()
Definition: PageRendererTest.php:75
‪TYPO3\CMS\Core\Page\ImportMapFactory
Definition: ImportMapFactory.php:27
‪TYPO3\CMS\Core\Security\ContentSecurityPolicy\ConsumableNonce
Definition: ConsumableNonce.php:24
‪TYPO3\CMS\Core\Page\ImportMap
Definition: ImportMap.php:35
‪TYPO3\CMS\Core\Tests\Unit\Page\PageRendererTest\addInlineLanguageLabelFileSetsTwoDifferentInlineLanguageLabelFiles
‪addInlineLanguageLabelFileSetsTwoDifferentInlineLanguageLabelFiles()
Definition: PageRendererTest.php:95
‪TYPO3\CMS\Core\Tests\Unit\Page\PageRendererTest\unsetAddedMetaTag
‪unsetAddedMetaTag()
Definition: PageRendererTest.php:238
‪TYPO3\CMS\Core\Tests\Unit\Page\PageRendererFactoryTrait
Definition: PageRendererFactoryTrait.php:45
‪TYPO3\CMS\Core\Tests\Unit\Page\PageRendererTest\addBodyContentAddsContent
‪addBodyContentAddsContent()
Definition: PageRendererTest.php:61
‪TYPO3\CMS\Core\Page\PageRenderer
Definition: PageRenderer.php:44
‪TYPO3\CMS\Core\Tests\Unit\Page\PageRendererTest\setUp
‪setUp()
Definition: PageRendererTest.php:36
‪TYPO3\CMS\Core\Tests\Unit\Page\PageRendererTest\addInlineLanguageLabelFileDoesNotSetSameLanguageFileTwice
‪addInlineLanguageLabelFileDoesNotSetSameLanguageFileTwice()
Definition: PageRendererTest.php:124
‪TYPO3\CMS\Core\Tests\Unit\Page\PageRendererTest\getAddedMetaTag
‪getAddedMetaTag()
Definition: PageRendererTest.php:203
‪TYPO3\CMS\Core\Tests\Unit\Page\PageRendererTest\parseLanguageLabelsForJavaScriptReturnsFlatArray
‪parseLanguageLabelsForJavaScriptReturnsFlatArray()
Definition: PageRendererTest.php:262
‪TYPO3\CMS\Core\Tests\Unit\Page\PageRendererTest\includeLanguageFileForInlineAddsProcessesLabelsToInlineLanguageLabels
‪includeLanguageFileForInlineAddsProcessesLabelsToInlineLanguageLabels(array $llFileContent, string $selectionPrefix, string $stripFromSelectionName, array $expectation)
Definition: PageRendererTest.php:193
‪TYPO3\CMS\Core\Tests\Unit\Page\PageRendererTest\includeLanguageFileForInlineDoesNotAddToInlineLanguageLabelsIfFileCouldNotBeRead
‪includeLanguageFileForInlineDoesNotAddToInlineLanguageLabelsIfFileCouldNotBeRead()
Definition: PageRendererTest.php:137
‪TYPO3\CMS\Core\Localization\Locale
Definition: Locale.php:30
‪TYPO3\CMS\Core\Tests\Unit\Page\PageRendererFactoryTrait\getPageRendererConstructorArgs
‪getPageRendererConstructorArgs(PackageManager $packageManager=null, CacheManager $cacheManager=null,)
Definition: PageRendererFactoryTrait.php:46
‪TYPO3\CMS\Core\Tests\Unit\Page\PageRendererTest\overrideMetaTag
‪overrideMetaTag()
Definition: PageRendererTest.php:220
‪TYPO3\CMS\Core\Tests\Unit\Page\PageRendererTest\parseLanguageLabelsForJavaScriptReturnsEmptyStringIfEmpty
‪parseLanguageLabelsForJavaScriptReturnsEmptyStringIfEmpty()
Definition: PageRendererTest.php:252
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Core\Utility\StringUtility
Definition: StringUtility.php:24
‪TYPO3\CMS\Core\Utility\StringUtility\getUniqueId
‪static getUniqueId(string $prefix='')
Definition: StringUtility.php:57