‪TYPO3CMS  ‪main
RequestHandlerTest.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;
22 use Symfony\Component\DependencyInjection\Container;
42 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
43 
47 final class ‪RequestHandlerTest extends UnitTestCase
48 {
49  protected bool ‪$resetSingletonInstances = true;
50 
52  {
53  return [
54  'no original values' => [
55  [],
56  [],
57  '<html>',
58  ],
59  'no additional values' => [
60  ['dir' => 'left'],
61  [],
62  '<html dir="left">',
63  ],
64  'no additional values #2' => [
65  ['dir' => 'left', 'xmlns:dir' => 'left'],
66  [],
67  '<html dir="left" xmlns:dir="left">',
68  ],
69  'disable all attributes' => [
70  ['dir' => 'left', 'xmlns:dir' => 'left'],
71  ['htmlTag_setParams' => 'none'],
72  '<html>',
73  ],
74  'only add setParams' => [
75  ['dir' => 'left', 'xmlns:dir' => 'left'],
76  ['htmlTag_setParams' => 'amp'],
77  '<html amp>',
78  ],
79  'attributes property trumps htmlTag_setParams' => [
80  ['dir' => 'left', 'xmlns:dir' => 'left'],
81  ['htmlTag.' => ['attributes.' => ['amp' => '']], 'htmlTag_setParams' => 'none'],
82  '<html dir="left" xmlns:dir="left" amp>',
83  ],
84  'attributes property with mixed values' => [
85  ['dir' => 'left', 'xmlns:dir' => 'left'],
86  ['htmlTag.' => ['attributes.' => ['amp' => '', 'no-js' => 'true', 'additional-enabled' => 0]]],
87  '<html dir="left" xmlns:dir="left" amp no-js="true" additional-enabled="0">',
88  ],
89  'attributes property overrides default settings' => [
90  ['dir' => 'left'],
91  ['htmlTag.' => ['attributes.' => ['amp' => '', 'dir' => 'right']]],
92  '<html amp dir="right">',
93  ],
94  ];
95  }
96 
100  #[DataProvider('generateHtmlTagIncludesAllPossibilitiesDataProvider')]
101  #[Test]
102  public function ‪generateHtmlTagIncludesAllPossibilities(array $htmlTagAttributes, array $configuration, string $expectedResult): void
103  {
104  $subject = $this->getAccessibleMock(RequestHandler::class, null, [], '', false);
105  $contentObjectRendererMock = $this->getMockBuilder(ContentObjectRenderer::class)->disableOriginalConstructor()->getMock();
106  $contentObjectRendererMock->expects(self::never())->method('stdWrap');
107  $result = $subject->_call('generateHtmlTag', $htmlTagAttributes, $configuration, $contentObjectRendererMock);
108  self::assertEquals($expectedResult, $result);
109  }
110 
111  #[Test]
113  {
114  $stdWrapResult = '10';
115 
116  $expectedTags = [
117  'type' => 'http-equiv-new',
118  'name' => 'refresh',
119  'content' => '10',
120  ];
121 
122  $siteLanguage = $this->‪createSiteWithLanguage()->getLanguageById(3);
123  $contentObjectRendererMock = $this->getMockBuilder(ContentObjectRenderer::class)->disableOriginalConstructor()->getMock();
124  $contentObjectRendererMock->expects(self::atLeastOnce())->method('cObjGet')->with(self::anything())->willReturn('');
125  $contentObjectRendererMock->expects(self::once())->method('stdWrap')->with(self::anything())->willReturn($stdWrapResult);
126  $frontendControllerMock = $this->getMockBuilder(TypoScriptFrontendController::class)->disableOriginalConstructor()->getMock();
127  $frontendControllerMock->expects(self::once())->method('generatePageTitle')->willReturn('');
128  $frontendControllerMock->expects(self::once())->method('INTincScript_loadJSCode');
129  $frontendController = $frontendControllerMock;
130  $frontendController->cObj = $contentObjectRendererMock;
131  $typo3InformationMock = $this->getMockBuilder(Typo3Information::class)->disableOriginalConstructor()->getMock();
132  $typo3InformationMock->expects(self::once())->method('getInlineHeaderComment')->willReturn('dummy');
133  GeneralUtility::addInstance(Typo3Information::class, $typo3InformationMock);
134 
135  $pageRendererMock = $this->getMockBuilder(PageRenderer::class)->disableOriginalConstructor()->getMock();
136  $pageRendererMock->method('getDocType')->willReturn(DocType::html5);
137  $frontendTypoScript = new ‪FrontendTypoScript(new ‪RootNode(), [], [], []);
138  $frontendTypoScript->setSetupArray([]);
139  $frontendTypoScript->setPageArray([
140  'meta.' => [
141  'refresh' => '10',
142  'refresh.' => [
143  'attribute' => 'http-equiv-new',
144  ],
145  ],
146  ]);
147  $frontendTypoScript->setConfigArray([]);
148  $request = (new ‪ServerRequest())
149  ->withAttribute('frontend.typoscript', $frontendTypoScript)
150  ->withAttribute('routing', new ‪PageArguments(1, '0', []))
151  ->withAttribute('language', $siteLanguage);
152  $subject = $this->getAccessibleMock(
153  RequestHandler::class,
154  ['getPageRenderer'],
155  [
157  new ‪ListenerProvider(new Container()),
158  new ‪TimeTracker(false),
159  new ‪FilePathSanitizer(),
160  new ‪TypoScriptService(),
161  new ‪Context(),
162  ],
163  );
164  $subject->method('getPageRenderer')->willReturn($pageRendererMock);
165  $subject->_call('processHtmlBasedRenderingSettings', $frontendController, $request);
166  $pageRendererMock->expects(self::never())->method('setMetaTag')->with($expectedTags['type'], $expectedTags['name'], $expectedTags['content'])->willThrowException(new \InvalidArgumentException('', 1666309039));
167  }
168 
170  {
171  return [
172  'simple meta' => [
173  [
174  'author' => 'Markus Klein',
175  ],
176  '',
177  [
178  'type' => 'name',
179  'name' => 'author',
180  'content' => 'Markus Klein',
181  ],
182  ],
183  'httpEquivalent meta' => [
184  [
185  'X-UA-Compatible' => 'IE=edge,chrome=1',
186  'X-UA-Compatible.' => ['httpEquivalent' => 1],
187  ],
188  'IE=edge,chrome=1',
189  [
190  'type' => 'http-equiv',
191  'name' => 'X-UA-Compatible',
192  'content' => 'IE=edge,chrome=1',
193  ],
194  ],
195  'httpEquivalent meta xhtml new notation' => [
196  [
197  'X-UA-Compatible' => 'IE=edge,chrome=1',
198  'X-UA-Compatible.' => ['attribute' => 'http-equiv'],
199  ],
200  'IE=edge,chrome=1',
201  [
202  'type' => 'http-equiv',
203  'name' => 'X-UA-Compatible',
204  'content' => 'IE=edge,chrome=1',
205  ],
206  ],
207  'refresh meta' => [
208  [
209  'refresh' => '10',
210  ],
211  '',
212  [
213  'type' => 'http-equiv',
214  'name' => 'refresh',
215  'content' => '10',
216  ],
217  ],
218  'refresh meta new notation' => [
219  [
220  'refresh' => '10',
221  'refresh.' => ['attribute' => 'http-equiv'],
222  ],
223  '10',
224  [
225  'type' => 'http-equiv',
226  'name' => 'refresh',
227  'content' => '10',
228  ],
229  ],
230  'meta with dot' => [
231  [
232  'DC.author' => 'Markus Klein',
233  ],
234  '',
235  [
236  'type' => 'name',
237  'name' => 'DC.author',
238  'content' => 'Markus Klein',
239  ],
240  ],
241  'meta with colon' => [
242  [
243  'OG:title' => 'Magic Tests',
244  ],
245  '',
246  [
247  'type' => 'name',
248  'name' => 'OG:title',
249  'content' => 'Magic Tests',
250  ],
251  ],
252  'different attribute name' => [
253  [
254  'og:site_title' => 'My TYPO3 site',
255  'og:site_title.' => ['attribute' => 'property'],
256  ],
257  'My TYPO3 site',
258  [
259  'type' => 'property',
260  'name' => 'og:site_title',
261  'content' => 'My TYPO3 site',
262  ],
263  ],
264  'meta with 0 value' => [
265  [
266  'custom:key' => '0',
267  ],
268  '',
269  [
270  'type' => 'name',
271  'name' => 'custom:key',
272  'content' => '0',
273  ],
274  ],
275  ];
276  }
277 
278  #[DataProvider('generateMetaTagHtmlGeneratesCorrectTagsDataProvider')]
279  #[Test]
280  public function ‪generateMetaTagHtmlGeneratesCorrectTags(array $typoScript, string $stdWrapResult, array $expectedTags): void
281  {
282  $siteLanguage = $this->‪createSiteWithLanguage()->getLanguageById(3);
283  $contentObjectRendererMock = $this->getMockBuilder(ContentObjectRenderer::class)->disableOriginalConstructor()->getMock();
284  $contentObjectRendererMock->expects(self::atLeastOnce())->method('cObjGet')->with(self::anything())->willReturn('');
285  $contentObjectRendererMock->method('stdWrap')->with(self::anything())->willReturn($stdWrapResult);
286  $frontendControllerMock = $this->getMockBuilder(TypoScriptFrontendController::class)->disableOriginalConstructor()->getMock();
287  $frontendControllerMock->expects(self::once())->method('generatePageTitle')->willReturn('');
288  $frontendControllerMock->expects(self::once())->method('INTincScript_loadJSCode');
289  $frontendController = $frontendControllerMock;
290  $frontendController->cObj = $contentObjectRendererMock;
291  $typo3InformationMock = $this->getMockBuilder(Typo3Information::class)->disableOriginalConstructor()->getMock();
292  $typo3InformationMock->expects(self::once())->method('getInlineHeaderComment')->willReturn('dummy');
293  GeneralUtility::addInstance(Typo3Information::class, $typo3InformationMock);
294 
295  $pageRendererMock = $this->getMockBuilder(PageRenderer::class)->disableOriginalConstructor()->getMock();
296  $pageRendererMock->method('getDocType')->willReturn(DocType::html5);
297  $pageRendererMock->expects(self::once())->method('setMetaTag')->with($expectedTags['type'], $expectedTags['name'], $expectedTags['content'], [], false);
298  $frontendTypoScript = new ‪FrontendTypoScript(new ‪RootNode(), [], [], []);
299  $frontendTypoScript->setSetupArray([]);
300  $frontendTypoScript->setPageArray([
301  'meta.' => $typoScript,
302  ]);
303  $frontendTypoScript->setConfigArray([]);
304  $request = (new ‪ServerRequest())
305  ->withAttribute('frontend.typoscript', $frontendTypoScript)
306  ->withAttribute('routing', new ‪PageArguments(1, '0', []))
307  ->withAttribute('language', $siteLanguage);
308  $subject = $this->getAccessibleMock(
309  RequestHandler::class,
310  ['getPageRenderer'],
311  [
313  new ‪ListenerProvider(new Container()),
314  new ‪TimeTracker(false),
315  new ‪FilePathSanitizer(),
316  new ‪TypoScriptService(),
317  new ‪Context(),
318  ],
319  );
320  $subject->method('getPageRenderer')->willReturn($pageRendererMock);
321  $subject->_call('processHtmlBasedRenderingSettings', $frontendController, $request);
322  }
323 
324  #[Test]
326  {
327  $stdWrapResult = '';
328 
329  $siteLanguage = $this->‪createSiteWithLanguage()->getLanguageById(3);
330  $contentObjectRendererMock = $this->getMockBuilder(ContentObjectRenderer::class)->disableOriginalConstructor()->getMock();
331  $contentObjectRendererMock->expects(self::atLeastOnce())->method('cObjGet')->with(self::anything())->willReturn('');
332  $contentObjectRendererMock->method('stdWrap')->with(self::anything())->willReturn($stdWrapResult);
333  $frontendControllerMock = $this->getMockBuilder(TypoScriptFrontendController::class)->disableOriginalConstructor()->getMock();
334  $frontendControllerMock->method('generatePageTitle')->willReturn('');
335  $frontendControllerMock->expects(self::once())->method('INTincScript_loadJSCode');
336  $frontendController = $frontendControllerMock;
337  $frontendController->cObj = $contentObjectRendererMock;
338  $typo3InformationMock = $this->getMockBuilder(Typo3Information::class)->disableOriginalConstructor()->getMock();
339  $typo3InformationMock->expects(self::once())->method('getInlineHeaderComment')->willReturn('dummy');
340  GeneralUtility::addInstance(Typo3Information::class, $typo3InformationMock);
341 
342  $pageRendererMock = $this->getMockBuilder(PageRenderer::class)->disableOriginalConstructor()->getMock();
343  $pageRendererMock->method('getDocType')->willReturn(DocType::html5);
344  $pageRendererMock->expects(self::never())->method('setMetaTag');
345  $frontendTypoScript = new ‪FrontendTypoScript(new ‪RootNode(), [], [], []);
346  $frontendTypoScript->setSetupArray([]);
347  $frontendTypoScript->setPageArray([
348  'meta.' => [
349  'custom:key' => '',
350  ],
351  ]);
352  $frontendTypoScript->setConfigArray([]);
353  $request = (new ‪ServerRequest())
354  ->withAttribute('frontend.typoscript', $frontendTypoScript)
355  ->withAttribute('routing', new ‪PageArguments(1, '0', []))
356  ->withAttribute('language', $siteLanguage);
357  $subject = $this->getAccessibleMock(
358  RequestHandler::class,
359  ['getPageRenderer'],
360  [
362  new ‪ListenerProvider(new Container()),
363  new ‪TimeTracker(false),
364  new ‪FilePathSanitizer(),
365  new ‪TypoScriptService(),
366  new ‪Context(),
367  ],
368  );
369  $subject->method('getPageRenderer')->willReturn($pageRendererMock);
370  $subject->_call('processHtmlBasedRenderingSettings', $frontendController, $request);
371  }
372 
373  public static function ‪generateMultipleMetaTagsDataProvider(): array
374  {
375  return [
376  'multi value attribute name' => [
377  [
378  'og:locale:alternate.' => [
379  'attribute' => 'property',
380  'value' => [
381  10 => 'nl_NL',
382  20 => 'de_DE',
383  ],
384  ],
385  ],
386  '',
387  [
388  [
389  'type' => 'property',
390  'name' => 'og:locale:alternate',
391  'content' => 'nl_NL',
392  ],
393  [
394  'type' => 'property',
395  'name' => 'og:locale:alternate',
396  'content' => 'de_DE',
397  ],
398  ],
399  ],
400  'multi value attribute name (empty values are skipped)' => [
401  [
402  'og:locale:alternate.' => [
403  'attribute' => 'property',
404  'value' => [
405  10 => 'nl_NL',
406  20 => '',
407  30 => 'de_DE',
408  ],
409  ],
410  ],
411  '',
412  [
413  [
414  'type' => 'property',
415  'name' => 'og:locale:alternate',
416  'content' => 'nl_NL',
417  ],
418  [
419  'type' => 'property',
420  'name' => 'og:locale:alternate',
421  'content' => 'de_DE',
422  ],
423  ],
424  ],
425  ];
426  }
427 
428  #[DataProvider('generateMultipleMetaTagsDataProvider')]
429  #[Test]
430  public function ‪generateMultipleMetaTags(array $typoScript, string $stdWrapResult, array $expectedTags): void
431  {
432  $siteLanguage = $this->‪createSiteWithLanguage()->getLanguageById(3);
433  $contentObjectRendererMock = $this->getMockBuilder(ContentObjectRenderer::class)->disableOriginalConstructor()->getMock();
434  $contentObjectRendererMock->expects(self::atLeastOnce())->method('cObjGet')->with(self::anything())->wilLReturn('');
435  $contentObjectRendererMock->method('stdWrap')->with(self::anything())->willReturn($stdWrapResult);
436  $frontendControllerMock = $this->getMockBuilder(TypoScriptFrontendController::class)->disableOriginalConstructor()->getMock();
437  $frontendControllerMock->expects(self::once())->method('generatePageTitle')->willReturn('');
438  $frontendControllerMock->expects(self::once())->method('INTincScript_loadJSCode');
439  $frontendController = $frontendControllerMock;
440  $frontendController->cObj = $contentObjectRendererMock;
441  $typo3InformationMock = $this->getMockBuilder(Typo3Information::class)->disableOriginalConstructor()->getMock();
442  $typo3InformationMock->expects(self::once())->method('getInlineHeaderComment')->willReturn('This website is...');
443  GeneralUtility::addInstance(Typo3Information::class, $typo3InformationMock);
444 
445  $pageRendererMock = $this->getMockBuilder(PageRenderer::class)->disableOriginalConstructor()->getMock();
446  $pageRendererMock->method('getDocType')->willReturn(DocType::html5);
447  $series = [
448  [$expectedTags[0]['type'], $expectedTags[0]['name'], $expectedTags[0]['content'], [], false],
449  [$expectedTags[1]['type'], $expectedTags[1]['name'], $expectedTags[1]['content'], [], false],
450  ];
451  $pageRendererMock
452  ->expects(self::exactly(2))
453  ->method('setMetaTag')
454  ->willReturnCallback(function (string $type, string $name, string $content, array $subProperties, bool $replace) use (&$series): void {
455  $expectedArgs = array_shift($series);
456  self::assertSame($expectedArgs[0], $type);
457  self::assertSame($expectedArgs[1], $name);
458  self::assertSame($expectedArgs[2], $content);
459  self::assertSame($expectedArgs[3], $subProperties);
460  self::assertSame($expectedArgs[4], $replace);
461  });
462  $frontendTypoScript = new ‪FrontendTypoScript(new ‪RootNode(), [], [], []);
463  $frontendTypoScript->setSetupArray([]);
464  $frontendTypoScript->setPageArray([
465  'meta.' => $typoScript,
466  ]);
467  $frontendTypoScript->setConfigArray([]);
468  $request = (new ‪ServerRequest())
469  ->withAttribute('frontend.typoscript', $frontendTypoScript)
470  ->withAttribute('routing', new ‪PageArguments(1, '0', []))
471  ->withAttribute('language', $siteLanguage);
472  $subject = $this->getAccessibleMock(
473  RequestHandler::class,
474  ['getPageRenderer'],
475  [
477  new ‪ListenerProvider(new Container()),
478  new ‪TimeTracker(false),
479  new ‪FilePathSanitizer(),
480  new ‪TypoScriptService(),
481  new ‪Context(),
482  ],
483  );
484  $subject->method('getPageRenderer')->willReturn($pageRendererMock);
485  $subject->_call('processHtmlBasedRenderingSettings', $frontendController, $request);
486  }
487 
491  #[Test]
493  {
494  $getVars = ['outside' => '1'];
495  $postVars = ['world' => 'yo'];
496  GeneralUtility::flushInternalRuntimeCaches();
497  ‪$_SERVER['REQUEST_METHOD'] = 'POST';
498  ‪$_SERVER['HTTP_HOST'] = 'https://www.example.com/my/path/';
499  $_GET = $getVars;
500  $_POST = $postVars;
502 
503  $subject = $this->getAccessibleMock(RequestHandler::class, null, [], '', false);
504  $subject->_call('resetGlobalsToCurrentRequest', $request);
505  self::assertEquals($_GET, $getVars);
506  self::assertEquals($_POST, $postVars);
507  }
508 
512  #[Test]
514  {
515  $getVars = ['typical' => '1'];
516  $postVars = ['mixtape' => 'wheels'];
517  $modifiedGetVars = ['typical' => 1, 'dont-stop' => 'the-music'];
518  $modifiedPostVars = ['mixtape' => 'wheels', 'tx_blogexample_pi1' => ['uid' => 13]];
519  GeneralUtility::flushInternalRuntimeCaches();
520  ‪$_SERVER['REQUEST_METHOD'] = 'POST';
521  ‪$_SERVER['HTTP_HOST'] = 'https://www.example.com/my/path/';
522  $_GET = $getVars;
523  $_POST = $postVars;
525  $request = $request->withQueryParams($modifiedGetVars);
526  $request = $request->withParsedBody($modifiedPostVars);
527 
528  $subject = $this->getAccessibleMock(RequestHandler::class, null, [], '', false);
529  $subject->_call('resetGlobalsToCurrentRequest', $request);
530  self::assertEquals($_GET, $modifiedGetVars);
531  self::assertEquals($_POST, $modifiedPostVars);
532  }
533 
534  private function ‪createSiteWithLanguage(): ‪Site
535  {
536  return new ‪Site('test', 1, [
537  'identifier' => 'test',
538  'rootPageId' => 1,
539  'base' => '/',
540  'languages' => [
541  [
542  'base' => '/',
543  'languageId' => 3,
544  'locale' => 'fr_FR',
545  ],
546  ],
547  ]);
548  }
549 }
‪TYPO3\CMS\Core\Routing\PageArguments
Definition: PageArguments.php:26
‪TYPO3\CMS\Frontend\Tests\Unit\Http\RequestHandlerTest\generateHtmlTagIncludesAllPossibilitiesDataProvider
‪static generateHtmlTagIncludesAllPossibilitiesDataProvider()
Definition: RequestHandlerTest.php:51
‪TYPO3\CMS\Core\Information\Typo3Information
Definition: Typo3Information.php:28
‪TYPO3\CMS\Frontend\Resource\FilePathSanitizer
Definition: FilePathSanitizer.php:39
‪TYPO3\CMS\Frontend\Tests\Unit\Http\RequestHandlerTest\createSiteWithLanguage
‪createSiteWithLanguage()
Definition: RequestHandlerTest.php:534
‪TYPO3\CMS\Core\Context\Context
Definition: Context.php:54
‪TYPO3\CMS\Frontend\Tests\Unit\Http\RequestHandlerTest\generateMetaTagHtmlGeneratesCorrectTags
‪generateMetaTagHtmlGeneratesCorrectTags(array $typoScript, string $stdWrapResult, array $expectedTags)
Definition: RequestHandlerTest.php:280
‪TYPO3\CMS\Core\Site\Entity\Site
Definition: Site.php:42
‪TYPO3\CMS\Core\Page\PageRenderer
Definition: PageRenderer.php:44
‪TYPO3\CMS\Frontend\Tests\Unit\Http\RequestHandlerTest
Definition: RequestHandlerTest.php:48
‪TYPO3\CMS\Frontend\Tests\Unit\Http
Definition: RequestHandlerTest.php:18
‪TYPO3\CMS\Frontend\Tests\Unit\Http\RequestHandlerTest\resetGlobalsToCurrentRequestWithModifiedRequestOverridesGlobals
‪resetGlobalsToCurrentRequestWithModifiedRequestOverridesGlobals()
Definition: RequestHandlerTest.php:513
‪TYPO3\CMS\Core\Http\ServerRequestFactory
Definition: ServerRequestFactory.php:35
‪TYPO3\CMS\Core\Http\ServerRequest
Definition: ServerRequest.php:39
‪TYPO3\CMS\Frontend\Tests\Unit\Http\RequestHandlerTest\generateMultipleMetaTagsDataProvider
‪static generateMultipleMetaTagsDataProvider()
Definition: RequestHandlerTest.php:373
‪$_SERVER
‪$_SERVER['TYPO3_DEPRECATED_ENTRYPOINT']
Definition: legacy-backend.php:20
‪TYPO3\CMS\Frontend\Tests\Unit\Http\RequestHandlerTest\generateMetaTagHtmlGenerateNoTagWithEmptyContent
‪generateMetaTagHtmlGenerateNoTagWithEmptyContent()
Definition: RequestHandlerTest.php:325
‪TYPO3\CMS\Frontend\Tests\Unit\Http\RequestHandlerTest\generateMetaTagHtmlGeneratesCorrectTagsDataProvider
‪static generateMetaTagHtmlGeneratesCorrectTagsDataProvider()
Definition: RequestHandlerTest.php:169
‪TYPO3\CMS\Core\TypoScript\TypoScriptService
Definition: TypoScriptService.php:27
‪TYPO3\CMS\Frontend\Http\RequestHandler
Definition: RequestHandler.php:71
‪TYPO3\CMS\Frontend\Tests\Unit\Http\RequestHandlerTest\resetGlobalsToCurrentRequestDoesNotModifyAnything
‪resetGlobalsToCurrentRequestDoesNotModifyAnything()
Definition: RequestHandlerTest.php:492
‪TYPO3\CMS\Frontend\Tests\Unit\Http\RequestHandlerTest\generateMetaTagExpectExceptionOnBogusTags
‪generateMetaTagExpectExceptionOnBogusTags()
Definition: RequestHandlerTest.php:112
‪TYPO3\CMS\Core\EventDispatcher\NoopEventDispatcher
Definition: NoopEventDispatcher.php:29
‪TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController
Definition: TypoScriptFrontendController.php:58
‪TYPO3\CMS\Core\TypoScript\AST\Node\RootNode
Definition: RootNode.php:26
‪TYPO3\CMS\Frontend\Tests\Unit\Http\RequestHandlerTest\generateHtmlTagIncludesAllPossibilities
‪generateHtmlTagIncludesAllPossibilities(array $htmlTagAttributes, array $configuration, string $expectedResult)
Definition: RequestHandlerTest.php:102
‪TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer
Definition: ContentObjectRenderer.php:102
‪TYPO3\CMS\Core\Type\DocType
‪DocType
Definition: DocType.php:27
‪TYPO3\CMS\Frontend\Tests\Unit\Http\RequestHandlerTest\$resetSingletonInstances
‪bool $resetSingletonInstances
Definition: RequestHandlerTest.php:49
‪TYPO3\CMS\Core\TypoScript\FrontendTypoScript
Definition: FrontendTypoScript.php:30
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Core\EventDispatcher\ListenerProvider
Definition: ListenerProvider.php:30
‪TYPO3\CMS\Core\TimeTracker\TimeTracker
Definition: TimeTracker.php:34
‪TYPO3\CMS\Frontend\Tests\Unit\Http\RequestHandlerTest\generateMultipleMetaTags
‪generateMultipleMetaTags(array $typoScript, string $stdWrapResult, array $expectedTags)
Definition: RequestHandlerTest.php:430
‪TYPO3\CMS\Core\Http\ServerRequestFactory\fromGlobals
‪static ServerRequest fromGlobals()
Definition: ServerRequestFactory.php:59