‪TYPO3CMS  ‪main
RendererRegistryTest.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\Test;
21 use PHPUnit\Framework\MockObject\MockObject;
28 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
29 
30 final class ‪RendererRegistryTest extends UnitTestCase
31 {
32  protected bool ‪$resetSingletonInstances = true;
33 
37  protected function ‪getTestRendererRegistry(array $createsRendererInstances = []): ‪RendererRegistry&MockObject
38  {
39  ‪$rendererRegistry = $this->getMockBuilder(RendererRegistry::class)
40  ->onlyMethods(['createRendererInstance'])
41  ->getMock();
42 
43  if (!empty($createsRendererInstances)) {
45  ->method('createRendererInstance')
46  ->willReturnMap($createsRendererInstances);
47  }
48 
49  return ‪$rendererRegistry;
50  }
51 
52  #[Test]
54  {
55  $rendererClass = ‪StringUtility::getUniqueId('myRenderer');
56  $rendererObject = $this->getMockBuilder(FileRendererInterface::class)
57  ->setMockClassName($rendererClass)
58  ->getMock();
59 
60  ‪$rendererRegistry = $this->‪getTestRendererRegistry([[$rendererClass, $rendererObject]]);
61 
62  ‪$rendererRegistry->registerRendererClass($rendererClass);
63  self::assertContains($rendererObject, ‪$rendererRegistry->getRendererInstances());
64  }
65 
66  #[Test]
68  {
69  $this->expectException(\InvalidArgumentException::class);
70  $this->expectExceptionCode(1411840171);
71 
73  ‪$rendererRegistry->registerRendererClass(‪StringUtility::getUniqueId());
74  }
75 
76  #[Test]
78  {
79  $this->expectException(\InvalidArgumentException::class);
80  $this->expectExceptionCode(1411840172);
81 
82  $className = __CLASS__;
84  ‪$rendererRegistry->registerRendererClass($className);
85  }
86 
87  #[Test]
89  {
90  $rendererClass1 = ‪StringUtility::getUniqueId('myRenderer1');
91  $rendererObject1 = $this->getMockBuilder(FileRendererInterface::class)
92  ->setMockClassName($rendererClass1)
93  ->getMock();
94  $rendererObject1->method('getPriority')->willReturn(1);
95 
96  $rendererClass2 = ‪StringUtility::getUniqueId('myRenderer2');
97  $rendererObject2 = $this->getMockBuilder(FileRendererInterface::class)
98  ->setMockClassName($rendererClass2)
99  ->getMock();
100  $rendererObject2->method('getPriority')->willReturn(10);
101 
102  $rendererClass3 = ‪StringUtility::getUniqueId('myRenderer3');
103  $rendererObject3 = $this->getMockBuilder(FileRendererInterface::class)
104  ->setMockClassName($rendererClass3)
105  ->getMock();
106  $rendererObject3->method('getPriority')->willReturn(2);
107 
108  $createdRendererInstances = [
109  [$rendererClass1, $rendererObject1],
110  [$rendererClass2, $rendererObject2],
111  [$rendererClass3, $rendererObject3],
112  ];
113 
114  ‪$rendererRegistry = $this->‪getTestRendererRegistry($createdRendererInstances);
115  ‪$rendererRegistry->registerRendererClass($rendererClass1);
116  ‪$rendererRegistry->registerRendererClass($rendererClass2);
117  ‪$rendererRegistry->registerRendererClass($rendererClass3);
118 
119  $rendererInstances = ‪$rendererRegistry->getRendererInstances();
120  self::assertInstanceOf($rendererClass2, $rendererInstances[0]);
121  self::assertInstanceOf($rendererClass3, $rendererInstances[1]);
122  self::assertInstanceOf($rendererClass1, $rendererInstances[2]);
123  }
124 
125  #[Test]
127  {
128  $rendererClass1 = ‪StringUtility::getUniqueId('myRenderer1');
129  $rendererObject1 = $this->getMockBuilder(FileRendererInterface::class)
130  ->setMockClassName($rendererClass1)
131  ->getMock();
132  $rendererObject1->method('getPriority')->willReturn(1);
133 
134  $rendererClass2 = ‪StringUtility::getUniqueId('myRenderer2');
135  $rendererObject2 = $this->getMockBuilder(FileRendererInterface::class)
136  ->setMockClassName($rendererClass2)
137  ->getMock();
138  $rendererObject2->method('getPriority')->willReturn(1);
139 
140  $createdRendererInstances = [
141  [$rendererClass1, $rendererObject1],
142  [$rendererClass2, $rendererObject2],
143  ];
144 
145  ‪$rendererRegistry = $this->‪getTestRendererRegistry($createdRendererInstances);
146  ‪$rendererRegistry->registerRendererClass($rendererClass1);
147  ‪$rendererRegistry->registerRendererClass($rendererClass2);
148 
149  $rendererInstances = ‪$rendererRegistry->getRendererInstances();
150  self::assertContains($rendererObject1, $rendererInstances);
151  self::assertContains($rendererObject2, $rendererInstances);
152  }
153 
154  #[Test]
155  public function ‪getRendererReturnsCorrectInstance(): void
156  {
157  $rendererClass1 = ‪StringUtility::getUniqueId('myVideoRenderer');
158  $rendererObject1 = $this->getMockBuilder(FileRendererInterface::class)
159  ->onlyMethods(['getPriority', 'canRender', 'render'])
160  ->setMockClassName($rendererClass1)
161  ->getMock();
162  $rendererObject1->method('getPriority')->willReturn(1);
163  $rendererObject1->expects(self::once())->method('canRender')->willReturn(true);
164 
165  $rendererClass2 = ‪StringUtility::getUniqueId('myAudioRenderer');
166  $rendererObject2 = $this->getMockBuilder(FileRendererInterface::class)
167  ->onlyMethods(['getPriority', 'canRender', 'render'])
168  ->setMockClassName($rendererClass2)
169  ->getMock();
170  $rendererObject2->method('getPriority')->willReturn(10);
171  $rendererObject2->expects(self::once())->method('canRender')->willReturn(false);
172 
173  $fileResourceMock = $this->createMock(File::class);
174 
175  $createdRendererInstances = [
176  [$rendererClass1, $rendererObject1],
177  [$rendererClass2, $rendererObject2],
178  ];
179 
180  ‪$rendererRegistry = $this->‪getTestRendererRegistry($createdRendererInstances);
181  ‪$rendererRegistry->registerRendererClass($rendererClass1);
182  ‪$rendererRegistry->registerRendererClass($rendererClass2);
183 
184  ‪$rendererRegistry->getRendererInstances();
185 
186  $renderer = ‪$rendererRegistry->getRenderer($fileResourceMock);
187 
188  self::assertInstanceOf($rendererClass1, $renderer);
189  }
190 
191  #[Test]
193  {
195  ‪$rendererRegistry->registerRendererClass(AudioTagRenderer::class);
196  ‪$rendererRegistry->registerRendererClass(VideoTagRenderer::class);
197 
198  $fileResourceMock = $this->createMock(File::class);
199  $fileResourceMock->method('getMimeType')->willReturn('video/mp4');
200 
201  ‪$rendererRegistry->getRendererInstances();
202 
203  $renderer = ‪$rendererRegistry->getRenderer($fileResourceMock);
204 
205  self::assertInstanceOf(VideoTagRenderer::class, $renderer);
206  }
207 }
‪TYPO3\CMS\Core\Tests\Unit\Resource\Rendering\RendererRegistryTest\registeredFileRenderClassCanBeRetrieved
‪registeredFileRenderClassCanBeRetrieved()
Definition: RendererRegistryTest.php:53
‪TYPO3\CMS\Core\Tests\Unit\Resource\Rendering\RendererRegistryTest\registeredFileRendererClassWithSamePriorityAreAllReturned
‪registeredFileRendererClassWithSamePriorityAreAllReturned()
Definition: RendererRegistryTest.php:126
‪TYPO3\CMS\Core\Resource\Rendering\VideoTagRenderer
Definition: VideoTagRenderer.php:26
‪TYPO3\CMS\Core\Tests\Unit\Resource\Rendering\RendererRegistryTest\registerRendererClassThrowsExceptionIfClassDoesNotExist
‪registerRendererClassThrowsExceptionIfClassDoesNotExist()
Definition: RendererRegistryTest.php:67
‪TYPO3\CMS\Core\Tests\Unit\Resource\Rendering\RendererRegistryTest\getRendererReturnsCorrectInstance2
‪getRendererReturnsCorrectInstance2()
Definition: RendererRegistryTest.php:192
‪TYPO3\CMS\Core\Tests\Unit\Resource\Rendering
Definition: AudioTagRendererTest.php:18
‪TYPO3\CMS\Core\Resource\Rendering\AudioTagRenderer
Definition: AudioTagRenderer.php:26
‪TYPO3\CMS\Core\Tests\Unit\Resource\Rendering\RendererRegistryTest\registerRendererClassThrowsExceptionIfClassDoesNotImplementRightInterface
‪registerRendererClassThrowsExceptionIfClassDoesNotImplementRightInterface()
Definition: RendererRegistryTest.php:77
‪TYPO3\CMS\Core\Tests\Unit\Resource\Rendering\RendererRegistryTest\registerRendererClassWithHighestPriorityIsFirstInResult
‪registerRendererClassWithHighestPriorityIsFirstInResult()
Definition: RendererRegistryTest.php:88
‪TYPO3\CMS\Core\Tests\Unit\Resource\Rendering\RendererRegistryTest\getRendererReturnsCorrectInstance
‪getRendererReturnsCorrectInstance()
Definition: RendererRegistryTest.php:155
‪TYPO3\CMS\Core\Tests\Unit\Resource\Rendering\RendererRegistryTest\$resetSingletonInstances
‪bool $resetSingletonInstances
Definition: RendererRegistryTest.php:32
‪TYPO3\CMS\Core\Resource\File
Definition: File.php:26
‪TYPO3\CMS\Core\Resource\Rendering\FileRendererInterface
Definition: FileRendererInterface.php:25
‪TYPO3\CMS\Core\Tests\Unit\Resource\Rendering\RendererRegistryTest\getTestRendererRegistry
‪getTestRendererRegistry(array $createsRendererInstances=[])
Definition: RendererRegistryTest.php:37
‪TYPO3\CMS\Core\Tests\Unit\Resource\Rendering\RendererRegistryTest
Definition: RendererRegistryTest.php:31
‪TYPO3\CMS\Core\Utility\StringUtility
Definition: StringUtility.php:24
‪$rendererRegistry
‪$rendererRegistry
Definition: ext_localconf.php:44
‪TYPO3\CMS\Core\Resource\Rendering\RendererRegistry
Definition: RendererRegistry.php:26
‪TYPO3\CMS\Core\Utility\StringUtility\getUniqueId
‪static getUniqueId(string $prefix='')
Definition: StringUtility.php:57