‪TYPO3CMS  ‪main
InlineStackProcessorTest.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;
26 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
27 
28 final class ‪InlineStackProcessorTest extends UnitTestCase
29 {
30  protected bool ‪$resetSingletonInstances = true;
31 
32  public function ‪setUp(): void
33  {
34  parent::setUp();
35  $cacheManagerMock = $this->createMock(CacheManager::class);
36  $cacheMock = $this->createMock(FrontendInterface::class);
37  $cacheManagerMock->method('getCache')->with('runtime')->willReturn($cacheMock);
38  $cacheMock->method('get')->withAnyParameters()->willReturn(false);
39  $cacheMock->method('set')->withAnyParameters()->willReturn(false);
40  GeneralUtility::setSingletonInstance(CacheManager::class, $cacheManagerMock);
41  }
42 
43  public static function ‪structureStringIsParsedDataProvider(): array
44  {
45  return [
46  'simple 1-level table structure' => [
47  'data-pageId-childTable',
48  [
49  'unstable' => [
50  'table' => 'childTable',
51  ],
52  ],
53  [
54  'form' => '',
55  'object' => '',
56  ],
57  ],
58  'simple 1-level table-uid structure' => [
59  'data-pageId-childTable-childUid',
60  [
61  'unstable' => [
62  'table' => 'childTable',
63  'uid' => 'childUid',
64  ],
65  ],
66  [
67  'form' => '',
68  'object' => '',
69  ],
70  ],
71  'simple 1-level table-uid-field structure' => [
72  'data-pageId-childTable-childUid-childField',
73  [
74  'unstable' => [
75  'table' => 'childTable',
76  'uid' => 'childUid',
77  'field' => 'childField',
78  ],
79  ],
80  [
81  'form' => '',
82  'object' => '',
83  ],
84  ],
85  'simple 2-level table structure' => [
86  'data-pageId-parentTable-parentUid-parentField-childTable',
87  [
88  'stable' => [
89  [
90  'table' => 'parentTable',
91  'uid' => 'parentUid',
92  'field' => 'parentField',
93  'config' => [],
94  ],
95  ],
96  'unstable' => [
97  'table' => 'childTable',
98  ],
99  ],
100  [
101  'form' => 'data[parentTable][parentUid][parentField]',
102  'object' => 'data-pageId-parentTable-parentUid-parentField',
103  ],
104  ],
105  'simple 2-level table-uid structure' => [
106  'data-pageId-parentTable-parentUid-parentField-childTable-childUid',
107  [
108  'stable' => [
109  [
110  'table' => 'parentTable',
111  'uid' => 'parentUid',
112  'field' => 'parentField',
113  'config' => [],
114  ],
115  ],
116  'unstable' => [
117  'table' => 'childTable',
118  'uid' => 'childUid',
119  ],
120  ],
121  [
122  'form' => 'data[parentTable][parentUid][parentField]',
123  'object' => 'data-pageId-parentTable-parentUid-parentField',
124  ],
125  ],
126  'simple 2-level table-uid-field structure' => [
127  'data-pageId-parentTable-parentUid-parentField-childTable-childUid-childField',
128  [
129  'stable' => [
130  [
131  'table' => 'parentTable',
132  'uid' => 'parentUid',
133  'field' => 'parentField',
134  'config' => [],
135  ],
136  ],
137  'unstable' => [
138  'table' => 'childTable',
139  'uid' => 'childUid',
140  'field' => 'childField',
141  ],
142  ],
143  [
144  'form' => 'data[parentTable][parentUid][parentField]',
145  'object' => 'data-pageId-parentTable-parentUid-parentField',
146  ],
147  ],
148  'simple 3-level table structure' => [
149  'data-pageId-grandParentTable-grandParentUid-grandParentField-parentTable-parentUid-parentField-childTable',
150  [
151  'stable' => [
152  [
153  'table' => 'grandParentTable',
154  'uid' => 'grandParentUid',
155  'field' => 'grandParentField',
156  'config' => [],
157  ],
158  [
159  'table' => 'parentTable',
160  'uid' => 'parentUid',
161  'field' => 'parentField',
162  'config' => [],
163  ],
164  ],
165  'unstable' => [
166  'table' => 'childTable',
167  ],
168  ],
169  [
170  'form' => 'data[parentTable][parentUid][parentField]',
171  'object' => 'data-pageId-grandParentTable-grandParentUid-grandParentField-parentTable-parentUid-parentField',
172  ],
173  ],
174  'simple 3-level table-uid structure' => [
175  'data-pageId-grandParentTable-grandParentUid-grandParentField-parentTable-parentUid-parentField-childTable-childUid',
176  [
177  'stable' => [
178  [
179  'table' => 'grandParentTable',
180  'uid' => 'grandParentUid',
181  'field' => 'grandParentField',
182  'config' => [],
183  ],
184  [
185  'table' => 'parentTable',
186  'uid' => 'parentUid',
187  'field' => 'parentField',
188  'config' => [],
189  ],
190  ],
191  'unstable' => [
192  'table' => 'childTable',
193  'uid' => 'childUid',
194  ],
195  ],
196  [
197  'form' => 'data[parentTable][parentUid][parentField]',
198  'object' => 'data-pageId-grandParentTable-grandParentUid-grandParentField-parentTable-parentUid-parentField',
199  ],
200  ],
201  'simple 3-level table-uid-field structure' => [
202  'data-pageId-grandParentTable-grandParentUid-grandParentField-parentTable-parentUid-parentField-childTable-childUid-childField',
203  [
204  'stable' => [
205  [
206  'table' => 'grandParentTable',
207  'uid' => 'grandParentUid',
208  'field' => 'grandParentField',
209  'config' => [],
210  ],
211  [
212  'table' => 'parentTable',
213  'uid' => 'parentUid',
214  'field' => 'parentField',
215  'config' => [],
216  ],
217  ],
218  'unstable' => [
219  'table' => 'childTable',
220  'uid' => 'childUid',
221  'field' => 'childField',
222  ],
223  ],
224  [
225  'form' => 'data[parentTable][parentUid][parentField]',
226  'object' => 'data-pageId-grandParentTable-grandParentUid-grandParentField-parentTable-parentUid-parentField',
227  ],
228  ],
229  'flexform 3-level table-uid structure' => [
230  'data-pageId-grandParentTable-grandParentUid-grandParentField---data---sDEF---lDEF---grandParentFlexForm---vDEF-parentTable-parentUid-parentField-childTable-childUid',
231  [
232  'stable' => [
233  [
234  'table' => 'grandParentTable',
235  'uid' => 'grandParentUid',
236  'field' => 'grandParentField',
237  'flexform' => [
238  'data', 'sDEF', 'lDEF', 'grandParentFlexForm', 'vDEF',
239  ],
240  'config' => [],
241  ],
242  [
243  'table' => 'parentTable',
244  'uid' => 'parentUid',
245  'field' => 'parentField',
246  'config' => [],
247  ],
248  ],
249  'unstable' => [
250  'table' => 'childTable',
251  'uid' => 'childUid',
252  ],
253  ],
254  [
255  'form' => 'data[parentTable][parentUid][parentField]',
256  'object' => 'data-pageId-grandParentTable-grandParentUid-grandParentField---data---sDEF---lDEF---grandParentFlexForm---vDEF-parentTable-parentUid-parentField',
257  ],
258  ],
259  ];
260  }
261 
262  #[DataProvider('structureStringIsParsedDataProvider')]
263  #[Test]
264  public function ‪initializeByParsingDomObjectIdStringParsesStructureString(string $string, array $expectedInlineStructure, array $_): void
265  {
266  $subject = $this->getAccessibleMock(InlineStackProcessor::class, null);
267  $subject->initializeByParsingDomObjectIdString($string);
268  $structure = $subject->_get('inlineStructure');
269  self::assertEquals($expectedInlineStructure, $structure);
270  }
271 
272  #[DataProvider('structureStringIsParsedDataProvider')]
273  #[Test]
274  public function ‪getCurrentStructureFormPrefixReturnsExpectedStringAfterInitializationByStructureString(string $string, array $_, array $expectedFormName): void
275  {
276  $subject = new ‪InlineStackProcessor();
277  $subject->initializeByParsingDomObjectIdString($string);
278  self::assertEquals($expectedFormName['form'], $subject->getCurrentStructureFormPrefix());
279  }
280 
281  #[DataProvider('structureStringIsParsedDataProvider')]
282  #[Test]
283  public function ‪getCurrentStructureDomObjectIdPrefixReturnsExpectedStringAfterInitializationByStructureString(string $string, array $_, array $expectedFormName): void
284  {
285  $subject = new ‪InlineStackProcessor();
286  $subject->initializeByParsingDomObjectIdString($string);
287  self::assertEquals($expectedFormName['object'], $subject->getCurrentStructureDomObjectIdPrefix('pageId'));
288  }
289 }
‪TYPO3\CMS\Backend\Tests\Unit\Form\InlineStackProcessorTest\getCurrentStructureFormPrefixReturnsExpectedStringAfterInitializationByStructureString
‪getCurrentStructureFormPrefixReturnsExpectedStringAfterInitializationByStructureString(string $string, array $_, array $expectedFormName)
Definition: InlineStackProcessorTest.php:274
‪TYPO3\CMS\Backend\Tests\Unit\Form\InlineStackProcessorTest\setUp
‪setUp()
Definition: InlineStackProcessorTest.php:32
‪TYPO3\CMS\Backend\Tests\Unit\Form\InlineStackProcessorTest\initializeByParsingDomObjectIdStringParsesStructureString
‪initializeByParsingDomObjectIdStringParsesStructureString(string $string, array $expectedInlineStructure, array $_)
Definition: InlineStackProcessorTest.php:264
‪TYPO3\CMS\Backend\Tests\Unit\Form\InlineStackProcessorTest\$resetSingletonInstances
‪bool $resetSingletonInstances
Definition: InlineStackProcessorTest.php:30
‪TYPO3\CMS\Backend\Tests\Unit\Form\InlineStackProcessorTest\getCurrentStructureDomObjectIdPrefixReturnsExpectedStringAfterInitializationByStructureString
‪getCurrentStructureDomObjectIdPrefixReturnsExpectedStringAfterInitializationByStructureString(string $string, array $_, array $expectedFormName)
Definition: InlineStackProcessorTest.php:283
‪TYPO3\CMS\Backend\Tests\Unit\Form\InlineStackProcessorTest\structureStringIsParsedDataProvider
‪static structureStringIsParsedDataProvider()
Definition: InlineStackProcessorTest.php:43
‪TYPO3\CMS\Backend\Tests\Unit\Form\InlineStackProcessorTest
Definition: InlineStackProcessorTest.php:29
‪TYPO3\CMS\Core\Cache\CacheManager
Definition: CacheManager.php:36
‪TYPO3\CMS\Core\Cache\Frontend\FrontendInterface
Definition: FrontendInterface.php:22
‪TYPO3\CMS\Backend\Form\InlineStackProcessor
Definition: InlineStackProcessor.php:32
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Backend\Tests\Unit\Form