‪TYPO3CMS  ‪main
ExtractorRegistryTest.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\MockObject\MockObject;
23 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
24 
28 final class ‪ExtractorRegistryTest extends UnitTestCase
29 {
34  {
35  $extractorClass = 'a9f4d5e4ebb4b03547a2a6094e1170ac';
36  $extractorObject = $this->getMockBuilder(ExtractorInterface::class)
37  ->setMockClassName($extractorClass)
38  ->getMock();
39 
40  ‪$extractorRegistry = $this->‪getMockExtractorRegistry([[$extractorClass, $extractorObject]]);
41 
42  ‪$extractorRegistry->registerExtractionService($extractorClass);
43  self::assertContains($extractorObject, ‪$extractorRegistry->getExtractors());
44  }
45 
50  {
51  $this->expectException(\InvalidArgumentException::class);
52  $this->expectExceptionCode(1422705270);
53 
54  $className = 'e1f9aa4e1cd3aa7ff05dcdccb117156a';
56  ‪$extractorRegistry->registerExtractionService($className);
57  }
58 
63  {
64  $this->expectException(\InvalidArgumentException::class);
65  $this->expectExceptionCode(1422705271);
66 
67  $className = __CLASS__;
69  ‪$extractorRegistry->registerExtractionService($className);
70  }
71 
76  {
77  $extractorClass1 = 'db76010e5c24658c35ea1605cce2391d';
78  $extractorObject1 = $this->getMockBuilder(ExtractorInterface::class)
79  ->setMockClassName($extractorClass1)
80  ->getMock();
81  $extractorObject1->method('getExecutionPriority')->willReturn(1);
82 
83  $extractorClass2 = 'ad9195e2487eea33c8a2abd5cf33cba4';
84  $extractorObject2 = $this->getMockBuilder(ExtractorInterface::class)
85  ->setMockClassName($extractorClass2)
86  ->getMock();
87  $extractorObject2->method('getExecutionPriority')->willReturn(10);
88 
89  $extractorClass3 = 'cef9aa4e1cd3aa7ff05dcdccb117156a';
90  $extractorObject3 = $this->getMockBuilder(ExtractorInterface::class)
91  ->setMockClassName($extractorClass3)
92  ->getMock();
93  $extractorObject3->method('getExecutionPriority')->willReturn(2);
94 
95  $createdExtractorInstances = [
96  [$extractorClass1, $extractorObject1],
97  [$extractorClass2, $extractorObject2],
98  [$extractorClass3, $extractorObject3],
99  ];
100 
101  ‪$extractorRegistry = $this->‪getMockExtractorRegistry($createdExtractorInstances);
102  ‪$extractorRegistry->registerExtractionService($extractorClass1);
103  ‪$extractorRegistry->registerExtractionService($extractorClass2);
104  ‪$extractorRegistry->registerExtractionService($extractorClass3);
105 
106  $extractorInstances = ‪$extractorRegistry->getExtractors();
107 
108  self::assertInstanceOf($extractorClass2, $extractorInstances[0]);
109  self::assertInstanceOf($extractorClass3, $extractorInstances[1]);
110  self::assertInstanceOf($extractorClass1, $extractorInstances[2]);
111  }
112 
117  {
118  $extractorClass1 = 'b70551b2b2db62b6b15a9bbfcbd50614';
119  $extractorObject1 = $this->getMockBuilder(ExtractorInterface::class)
120  ->setMockClassName($extractorClass1)
121  ->getMock();
122  $extractorObject1->method('getExecutionPriority')->willReturn(1);
123 
124  $extractorClass2 = 'ac318f1659d278b79b38262f23a78d5d';
125  $extractorObject2 = $this->getMockBuilder(ExtractorInterface::class)
126  ->setMockClassName($extractorClass2)
127  ->getMock();
128  $extractorObject2->method('getExecutionPriority')->willReturn(1);
129 
130  $createdExtractorInstances = [
131  [$extractorClass1, $extractorObject1],
132  [$extractorClass2, $extractorObject2],
133  ];
134 
135  ‪$extractorRegistry = $this->‪getMockExtractorRegistry($createdExtractorInstances);
136  ‪$extractorRegistry->registerExtractionService($extractorClass1);
137  ‪$extractorRegistry->registerExtractionService($extractorClass2);
138 
139  $extractorInstances = ‪$extractorRegistry->getExtractors();
140  self::assertContains($extractorObject1, $extractorInstances);
141  self::assertContains($extractorObject2, $extractorInstances);
142  }
143 
148  {
149  $extractorClass1 = 'b70551b2b2db62b6b15a9bbfcbd50614';
150  $extractorObject1 = $this->getMockBuilder(ExtractorInterface::class)
151  ->setMockClassName($extractorClass1)
152  ->getMock();
153  $extractorObject1->method('getExecutionPriority')->willReturn(1);
154  $extractorObject1->method('getDriverRestrictions')->willReturn([]);
155 
156  $extractorClass2 = 'ac318f1659d278b79b38262f23a78d5d';
157  $extractorObject2 = $this->getMockBuilder(ExtractorInterface::class)
158  ->setMockClassName($extractorClass2)
159  ->getMock();
160  $extractorObject2->method('getExecutionPriority')->willReturn(1);
161  $extractorObject2->method('getDriverRestrictions')->willReturn(['Bla']);
162 
163  $createdExtractorInstances = [
164  [$extractorClass1, $extractorObject1],
165  [$extractorClass2, $extractorObject2],
166  ];
167 
168  ‪$extractorRegistry = $this->‪getMockExtractorRegistry($createdExtractorInstances);
169  ‪$extractorRegistry->registerExtractionService($extractorClass1);
170  ‪$extractorRegistry->registerExtractionService($extractorClass2);
171 
172  $extractorInstances = ‪$extractorRegistry->getExtractorsWithDriverSupport('Bla');
173  self::assertContains($extractorObject1, $extractorInstances);
174  self::assertContains($extractorObject2, $extractorInstances);
175  }
176 
181  {
182  $extractorClass1 = 'b70551b2b2db62b6b15a9bbfcbd50614';
183  $extractorObject1 = $this->getMockBuilder(ExtractorInterface::class)
184  ->setMockClassName($extractorClass1)
185  ->getMock();
186  $extractorObject1->method('getExecutionPriority')->willReturn(1);
187  $extractorObject1->method('getDriverRestrictions')->willReturn(['Foo']);
188 
189  $extractorClass2 = 'ac318f1659d278b79b38262f23a78d5d';
190  $extractorObject2 = $this->getMockBuilder(ExtractorInterface::class)
191  ->setMockClassName($extractorClass2)
192  ->getMock();
193  $extractorObject2->method('getExecutionPriority')->willReturn(1);
194  $extractorObject2->method('getDriverRestrictions')->willReturn(['Bla']);
195 
196  $createdExtractorInstances = [
197  [$extractorClass1, $extractorObject1],
198  [$extractorClass2, $extractorObject2],
199  ];
200 
201  ‪$extractorRegistry = $this->‪getMockExtractorRegistry($createdExtractorInstances);
202  ‪$extractorRegistry->registerExtractionService($extractorClass1);
203  ‪$extractorRegistry->registerExtractionService($extractorClass2);
204 
205  $extractorInstances = ‪$extractorRegistry->getExtractorsWithDriverSupport('Bla');
206  self::assertNotContains($extractorObject1, $extractorInstances);
207  self::assertContains($extractorObject2, $extractorInstances);
208  }
209 
213  protected function ‪getMockExtractorRegistry(array $createsExtractorInstances = []): ‪ExtractorRegistry&MockObject
214  {
215  ‪$extractorRegistry = $this->getMockBuilder(ExtractorRegistry::class)
216  ->onlyMethods(['createExtractorInstance'])
217  ->getMock();
218 
219  if (!empty($createsExtractorInstances)) {
221  ->method('createExtractorInstance')
222  ->willReturnMap($createsExtractorInstances);
223  }
224 
225  return ‪$extractorRegistry;
226  }
227 }
‪TYPO3\CMS\Core\Tests\Unit\Resource\Index\ExtractorRegistryTest\registeredExtractorClassCanBeRetrieved
‪registeredExtractorClassCanBeRetrieved()
Definition: ExtractorRegistryTest.php:33
‪$extractorRegistry
‪$extractorRegistry
Definition: ext_localconf.php:52
‪TYPO3\CMS\Core\Tests\Unit\Resource\Index\ExtractorRegistryTest\registerExtractorClassThrowsExceptionIfClassDoesNotImplementRightInterface
‪registerExtractorClassThrowsExceptionIfClassDoesNotImplementRightInterface()
Definition: ExtractorRegistryTest.php:62
‪TYPO3\CMS\Core\Tests\Unit\Resource\Index\ExtractorRegistryTest\registeredExtractorsCanBeFilteredByDriverType
‪registeredExtractorsCanBeFilteredByDriverType()
Definition: ExtractorRegistryTest.php:180
‪TYPO3\CMS\Core\Tests\Unit\Resource\Index\ExtractorRegistryTest
Definition: ExtractorRegistryTest.php:29
‪TYPO3\CMS\Core\Resource\Index\ExtractorInterface
Definition: ExtractorInterface.php:25
‪TYPO3\CMS\Core\Resource\Index\ExtractorRegistry
Definition: ExtractorRegistry.php:25
‪TYPO3\CMS\Core\Tests\Unit\Resource\Index\ExtractorRegistryTest\registeredExtractorClassWithSamePriorityAreAllReturned
‪registeredExtractorClassWithSamePriorityAreAllReturned()
Definition: ExtractorRegistryTest.php:116
‪TYPO3\CMS\Core\Tests\Unit\Resource\Index\ExtractorRegistryTest\registeredExtractorsCanBeFilteredByDriverTypeButNoTyeREstrictionIsTreatedAsCompatible
‪registeredExtractorsCanBeFilteredByDriverTypeButNoTyeREstrictionIsTreatedAsCompatible()
Definition: ExtractorRegistryTest.php:147
‪TYPO3\CMS\Core\Tests\Unit\Resource\Index
Definition: ExtractorRegistryTest.php:18
‪TYPO3\CMS\Core\Tests\Unit\Resource\Index\ExtractorRegistryTest\getMockExtractorRegistry
‪getMockExtractorRegistry(array $createsExtractorInstances=[])
Definition: ExtractorRegistryTest.php:213
‪TYPO3\CMS\Core\Tests\Unit\Resource\Index\ExtractorRegistryTest\registerExtractorClassThrowsExceptionIfClassDoesNotExist
‪registerExtractorClassThrowsExceptionIfClassDoesNotExist()
Definition: ExtractorRegistryTest.php:49
‪TYPO3\CMS\Core\Tests\Unit\Resource\Index\ExtractorRegistryTest\registerExtractorClassWithHighestPriorityIsFirstInResult
‪registerExtractorClassWithHighestPriorityIsFirstInResult()
Definition: ExtractorRegistryTest.php:75