‪TYPO3CMS  ‪main
ExtensionManagementUtilityTest.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 PHPUnit\Framework\MockObject\MockObject;
26 use TYPO3\CMS\Core\Package\PackageManager;
32 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
33 
34 final class ‪ExtensionManagementUtilityTest extends UnitTestCase
35 {
36  protected bool ‪$resetSingletonInstances = true;
37  protected ?PackageManager ‪$backUpPackageManager;
38 
39  protected function ‪setUp(): void
40  {
41  parent::setUp();
43  }
44 
45  protected function ‪tearDown(): void
46  {
48  parent::tearDown();
49  }
50 
51  protected function ‪createMockPackageManagerWithMockPackage(string $packageKey, array $packageMethods = ['getPackagePath', 'getPackageKey']): MockObject&PackageManager
52  {
53  $packagePath = ‪Environment::getVarPath() . '/tests/' . $packageKey . '/';
54  ‪GeneralUtility::mkdir_deep($packagePath);
55  $this->testFilesToDelete[] = $packagePath;
56  $package = $this->getMockBuilder(Package::class)
57  ->disableOriginalConstructor()
58  ->onlyMethods($packageMethods)
59  ->getMock();
60  $packageManager = $this->getMockBuilder(PackageManager::class)
61  ->onlyMethods(['isPackageActive', 'getPackage', 'getActivePackages'])
62  ->disableOriginalConstructor()
63  ->getMock();
64  $package
65  ->method('getPackagePath')
66  ->willReturn($packagePath);
67  $package
68  ->method('getPackageKey')
69  ->willReturn($packageKey);
70  $packageManager
71  ->method('isPackageActive')
72  ->willReturnMap([
73  [null, false],
74  [$packageKey, true],
75  ]);
76  $packageManager
77  ->method('getPackage')
78  ->with(self::equalTo($packageKey))
79  ->willReturn($package);
80  $packageManager
81  ->method('getActivePackages')
82  ->willReturn([$packageKey => $package]);
83  return $packageManager;
84  }
85 
87  // Tests concerning isLoaded
89  #[Test]
91  {
93  }
94 
96  // Tests concerning extPath
98  #[Test]
100  {
101  $this->expectException(\BadFunctionCallException::class);
102  $this->expectExceptionCode(1365429656);
103 
104  $packageName = ‪StringUtility::getUniqueId('foo');
105  $packageManager = $this->getMockBuilder(PackageManager::class)
106  ->onlyMethods(['isPackageActive'])
107  ->disableOriginalConstructor()
108  ->getMock();
109  $packageManager->expects(self::once())
110  ->method('isPackageActive')
111  ->with(self::equalTo($packageName))
112  ->willReturn(false);
115  }
116 
117  #[Test]
118  public function ‪extPathAppendsScriptNameToPath(): void
119  {
120  $package = $this->getMockBuilder(Package::class)
121  ->disableOriginalConstructor()
122  ->onlyMethods(['getPackagePath'])
123  ->getMock();
124  $packageManager = $this->getMockBuilder(PackageManager::class)
125  ->onlyMethods(['isPackageActive', 'getPackage'])
126  ->disableOriginalConstructor()
127  ->getMock();
128  $package->expects(self::once())
129  ->method('getPackagePath')
130  ->willReturn(‪Environment::getPublicPath() . '/foo/');
131  $packageManager->expects(self::once())
132  ->method('isPackageActive')
133  ->with(self::equalTo('foo'))
134  ->willReturn(true);
135  $packageManager->expects(self::once())
136  ->method('getPackage')
137  ->with('foo')
138  ->willReturn($package);
140  self::assertSame(‪Environment::getPublicPath() . '/foo/bar.txt', ‪ExtensionManagementUtility::extPath('foo', 'bar.txt'));
141  }
142 
144  // Utility functions
146 
152  private function ‪generateTCAForTable(string $table): array
153  {
154  ‪$tca = [];
155  ‪$tca[$table] = [];
156  ‪$tca[$table]['columns'] = [
157  'fieldA' => [],
158  'fieldC' => [],
159  ];
160  ‪$tca[$table]['types'] = [
161  'typeA' => ['showitem' => 'fieldA, fieldB, fieldC;labelC, --palette--;;paletteC, fieldC1, fieldD, fieldD1'],
162  'typeB' => ['showitem' => 'fieldA, fieldB, fieldC;labelC, --palette--;;paletteC, fieldC1, fieldD, fieldD1'],
163  'typeC' => ['showitem' => 'fieldC;;paletteD'],
164  ];
165  ‪$tca[$table]['palettes'] = [
166  'paletteA' => ['showitem' => 'fieldX, fieldX1, fieldY'],
167  'paletteB' => ['showitem' => 'fieldX, fieldX1, fieldY'],
168  'paletteC' => ['showitem' => 'fieldX, fieldX1, fieldY'],
169  'paletteD' => ['showitem' => 'fieldX, fieldX1, fieldY'],
170  ];
171  return ‪$tca;
172  }
173 
177  public static function ‪extensionKeyDataProvider(): array
178  {
179  return [
180  'Without underscores' => [
181  'testkey',
182  'tx_testkey',
183  ],
184  'With underscores' => [
185  'this_is_a_test_extension',
186  'tx_thisisatestextension',
187  ],
188  'With user prefix and without underscores' => [
189  'user_testkey',
190  'user_testkey',
191  ],
192  'With user prefix and with underscores' => [
193  'user_test_key',
194  'user_testkey',
195  ],
196  ];
197  }
198 
199  #[DataProvider('extensionKeyDataProvider')]
200  #[Test]
201  public function ‪getClassNamePrefixForExtensionKey(string $extensionName, string $expectedPrefix): void
202  {
203  self::assertSame($expectedPrefix, ‪ExtensionManagementUtility::getCN($extensionName));
204  }
205 
207  // Tests concerning addToAllTCAtypes
209 
214  #[Test]
216  {
217  $table = ‪StringUtility::getUniqueId('tx_coretest_table');
218  ‪$GLOBALS['TCA'] = $this->‪generateTCAForTable($table);
219  ‪ExtensionManagementUtility::addToAllTCAtypes($table, 'newA, newA, newB, fieldA', '', 'before:fieldD');
220  // Checking typeA:
221  self::assertEquals('fieldA, fieldB, fieldC;labelC, --palette--;;paletteC, fieldC1, newA, newB, fieldD, fieldD1', ‪$GLOBALS['TCA'][$table]['types']['typeA']['showitem']);
222  // Checking typeB:
223  self::assertEquals('fieldA, fieldB, fieldC;labelC, --palette--;;paletteC, fieldC1, newA, newB, fieldD, fieldD1', ‪$GLOBALS['TCA'][$table]['types']['typeB']['showitem']);
224  }
225 
231  #[Test]
233  {
234  $table = ‪StringUtility::getUniqueId('tx_coretest_table');
235  ‪$GLOBALS['TCA'] = $this->‪generateTCAForTable($table);
236  ‪ExtensionManagementUtility::addToAllTCAtypes($table, 'newA, newA, newB, fieldA', '', 'after:fieldC');
237  // Checking typeA:
238  self::assertEquals('fieldA, fieldB, fieldC;labelC, newA, newB, --palette--;;paletteC, fieldC1, fieldD, fieldD1', ‪$GLOBALS['TCA'][$table]['types']['typeA']['showitem']);
239  // Checking typeB:
240  self::assertEquals('fieldA, fieldB, fieldC;labelC, newA, newB, --palette--;;paletteC, fieldC1, fieldD, fieldD1', ‪$GLOBALS['TCA'][$table]['types']['typeB']['showitem']);
241  }
242 
248  #[Test]
250  {
251  $table = ‪StringUtility::getUniqueId('tx_coretest_table');
252  ‪$GLOBALS['TCA'] = $this->‪generateTCAForTable($table);
253  ‪$GLOBALS['TCA'][$table]['types']['typeD'] = ['showitem' => 'fieldY, --palette--;;standard, fieldZ'];
254  ‪ExtensionManagementUtility::addToAllTCAtypes($table, 'newA, newA, newB, fieldA', '', 'after:--palette--;;standard');
255  // Checking typeD:
256  self::assertEquals('fieldY, --palette--;;standard, newA, newB, fieldA, fieldZ', ‪$GLOBALS['TCA'][$table]['types']['typeD']['showitem']);
257  }
258 
264  #[Test]
266  {
267  $table = ‪StringUtility::getUniqueId('tx_coretest_table');
268  ‪$GLOBALS['TCA'] = $this->‪generateTCAForTable($table);
269  ‪ExtensionManagementUtility::addToAllTCAtypes($table, 'newA, newA, newB, fieldA', '', 'after:fieldX1');
270  // Checking typeA:
271  self::assertEquals('fieldA, fieldB, fieldC;labelC, --palette--;;paletteC, newA, newB, fieldC1, fieldD, fieldD1', ‪$GLOBALS['TCA'][$table]['types']['typeA']['showitem']);
272  }
273 
279  #[Test]
281  {
282  $table = ‪StringUtility::getUniqueId('tx_coretest_table');
283  ‪$GLOBALS['TCA'] = $this->‪generateTCAForTable($table);
284  ‪ExtensionManagementUtility::addToAllTCAtypes($table, 'newA, newA, newB, fieldA', 'typeA', 'before:fieldD');
285  // Checking typeA:
286  self::assertEquals('fieldA, fieldB, fieldC;labelC, --palette--;;paletteC, fieldC1, newA, newB, fieldD, fieldD1', ‪$GLOBALS['TCA'][$table]['types']['typeA']['showitem']);
287  // Checking typeB:
288  self::assertEquals('fieldA, fieldB, fieldC;labelC, --palette--;;paletteC, fieldC1, fieldD, fieldD1', ‪$GLOBALS['TCA'][$table]['types']['typeB']['showitem']);
289  }
290 
296  #[Test]
298  {
299  $table = ‪StringUtility::getUniqueId('tx_coretest_table');
300  ‪$GLOBALS['TCA'] = $this->‪generateTCAForTable($table);
301  ‪ExtensionManagementUtility::addToAllTCAtypes($table, 'newA, newA, newB, fieldA', 'typeA', 'after:fieldC');
302  // Checking typeA:
303  self::assertEquals('fieldA, fieldB, fieldC;labelC, newA, newB, --palette--;;paletteC, fieldC1, fieldD, fieldD1', ‪$GLOBALS['TCA'][$table]['types']['typeA']['showitem']);
304  // Checking typeB:
305  self::assertEquals('fieldA, fieldB, fieldC;labelC, --palette--;;paletteC, fieldC1, fieldD, fieldD1', ‪$GLOBALS['TCA'][$table]['types']['typeB']['showitem']);
306  }
307 
308  #[Test]
310  {
311  $table = ‪StringUtility::getUniqueId('tx_coretest_table');
312  ‪$GLOBALS['TCA'] = $this->‪generateTCAForTable($table);
313  ‪ExtensionManagementUtility::addToAllTCAtypes($table, 'field', 'typeA', 'after:fieldD1');
314 
315  self::assertEquals('fieldA, fieldB, fieldC;labelC, --palette--;;paletteC, fieldC1, fieldD, fieldD1, field', ‪$GLOBALS['TCA'][$table]['types']['typeA']['showitem']);
316  }
317 
323  #[Test]
325  {
326  $table = ‪StringUtility::getUniqueId('tx_coretest_table');
327  ‪$GLOBALS['TCA'] = $this->‪generateTCAForTable($table);
328  $typesBefore = ‪$GLOBALS['TCA'][$table]['types'];
329  ‪ExtensionManagementUtility::addToAllTCAtypes($table, 'fieldZ', '', 'replace:fieldX');
330  self::assertEquals($typesBefore, ‪$GLOBALS['TCA'][$table]['types'], 'It\'s wrong that the "types" array changes here - the replaced field is only on palettes');
331  // unchanged because the palette is not used
332  self::assertEquals('fieldX, fieldX1, fieldY', ‪$GLOBALS['TCA'][$table]['palettes']['paletteA']['showitem']);
333  self::assertEquals('fieldX, fieldX1, fieldY', ‪$GLOBALS['TCA'][$table]['palettes']['paletteB']['showitem']);
334  // changed
335  self::assertEquals('fieldZ, fieldX1, fieldY', ‪$GLOBALS['TCA'][$table]['palettes']['paletteC']['showitem']);
336  self::assertEquals('fieldZ, fieldX1, fieldY', ‪$GLOBALS['TCA'][$table]['palettes']['paletteD']['showitem']);
337  }
338 
339  #[Test]
341  {
342  $table = ‪StringUtility::getUniqueId('tx_coretest_table');
343  ‪$GLOBALS['TCA'] = $this->‪generateTCAForTable($table);
344  $typesBefore = ‪$GLOBALS['TCA'][$table]['types'];
345  ‪ExtensionManagementUtility::addToAllTCAtypes($table, 'fieldX, --palette--;;foo', '', 'replace:fieldX');
346  self::assertEquals($typesBefore, ‪$GLOBALS['TCA'][$table]['types'], 'It\'s wrong that the "types" array changes here - the replaced field is only on palettes');
347  // unchanged because the palette is not used
348  self::assertEquals('fieldX, fieldX1, fieldY', ‪$GLOBALS['TCA'][$table]['palettes']['paletteA']['showitem']);
349  self::assertEquals('fieldX, fieldX1, fieldY', ‪$GLOBALS['TCA'][$table]['palettes']['paletteB']['showitem']);
350  // changed
351  self::assertEquals('fieldX, --palette--;;foo, fieldX1, fieldY', ‪$GLOBALS['TCA'][$table]['palettes']['paletteC']['showitem']);
352  self::assertEquals('fieldX, --palette--;;foo, fieldX1, fieldY', ‪$GLOBALS['TCA'][$table]['palettes']['paletteD']['showitem']);
353  }
354 
355  #[Test]
357  {
358  $table = ‪StringUtility::getUniqueId('tx_coretest_table');
359  ‪$GLOBALS['TCA'] = $this->‪generateTCAForTable($table);
360  ‪ExtensionManagementUtility::addToAllTCAtypes($table, 'fieldX, --palette--;;newpalette', '', 'after:palette:paletteC');
361  self::assertEquals('fieldA, fieldB, fieldC;labelC, --palette--;;paletteC, fieldX, --palette--;;newpalette, fieldC1, fieldD, fieldD1', ‪$GLOBALS['TCA'][$table]['types']['typeA']['showitem']);
362  self::assertEquals('fieldA, fieldB, fieldC;labelC, --palette--;;paletteC, fieldX, --palette--;;newpalette, fieldC1, fieldD, fieldD1', ‪$GLOBALS['TCA'][$table]['types']['typeB']['showitem']);
363  }
364 
365  #[Test]
366  public function ‪addToAllTCAtypesAddsBeforeDiv(): void
367  {
368  $showitemDiv = '--div--;LLL:EXT:my_ext/Resources/Private/Language/locallang.xlf:foobar';
369  $table = ‪StringUtility::getUniqueId('tx_coretest_table');
370  ‪$GLOBALS['TCA'] = $this->‪generateTCAForTable($table);
371  ‪$GLOBALS['TCA'][$table]['types']['typeD']['showitem'] = $showitemDiv . ', ' . ‪$GLOBALS['TCA'][$table]['types']['typeA']['showitem'];
372 
373  ‪ExtensionManagementUtility::addToAllTCAtypes($table, 'fieldX', '', 'before:' . $showitemDiv);
374  self::assertEquals('fieldA, fieldB, fieldC;labelC, --palette--;;paletteC, fieldC1, fieldD, fieldD1, fieldX', ‪$GLOBALS['TCA'][$table]['types']['typeA']['showitem']);
375  self::assertEquals('fieldX, ' . $showitemDiv . ', fieldA, fieldB, fieldC;labelC, --palette--;;paletteC, fieldC1, fieldD, fieldD1', ‪$GLOBALS['TCA'][$table]['types']['typeD']['showitem']);
376  }
377 
383  #[Test]
385  {
386  $table = ‪StringUtility::getUniqueId('tx_coretest_table');
387  ‪$GLOBALS['TCA'] = $this->‪generateTCAForTable($table);
388  ‪ExtensionManagementUtility::addFieldsToPalette($table, 'paletteA', 'newA, newA, newB, fieldX', 'before:fieldY');
389  self::assertEquals('fieldX, fieldX1, newA, newB, fieldY', ‪$GLOBALS['TCA'][$table]['palettes']['paletteA']['showitem']);
390  }
391 
397  #[Test]
399  {
400  $table = ‪StringUtility::getUniqueId('tx_coretest_table');
401  ‪$GLOBALS['TCA'] = $this->‪generateTCAForTable($table);
402  ‪ExtensionManagementUtility::addFieldsToPalette($table, 'paletteA', 'newA, newA, newB, fieldX', 'after:fieldX');
403  self::assertEquals('fieldX, newA, newB, fieldX1, fieldY', ‪$GLOBALS['TCA'][$table]['palettes']['paletteA']['showitem']);
404  }
405 
411  #[Test]
413  {
414  $table = ‪StringUtility::getUniqueId('tx_coretest_table');
415  ‪$GLOBALS['TCA'] = $this->‪generateTCAForTable($table);
416  ‪ExtensionManagementUtility::addFieldsToPalette($table, 'paletteA', 'newA, newA, newB, fieldX', 'after:' . ‪StringUtility::getUniqueId('notExisting'));
417  self::assertEquals('fieldX, fieldX1, fieldY, newA, newB', ‪$GLOBALS['TCA'][$table]['palettes']['paletteA']['showitem']);
418  }
419 
421  {
422  return [
423  'Simple' => [
424  'field_b, field_d, field_c',
425  'field_a, field_b, field_c',
426  'field_d',
427  ],
428  'with linebreaks' => [
429  'field_b, --linebreak--, field_d, --linebreak--, field_c',
430  'field_a, field_b, field_c',
431  '--linebreak--, field_d, --linebreak--',
432  ],
433  'with linebreaks in list and insertion list' => [
434  'field_b, --linebreak--, field_d, --linebreak--, field_c',
435  'field_a, field_b, --linebreak--, field_c',
436  '--linebreak--, field_d, --linebreak--',
437  ],
438  ];
439  }
440 
441  #[DataProvider('removeDuplicatesForInsertionRemovesDuplicatesDataProvider')]
442  #[Test]
443  public function ‪removeDuplicatesForInsertionRemovesDuplicates(string $insertionList, string $list, string $expected): void
444  {
446  self::assertSame($expected, $result);
447  }
448 
450  // Tests concerning addFieldsToAllPalettesOfField
452  #[Test]
454  {
455  ‪$GLOBALS['TCA'] = [
456  'aTable' => [
457  'types' => [
458  'typeA' => [
459  'showitem' => 'fieldA;labelA, --palette--;;paletteA',
460  ],
461  ],
462  'palettes' => [
463  'paletteA' => [
464  'showitem' => 'fieldX, fieldY',
465  ],
466  ],
467  ],
468  ];
469  $expected = ‪$GLOBALS['TCA'];
471  'aTable',
472  'fieldA',
473  'newA'
474  );
475  self::assertEquals($expected, ‪$GLOBALS['TCA']);
476  }
477 
478  #[Test]
480  {
481  ‪$GLOBALS['TCA'] = [
482  'aTable' => [
483  'columns' => [
484  'fieldA' => [],
485  ],
486  'types' => [
487  'typeA' => [
488  'showitem' => 'fieldA;labelA, --palette--;;paletteA',
489  ],
490  ],
491  'palettes' => [
492  'paletteA' => [
493  'showitem' => 'fieldX, fieldY',
494  ],
495  ],
496  ],
497  ];
498  $expected = [
499  'aTable' => [
500  'columns' => [
501  'fieldA' => [],
502  ],
503  'types' => [
504  'typeA' => [
505  'showitem' => 'fieldA;labelA, --palette--;;paletteA',
506  ],
507  ],
508  'palettes' => [
509  'paletteA' => [
510  'showitem' => 'fieldX, fieldY, dupeA',
511  ],
512  ],
513  ],
514  ];
516  'aTable',
517  'fieldA',
518  'dupeA, dupeA' // Duplicate
519  );
520  self::assertEquals($expected, ‪$GLOBALS['TCA']);
521  }
522 
523  #[Test]
525  {
526  ‪$GLOBALS['TCA'] = [
527  'aTable' => [
528  'columns' => [
529  'fieldA' => [],
530  ],
531  'types' => [
532  'typeA' => [
533  'showitem' => 'fieldA;labelA, --palette--;;paletteA',
534  ],
535  ],
536  'palettes' => [
537  'paletteA' => [
538  'showitem' => 'existingA',
539  ],
540  ],
541  ],
542  ];
543  $expected = [
544  'aTable' => [
545  'columns' => [
546  'fieldA' => [],
547  ],
548  'types' => [
549  'typeA' => [
550  'showitem' => 'fieldA;labelA, --palette--;;paletteA',
551  ],
552  ],
553  'palettes' => [
554  'paletteA' => [
555  'showitem' => 'existingA',
556  ],
557  ],
558  ],
559  ];
561  'aTable',
562  'fieldA',
563  'existingA'
564  );
565  self::assertEquals($expected, ‪$GLOBALS['TCA']);
566  }
567 
568  #[Test]
570  {
571  ‪$GLOBALS['TCA'] = [
572  'aTable' => [
573  'columns' => [
574  'fieldA' => [],
575  ],
576  'types' => [
577  'typeA' => [
578  'showitem' => 'fieldA, --palette--;;palette1',
579  ],
580  'typeB' => [
581  'showitem' => 'fieldA;aLabel, --palette--;;palette2',
582  ],
583  ],
584  'palettes' => [
585  'palette1' => [
586  'showitem' => 'fieldX',
587  ],
588  'palette2' => [
589  'showitem' => 'fieldY',
590  ],
591  ],
592  ],
593  ];
594  $expected = [
595  'aTable' => [
596  'columns' => [
597  'fieldA' => [],
598  ],
599  'types' => [
600  'typeA' => [
601  'showitem' => 'fieldA, --palette--;;palette1',
602  ],
603  'typeB' => [
604  'showitem' => 'fieldA;aLabel, --palette--;;palette2',
605  ],
606  ],
607  'palettes' => [
608  'palette1' => [
609  'showitem' => 'fieldX, newA',
610  ],
611  'palette2' => [
612  'showitem' => 'fieldY, newA',
613  ],
614  ],
615  ],
616  ];
618  'aTable',
619  'fieldA',
620  'newA'
621  );
622  self::assertEquals($expected, ‪$GLOBALS['TCA']);
623  }
624 
625  #[Test]
627  {
628  ‪$GLOBALS['TCA'] = [
629  'aTable' => [
630  'columns' => [
631  'fieldA' => [],
632  ],
633  'types' => [
634  'typeA' => [
635  'showitem' => 'fieldA, --palette--;;palette1',
636  ],
637  ],
638  'palettes' => [
639  'palette1' => [
640  'showitem' => 'fieldX',
641  ],
642  ],
643  ],
644  ];
645  $expected = [
646  'aTable' => [
647  'columns' => [
648  'fieldA' => [],
649  ],
650  'types' => [
651  'typeA' => [
652  'showitem' => 'fieldA, --palette--;;palette1',
653  ],
654  ],
655  'palettes' => [
656  'palette1' => [
657  'showitem' => 'fieldX, newA, newB',
658  ],
659  ],
660  ],
661  ];
663  'aTable',
664  'fieldA',
665  'newA, newB'
666  );
667  self::assertEquals($expected, ‪$GLOBALS['TCA']);
668  }
669 
670  #[Test]
672  {
673  ‪$GLOBALS['TCA'] = [
674  'aTable' => [
675  'columns' => [
676  'fieldA' => [],
677  ],
678  'types' => [
679  'typeA' => [
680  'showitem' => 'fieldA;labelA, --palette--;;paletteA',
681  ],
682  ],
683  'palettes' => [
684  'paletteA' => [
685  'showitem' => 'existingA, existingB',
686  ],
687  ],
688  ],
689  ];
690  $expected = [
691  'aTable' => [
692  'columns' => [
693  'fieldA' => [],
694  ],
695  'types' => [
696  'typeA' => [
697  'showitem' => 'fieldA;labelA, --palette--;;paletteA',
698  ],
699  ],
700  'palettes' => [
701  'paletteA' => [
702  'showitem' => 'existingA, newA, existingB',
703  ],
704  ],
705  ],
706  ];
708  'aTable',
709  'fieldA',
710  'newA',
711  'before:existingB'
712  );
713  self::assertEquals($expected, ‪$GLOBALS['TCA']);
714  }
715 
716  #[Test]
718  {
719  ‪$GLOBALS['TCA'] = [
720  'aTable' => [
721  'columns' => [
722  'fieldA' => [],
723  ],
724  'types' => [
725  'typeA' => [
726  'showitem' => 'fieldA;labelA, --palette--;;paletteA',
727  ],
728  ],
729  'palettes' => [
730  'paletteA' => [
731  'showitem' => 'fieldX, fieldY',
732  ],
733  ],
734  ],
735  ];
736  $expected = [
737  'aTable' => [
738  'columns' => [
739  'fieldA' => [],
740  ],
741  'types' => [
742  'typeA' => [
743  'showitem' => 'fieldA;labelA, --palette--;;paletteA',
744  ],
745  ],
746  'palettes' => [
747  'paletteA' => [
748  'showitem' => 'fieldX, fieldY, newA, newB',
749  ],
750  ],
751  ],
752  ];
754  'aTable',
755  'fieldA',
756  'newA, newB',
757  'before:notExisting'
758  );
759  self::assertEquals($expected, ‪$GLOBALS['TCA']);
760  }
761 
762  #[Test]
764  {
765  ‪$GLOBALS['TCA'] = [
766  'aTable' => [
767  'columns' => [
768  'fieldA' => [],
769  ],
770  'types' => [
771  'typeA' => [
772  'showitem' => 'fieldA;labelA, --palette--;;paletteA',
773  ],
774  ],
775  'palettes' => [
776  'paletteA' => [
777  'showitem' => 'existingA, existingB',
778  ],
779  ],
780  ],
781  ];
782  $expected = [
783  'aTable' => [
784  'columns' => [
785  'fieldA' => [],
786  ],
787  'types' => [
788  'typeA' => [
789  'showitem' => 'fieldA;labelA, --palette--;;paletteA',
790  ],
791  ],
792  'palettes' => [
793  'paletteA' => [
794  'showitem' => 'existingA, newA, existingB',
795  ],
796  ],
797  ],
798  ];
800  'aTable',
801  'fieldA',
802  'newA',
803  'after:existingA'
804  );
805  self::assertEquals($expected, ‪$GLOBALS['TCA']);
806  }
807 
808  #[Test]
810  {
811  ‪$GLOBALS['TCA'] = [
812  'aTable' => [
813  'columns' => [
814  'fieldA' => [],
815  ],
816  'types' => [
817  'typeA' => [
818  'showitem' => 'fieldA;labelA, --palette--;;paletteA',
819  ],
820  ],
821  'palettes' => [
822  'paletteA' => [
823  'showitem' => 'existingA, existingB',
824  ],
825  ],
826  ],
827  ];
828  $expected = [
829  'aTable' => [
830  'columns' => [
831  'fieldA' => [],
832  ],
833  'types' => [
834  'typeA' => [
835  'showitem' => 'fieldA;labelA, --palette--;;paletteA',
836  ],
837  ],
838  'palettes' => [
839  'paletteA' => [
840  'showitem' => 'existingA, existingB, newA, newB',
841  ],
842  ],
843  ],
844  ];
846  'aTable',
847  'fieldA',
848  'newA, newB',
849  'after:notExistingA'
850  );
851  self::assertEquals($expected, ‪$GLOBALS['TCA']);
852  }
853 
854  #[Test]
856  {
857  ‪$GLOBALS['TCA'] = [
858  'aTable' => [
859  'columns' => [
860  'fieldA' => [],
861  ],
862  'types' => [
863  'typeA' => [
864  'showitem' => 'fieldA',
865  ],
866  ],
867  ],
868  ];
869  $expected = [
870  'aTable' => [
871  'columns' => [
872  'fieldA' => [],
873  ],
874  'types' => [
875  'typeA' => [
876  'showitem' => 'fieldA, --palette--;;generatedFor-fieldA',
877  ],
878  ],
879  'palettes' => [
880  'generatedFor-fieldA' => [
881  'showitem' => 'newA',
882  ],
883  ],
884  ],
885  ];
887  'aTable',
888  'fieldA',
889  'newA'
890  );
891  self::assertEquals($expected, ‪$GLOBALS['TCA']);
892  }
893 
894  #[Test]
896  {
897  ‪$GLOBALS['TCA'] = [
898  'aTable' => [
899  'columns' => [
900  'fieldA' => [],
901  ],
902  'types' => [
903  'typeA' => [
904  'showitem' => 'fieldA;labelA',
905  ],
906  ],
907  ],
908  ];
909  $expected = [
910  'aTable' => [
911  'columns' => [
912  'fieldA' => [],
913  ],
914  'types' => [
915  'typeA' => [
916  'showitem' => 'fieldA;labelA, --palette--;;generatedFor-fieldA',
917  ],
918  ],
919  'palettes' => [
920  'generatedFor-fieldA' => [
921  'showitem' => 'newA',
922  ],
923  ],
924  ],
925  ];
927  'aTable',
928  'fieldA',
929  'newA'
930  );
931  self::assertEquals($expected, ‪$GLOBALS['TCA']);
932  }
933 
935  // Tests concerning executePositionedStringInsertion
937 
941  {
942  return [
943  'normal characters' => [
944  'tr0',
945  'tr0',
946  ],
947  'newlines' => [
948  "test\n",
949  'test',
950  ],
951  'newlines with carriage return' => [
952  "test\r\n",
953  'test',
954  ],
955  'tabs' => [
956  "test\t",
957  'test',
958  ],
959  'commas' => [
960  'test,',
961  'test',
962  ],
963  'multiple commas with trailing spaces' => [
964  "test,,\t, \r\n",
965  'test',
966  ],
967  ];
968  }
969 
970  #[DataProvider('executePositionedStringInsertionTrimsCorrectCharactersDataProvider')]
971  #[Test]
972  public function ‪executePositionedStringInsertionTrimsCorrectCharacters(string $string, string $expectedResult): void
973  {
974  $extensionManagementUtility = $this->getAccessibleMock(ExtensionManagementUtility::class, null);
975  $string = $extensionManagementUtility->_call('executePositionedStringInsertion', $string, '');
976  self::assertEquals($expectedResult, $string);
977  }
978 
980  // Tests concerning addTcaSelectItem
982  #[Test]
984  {
985  $this->expectException(\InvalidArgumentException::class);
986  $this->expectExceptionCode(1303236967);
987 
988  ‪ExtensionManagementUtility::addTcaSelectItem('foo', 'bar', [], 'foo', 'not allowed keyword');
989  }
990 
991  #[Test]
993  {
994  $this->expectException(\RuntimeException::class);
995  $this->expectExceptionCode(1303237468);
996 
997  ‪$GLOBALS['TCA'] = [];
999  }
1000 
1004  public static function ‪addTcaSelectItemDataProvider(): array
1005  {
1006  // Every array splits into:
1007  // - relativeToField
1008  // - relativePosition
1009  // - expectedResultArray
1010  return [
1011  'add at end of array' => [
1012  '',
1013  '',
1014  [
1015  0 => ['label' => 'firstElement'],
1016  1 => ['label' => 'matchMe'],
1017  2 => ['label' => 'thirdElement'],
1018  3 => ['label' => 'insertedElement'],
1019  ],
1020  ],
1021  'replace element' => [
1022  'matchMe',
1023  'replace',
1024  [
1025  0 => ['label' => 'firstElement'],
1026  1 => ['label' => 'insertedElement'],
1027  2 => ['label' => 'thirdElement'],
1028  ],
1029  ],
1030  'add element after' => [
1031  'matchMe',
1032  'after',
1033  [
1034  0 => ['label' => 'firstElement'],
1035  1 => ['label' => 'matchMe'],
1036  2 => ['label' => 'insertedElement'],
1037  3 => ['label' => 'thirdElement'],
1038  ],
1039  ],
1040  'add element before' => [
1041  'matchMe',
1042  'before',
1043  [
1044  0 => ['label' => 'firstElement'],
1045  1 => ['label' => 'insertedElement'],
1046  2 => ['label' => 'matchMe'],
1047  3 => ['label' => 'thirdElement'],
1048  ],
1049  ],
1050  'add at end if relative position was not found' => [
1051  'notExistingItem',
1052  'after',
1053  [
1054  0 => ['label' => 'firstElement'],
1055  1 => ['label' => 'matchMe'],
1056  2 => ['label' => 'thirdElement'],
1057  3 => ['label' => 'insertedElement'],
1058  ],
1059  ],
1060  ];
1061  }
1062 
1063  #[DataProvider('addTcaSelectItemDataProvider')]
1064  #[Test]
1065  public function ‪addTcaSelectItemInsertsItemAtSpecifiedPosition(string $relativeToField, string $relativePosition, array $expectedResultArray): void
1066  {
1067  ‪$GLOBALS['TCA'] = [
1068  'testTable' => [
1069  'columns' => [
1070  'testField' => [
1071  'config' => [
1072  'items' => [
1073  0 => ['label' => 'firstElement'],
1074  1 => ['label' => 'matchMe'],
1075  2 => ['label' => 'thirdElement'],
1076  ],
1077  ],
1078  ],
1079  ],
1080  ],
1081  ];
1082  ‪ExtensionManagementUtility::addTcaSelectItem('testTable', 'testField', ['label' => 'insertedElement'], $relativeToField, $relativePosition);
1083  self::assertEquals($expectedResultArray, ‪$GLOBALS['TCA']['testTable']['columns']['testField']['config']['items']);
1084  }
1085 
1087  // Tests concerning getExtensionVersion
1089  #[Test]
1091  {
1092  $this->expectException(\InvalidArgumentException::class);
1093  $this->expectExceptionCode(1294586096);
1094 
1096  }
1097 
1098  #[Test]
1100  {
1101  $uniqueSuffix = ‪StringUtility::getUniqueId('test');
1102  $extensionKey = 'unloadedextension' . $uniqueSuffix;
1103  self::assertEquals('', ‪ExtensionManagementUtility::getExtensionVersion($extensionKey));
1104  }
1105 
1106  #[Test]
1108  {
1109  $uniqueSuffix = ‪StringUtility::getUniqueId('test');
1110  $extensionKey = 'unloadedextension' . $uniqueSuffix;
1111  $packageMetaData = $this->getMockBuilder(MetaData::class)
1112  ->onlyMethods(['getVersion'])
1113  ->setConstructorArgs([$extensionKey])
1114  ->getMock();
1115  $packageMetaData->method('getVersion')->willReturn('1.2.3');
1116  $packageManager = $this->‪createMockPackageManagerWithMockPackage($extensionKey, ['getPackagePath', 'getPackageKey', 'getPackageMetaData']);
1118  $package = $packageManager->getPackage($extensionKey);
1119  $package
1120  ->method('getPackageMetaData')
1121  ->willReturn($packageMetaData);
1123  self::assertEquals('1.2.3', ‪ExtensionManagementUtility::getExtensionVersion($extensionKey));
1124  }
1125 
1127  // Tests concerning loadExtension
1129  #[Test]
1131  {
1132  $this->expectException(\RuntimeException::class);
1133  $this->expectExceptionCode(1342345486);
1134 
1135  $extensionKey = ‪StringUtility::getUniqueId('test');
1136  $packageManager = $this->‪createMockPackageManagerWithMockPackage($extensionKey);
1139  }
1140 
1142  // Tests concerning unloadExtension
1144  #[Test]
1146  {
1147  $this->expectException(\RuntimeException::class);
1148  $this->expectExceptionCode(1342345487);
1149 
1150  $packageName = ‪StringUtility::getUniqueId('foo');
1151  $packageManager = $this->getMockBuilder(PackageManager::class)
1152  ->onlyMethods(['isPackageActive'])
1153  ->disableOriginalConstructor()
1154  ->getMock();
1155  $packageManager->expects(self::once())
1156  ->method('isPackageActive')
1157  ->with(self::equalTo($packageName))
1158  ->willReturn(false);
1161  }
1162 
1163  #[Test]
1165  {
1166  $packageName = ‪StringUtility::getUniqueId('foo');
1167  $packageManager = $this->getMockBuilder(PackageManager::class)
1168  ->onlyMethods(['isPackageActive', 'deactivatePackage'])
1169  ->disableOriginalConstructor()
1170  ->getMock();
1171  $packageManager
1172  ->method('isPackageActive')
1173  ->willReturn(true);
1174  $packageManager->expects(self::once())
1175  ->method('deactivatePackage')
1176  ->with($packageName);
1179  }
1180 
1182  // Tests concerning addPlugin
1184  #[Test]
1186  {
1187  $extKey = 'indexed_search';
1188  $expectedTCA = [
1189  [
1190  'label' => 'label',
1191  'value' => $extKey,
1192  'icon' => 'EXT:' . $extKey . '/Resources/Public/Icons/Extension.png',
1193  'group' => 'default',
1194  'description' => null,
1195  ],
1196  ];
1197  ‪$GLOBALS['TCA']['tt_content']['columns']['list_type']['config']['items'] = [];
1198  ‪ExtensionManagementUtility::addPlugin(['label', $extKey], 'list_type', $extKey);
1199  self::assertEquals($expectedTCA, ‪$GLOBALS['TCA']['tt_content']['columns']['list_type']['config']['items']);
1200  }
1201 
1202  #[Test]
1204  {
1205  $extKey = 'indexed_search';
1206  ‪$GLOBALS['TCA']['tt_content']['columns']['list_type']['config']['items'] = [];
1207  ‪$GLOBALS['TCA']['tt_content']['columns']['list_type']['config']['itemGroups']['my-second-group'] = 'My second group label from list_type';
1208  ‪$GLOBALS['TCA']['tt_content']['columns']['list_type']['config']['itemGroups']['my-third-group'] = 'My third group label from list_type';
1209  ‪$GLOBALS['TCA']['tt_content']['columns']['CType']['config']['itemGroups']['null-group'] = null;
1210  ‪$GLOBALS['TCA']['tt_content']['columns']['CType']['config']['itemGroups']['my-group'] = 'My group label from CType';
1211  ‪$GLOBALS['TCA']['tt_content']['columns']['CType']['config']['itemGroups']['my-third-group'] = 'My third group label from CType';
1212 
1213  // Won't be added since not defined in list_type or CType
1214  ‪ExtensionManagementUtility::addPlugin(['label', $extKey . '_1', '', 'non-existing-group'], 'list_type', $extKey);
1215  // Won't be added since invalid value in CType definition
1216  ‪ExtensionManagementUtility::addPlugin(['label', $extKey . '_2', '', 'null-group'], 'list_type', $extKey);
1217  ‪ExtensionManagementUtility::addPlugin(['label', $extKey . '_3', '', 'my-group'], 'list_type', $extKey);
1218  ‪ExtensionManagementUtility::addPlugin(['label', $extKey . '_4', '', 'my-second-group'], 'list_type', $extKey);
1219  ‪ExtensionManagementUtility::addPlugin(['label', $extKey . '_5', '', 'my-third-group'], 'list_type', $extKey);
1220 
1221  self::assertSame(
1222  [
1223  // Group exists in list_type>itemGroups
1224  'my-second-group' => 'My second group label from list_type',
1225  // Group exists in both - no overwriting
1226  'my-third-group' => 'My third group label from list_type',
1227  // Group exists in CType>itemGroups
1228  'my-group' => 'My group label from CType',
1229  ],
1230  ‪$GLOBALS['TCA']['tt_content']['columns']['list_type']['config']['itemGroups']
1231  );
1232  }
1233 
1234  #[Test]
1236  {
1237  $extKey = 'felogin';
1238  $expectedTCA = [
1239  [
1240  'label' => 'label',
1241  'value' => 'felogin',
1242  'icon' => 'content-form-login',
1243  'group' => 'default',
1244  'description' => null,
1245  ],
1246  ];
1247  ‪$GLOBALS['TCA']['tt_content']['ctrl']['typeicon_classes'] = [];
1248  ‪$GLOBALS['TCA']['tt_content']['types']['header'] = ['showitem' => 'header,header_link'];
1249  ‪$GLOBALS['TCA']['tt_content']['columns']['CType']['config']['items'] = [];
1250  ‪ExtensionManagementUtility::addPlugin(['label', $extKey, 'content-form-login'], 'CType', $extKey);
1251  self::assertEquals($expectedTCA, ‪$GLOBALS['TCA']['tt_content']['columns']['CType']['config']['items']);
1252  self::assertEquals([$extKey => 'content-form-login'], ‪$GLOBALS['TCA']['tt_content']['ctrl']['typeicon_classes']);
1253  self::assertEquals(‪$GLOBALS['TCA']['tt_content']['types']['header'], ‪$GLOBALS['TCA']['tt_content']['types']['felogin']);
1254  }
1255 
1256  #[Test]
1258  {
1259  $extKey = 'felogin';
1260  $expectedTCA = [
1261  [
1262  'label' => 'label',
1263  'value' => 'felogin',
1264  'icon' => 'content-form-login',
1265  'group' => 'default',
1266  'description' => null,
1267  ],
1268  ];
1269  ‪$GLOBALS['TCA']['tt_content']['ctrl']['typeicon_classes'] = [];
1270  ‪$GLOBALS['TCA']['tt_content']['types']['header'] = ['showitem' => 'header,header_link'];
1271  ‪$GLOBALS['TCA']['tt_content']['columns']['CType']['config']['items'] = [];
1272  ‪ExtensionManagementUtility::addPlugin(new ‪SelectItem('select', 'label', $extKey, 'content-form-login'), 'CType', $extKey);
1273  self::assertEquals($expectedTCA, ‪$GLOBALS['TCA']['tt_content']['columns']['CType']['config']['items']);
1274  self::assertEquals([$extKey => 'content-form-login'], ‪$GLOBALS['TCA']['tt_content']['ctrl']['typeicon_classes']);
1275  self::assertEquals(‪$GLOBALS['TCA']['tt_content']['types']['header'], ‪$GLOBALS['TCA']['tt_content']['types']['felogin']);
1276  }
1277 
1278  public static function ‪addTcaSelectItemGroupAddsGroupDataProvider(): array
1279  {
1280  return [
1281  'add the first group' => [
1282  'my_group',
1283  'my_group_label',
1284  null,
1285  null,
1286  [
1287  'my_group' => 'my_group_label',
1288  ],
1289  ],
1290  'add a new group at the bottom' => [
1291  'my_group',
1292  'my_group_label',
1293  'bottom',
1294  [
1295  'default' => 'default_label',
1296  ],
1297  [
1298  'default' => 'default_label',
1299  'my_group' => 'my_group_label',
1300  ],
1301  ],
1302  'add a new group at the top' => [
1303  'my_group',
1304  'my_group_label',
1305  'top',
1306  [
1307  'default' => 'default_label',
1308  ],
1309  [
1310  'my_group' => 'my_group_label',
1311  'default' => 'default_label',
1312  ],
1313  ],
1314  'add a new group after an existing group' => [
1315  'my_group',
1316  'my_group_label',
1317  'after:default',
1318  [
1319  'default' => 'default_label',
1320  'special' => 'special_label',
1321  ],
1322  [
1323  'default' => 'default_label',
1324  'my_group' => 'my_group_label',
1325  'special' => 'special_label',
1326  ],
1327  ],
1328  'add a new group before an existing group' => [
1329  'my_group',
1330  'my_group_label',
1331  'before:default',
1332  [
1333  'default' => 'default_label',
1334  'special' => 'special_label',
1335  ],
1336  [
1337  'my_group' => 'my_group_label',
1338  'default' => 'default_label',
1339  'special' => 'special_label',
1340  ],
1341  ],
1342  'add a new group after a non-existing group moved to bottom' => [
1343  'my_group',
1344  'my_group_label',
1345  'after:default2',
1346  [
1347  'default' => 'default_label',
1348  'special' => 'special_label',
1349  ],
1350  [
1351  'default' => 'default_label',
1352  'special' => 'special_label',
1353  'my_group' => 'my_group_label',
1354  ],
1355  ],
1356  'add a new group which already exists does nothing' => [
1357  'my_group',
1358  'my_group_label',
1359  'does-not-matter',
1360  [
1361  'default' => 'default_label',
1362  'my_group' => 'existing_label',
1363  'special' => 'special_label',
1364  ],
1365  [
1366  'default' => 'default_label',
1367  'my_group' => 'existing_label',
1368  'special' => 'special_label',
1369  ],
1370  ],
1371  ];
1372  }
1373 
1374  #[DataProvider('addTcaSelectItemGroupAddsGroupDataProvider')]
1375  #[Test]
1376  public function ‪addTcaSelectItemGroupAddsGroup(string $groupId, string $groupLabel, ?string $position, ?array $existingGroups, array $expectedGroups): void
1377  {
1378  ‪$GLOBALS['TCA']['tt_content']['columns']['CType']['config'] = [];
1379  if (is_array($existingGroups)) {
1380  ‪$GLOBALS['TCA']['tt_content']['columns']['CType']['config']['itemGroups'] = $existingGroups;
1381  }
1382  ‪ExtensionManagementUtility::addTcaSelectItemGroup('tt_content', 'CType', $groupId, $groupLabel, $position);
1383  self::assertEquals($expectedGroups, ‪$GLOBALS['TCA']['tt_content']['columns']['CType']['config']['itemGroups']);
1384  }
1385 
1386  #[Test]
1388  {
1390  'myprovider',
1391  'auth',
1392  'myclass',
1393  [
1394  'title' => 'My authentication provider',
1395  'description' => 'Authentication with my provider',
1396  'subtype' => 'processLoginDataBE,getUserBE,authUserBE',
1397  'available' => true,
1398  'priority' => 80,
1399  'quality' => 100,
1400  ]
1401  );
1402  }
1403 }
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility\addService
‪static addService(string $extKey, string $serviceType, string $serviceKey, array $info)
Definition: ExtensionManagementUtility.php:648
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\loadExtensionThrowsExceptionIfExtensionIsLoaded
‪loadExtensionThrowsExceptionIfExtensionIsLoaded()
Definition: ExtensionManagementUtilityTest.php:1130
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\addTcaSelectItemInsertsItemAtSpecifiedPosition
‪addTcaSelectItemInsertsItemAtSpecifiedPosition(string $relativeToField, string $relativePosition, array $expectedResultArray)
Definition: ExtensionManagementUtilityTest.php:1065
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\addFieldsToAllPalettesOfFieldDoesNotAddAnythingIfFieldIsNotRegisteredInColumns
‪addFieldsToAllPalettesOfFieldDoesNotAddAnythingIfFieldIsNotRegisteredInColumns()
Definition: ExtensionManagementUtilityTest.php:453
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\canAddFieldsToTCATypeBeforeExistingOnes
‪canAddFieldsToTCATypeBeforeExistingOnes()
Definition: ExtensionManagementUtilityTest.php:280
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\addFieldsToAllPalettesOfFieldAddsFieldsToMultiplePalettes
‪addFieldsToAllPalettesOfFieldAddsFieldsToMultiplePalettes()
Definition: ExtensionManagementUtilityTest.php:569
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\addFieldsToAllPalettesOfFieldAddsFieldsToPaletteAndSuppressesDuplicates
‪addFieldsToAllPalettesOfFieldAddsFieldsToPaletteAndSuppressesDuplicates()
Definition: ExtensionManagementUtilityTest.php:479
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\getClassNamePrefixForExtensionKey
‪getClassNamePrefixForExtensionKey(string $extensionName, string $expectedPrefix)
Definition: ExtensionManagementUtilityTest.php:201
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility\getExtensionVersion
‪static string getExtensionVersion(string $key)
Definition: ExtensionManagementUtility.php:113
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility\addToAllTCAtypes
‪static addToAllTCAtypes(string $table, string $newFieldsString, string $typeList='', string $position='')
Definition: ExtensionManagementUtility.php:166
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\addToAllTCAtypesReplacesExistingOnes
‪addToAllTCAtypesReplacesExistingOnes()
Definition: ExtensionManagementUtilityTest.php:340
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\canAddFieldsToPaletteAfterExistingOnes
‪canAddFieldsToPaletteAfterExistingOnes()
Definition: ExtensionManagementUtilityTest.php:398
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\removeDuplicatesForInsertionRemovesDuplicates
‪removeDuplicatesForInsertionRemovesDuplicates(string $insertionList, string $list, string $expected)
Definition: ExtensionManagementUtilityTest.php:443
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\canAddFieldsToPaletteAfterNotExistingOnes
‪canAddFieldsToPaletteAfterNotExistingOnes()
Definition: ExtensionManagementUtilityTest.php:412
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\canAddFieldWithPartOfAlreadyExistingFieldname
‪canAddFieldWithPartOfAlreadyExistingFieldname()
Definition: ExtensionManagementUtilityTest.php:309
‪TYPO3\CMS\Core\Core\Environment\getPublicPath
‪static getPublicPath()
Definition: Environment.php:187
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\removeDuplicatesForInsertionRemovesDuplicatesDataProvider
‪static removeDuplicatesForInsertionRemovesDuplicatesDataProvider()
Definition: ExtensionManagementUtilityTest.php:420
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\unloadExtensionCallsPackageManagerToDeactivatePackage
‪unloadExtensionCallsPackageManagerToDeactivatePackage()
Definition: ExtensionManagementUtilityTest.php:1164
‪TYPO3\CMS\Core\Tests\Unit\Utility
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\$resetSingletonInstances
‪bool $resetSingletonInstances
Definition: ExtensionManagementUtilityTest.php:36
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility\addTcaSelectItemGroup
‪static addTcaSelectItemGroup(string $table, string $field, string $groupId, string $groupLabel, ?string $position='bottom')
Definition: ExtensionManagementUtility.php:438
‪TYPO3\CMS\Core\Tests\Unit\Utility\AccessibleProxies\ExtensionManagementUtilityAccessibleProxy\removeDuplicatesForInsertion
‪static removeDuplicatesForInsertion($insertionList, $list='')
Definition: ExtensionManagementUtilityAccessibleProxy.php:33
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\generateTCAForTable
‪array generateTCAForTable(string $table)
Definition: ExtensionManagementUtilityTest.php:152
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\$backUpPackageManager
‪PackageManager $backUpPackageManager
Definition: ExtensionManagementUtilityTest.php:37
‪TYPO3\CMS\Core\Utility\GeneralUtility\mkdir_deep
‪static mkdir_deep(string $directory)
Definition: GeneralUtility.php:1654
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\tearDown
‪tearDown()
Definition: ExtensionManagementUtilityTest.php:45
‪TYPO3\CMS\Core\Core\Environment\getVarPath
‪static getVarPath()
Definition: Environment.php:197
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\canAddFieldsToAllTCATypesAfterExistingOnes
‪canAddFieldsToAllTCATypesAfterExistingOnes()
Definition: ExtensionManagementUtilityTest.php:232
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility\isLoaded
‪static isLoaded(string $key)
Definition: ExtensionManagementUtility.php:55
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\canAddFieldsToTCATypeAfterExistingOnes
‪canAddFieldsToTCATypeAfterExistingOnes()
Definition: ExtensionManagementUtilityTest.php:297
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\addPluginSetsTcaCorrectlyForGivenExtKeyAsParameter
‪addPluginSetsTcaCorrectlyForGivenExtKeyAsParameter()
Definition: ExtensionManagementUtilityTest.php:1185
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility
Definition: ExtensionManagementUtility.php:32
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\unloadExtensionThrowsExceptionIfExtensionIsNotLoaded
‪unloadExtensionThrowsExceptionIfExtensionIsNotLoaded()
Definition: ExtensionManagementUtilityTest.php:1145
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\isLoadedReturnsFalseIfExtensionIsNotLoaded
‪isLoadedReturnsFalseIfExtensionIsNotLoaded()
Definition: ExtensionManagementUtilityTest.php:90
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility\addFieldsToAllPalettesOfField
‪static addFieldsToAllPalettesOfField(string $table, string $field, string $addFields, string $insertionPosition='')
Definition: ExtensionManagementUtility.php:294
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\canAddFieldsToAllTCATypesRespectsPalettes
‪canAddFieldsToAllTCATypesRespectsPalettes()
Definition: ExtensionManagementUtilityTest.php:249
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility\addFieldsToPalette
‪static addFieldsToPalette(string $table, string $palette, string $addFields, string $insertionPosition='')
Definition: ExtensionManagementUtility.php:347
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility\loadExtension
‪static loadExtension(string $extensionKey)
Definition: ExtensionManagementUtility.php:1163
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\canAddFieldsToTCATypeAndReplaceExistingOnes
‪canAddFieldsToTCATypeAndReplaceExistingOnes()
Definition: ExtensionManagementUtilityTest.php:324
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility\extPath
‪static extPath(string $key, string $script='')
Definition: ExtensionManagementUtility.php:82
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\addServiceDoesNotFailIfValueIsNotSet
‪addServiceDoesNotFailIfValueIsNotSet()
Definition: ExtensionManagementUtilityTest.php:1387
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\addToAllTCAtypesAddsToPaletteIdentifier
‪addToAllTCAtypesAddsToPaletteIdentifier()
Definition: ExtensionManagementUtilityTest.php:356
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility\setPackageManager
‪static setPackageManager(PackageManager $packageManager)
Definition: ExtensionManagementUtility.php:41
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\addFieldsToAllPalettesOfFieldAddsFieldsAtEndIfAfterRequestedDoesNotExist
‪addFieldsToAllPalettesOfFieldAddsFieldsAtEndIfAfterRequestedDoesNotExist()
Definition: ExtensionManagementUtilityTest.php:809
‪TYPO3\CMS\Core\Schema\Struct\SelectItem
Definition: SelectItem.php:21
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\addTcaSelectItemGroupAddsGroupDataProvider
‪static addTcaSelectItemGroupAddsGroupDataProvider()
Definition: ExtensionManagementUtilityTest.php:1278
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\getExtensionVersionForNotLoadedExtensionReturnsEmptyString
‪getExtensionVersionForNotLoadedExtensionReturnsEmptyString()
Definition: ExtensionManagementUtilityTest.php:1099
‪TYPO3\CMS\Core\Package\Package
Definition: Package.php:30
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\addTcaSelectItemThrowsExceptionIfRelativePositionIsNotOneOfValidKeywords
‪addTcaSelectItemThrowsExceptionIfRelativePositionIsNotOneOfValidKeywords()
Definition: ExtensionManagementUtilityTest.php:983
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\addFieldsToAllPalettesOfFieldAddsNewPaletteIfFieldHasNoPaletteYetAndKeepsExistingLabel
‪addFieldsToAllPalettesOfFieldAddsNewPaletteIfFieldHasNoPaletteYetAndKeepsExistingLabel()
Definition: ExtensionManagementUtilityTest.php:895
‪TYPO3\CMS\Core\Package\MetaData
Definition: PackageConstraint.php:16
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\executePositionedStringInsertionTrimsCorrectCharactersDataProvider
‪static executePositionedStringInsertionTrimsCorrectCharactersDataProvider()
Definition: ExtensionManagementUtilityTest.php:940
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\addFieldsToAllPalettesOfFieldDoesNotAddAFieldThatIsPartOfPaletteAlready
‪addFieldsToAllPalettesOfFieldDoesNotAddAFieldThatIsPartOfPaletteAlready()
Definition: ExtensionManagementUtilityTest.php:524
‪TYPO3\CMS\Core\Tests\Unit\Utility\AccessibleProxies\ExtensionManagementUtilityAccessibleProxy\getPackageManager
‪static getPackageManager()
Definition: ExtensionManagementUtilityAccessibleProxy.php:28
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\addPluginAsContentTypeAddsIconAndDefaultItem
‪addPluginAsContentTypeAddsIconAndDefaultItem()
Definition: ExtensionManagementUtilityTest.php:1235
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\addFieldsToAllPalettesOfFieldAddsAfterExistingIfRequested
‪addFieldsToAllPalettesOfFieldAddsAfterExistingIfRequested()
Definition: ExtensionManagementUtilityTest.php:763
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\addPluginAsContentTypeAddsIconAndDefaultItemWithSelectItem
‪addPluginAsContentTypeAddsIconAndDefaultItemWithSelectItem()
Definition: ExtensionManagementUtilityTest.php:1257
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility\addPlugin
‪static addPlugin(array|SelectItem $itemArray, string $type='list_type', ?string $extensionKey=null)
Definition: ExtensionManagementUtility.php:814
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\addPluginSetsCorrectItemGroupsEntry
‪addPluginSetsCorrectItemGroupsEntry()
Definition: ExtensionManagementUtilityTest.php:1203
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\addTcaSelectItemThrowsExceptionIfFieldIsNotFoundInTca
‪addTcaSelectItemThrowsExceptionIfFieldIsNotFoundInTca()
Definition: ExtensionManagementUtilityTest.php:992
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\executePositionedStringInsertionTrimsCorrectCharacters
‪executePositionedStringInsertionTrimsCorrectCharacters(string $string, string $expectedResult)
Definition: ExtensionManagementUtilityTest.php:972
‪TYPO3\CMS\Core\Core\Environment
Definition: Environment.php:41
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\getExtensionVersionForLoadedExtensionReturnsExtensionVersion
‪getExtensionVersionForLoadedExtensionReturnsExtensionVersion()
Definition: ExtensionManagementUtilityTest.php:1107
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility\addTcaSelectItem
‪static addTcaSelectItem(string $table, string $field, array $item, string $relativeToField='', string $relativePosition='')
Definition: ExtensionManagementUtility.php:391
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\addFieldsToAllPalettesOfFieldAddsFieldsAtEndIfBeforeRequestedDoesNotExist
‪addFieldsToAllPalettesOfFieldAddsFieldsAtEndIfBeforeRequestedDoesNotExist()
Definition: ExtensionManagementUtilityTest.php:717
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\createMockPackageManagerWithMockPackage
‪createMockPackageManagerWithMockPackage(string $packageKey, array $packageMethods=['getPackagePath', 'getPackageKey'])
Definition: ExtensionManagementUtilityTest.php:51
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\addFieldsToAllPalettesOfFieldAddsMultipleFields
‪addFieldsToAllPalettesOfFieldAddsMultipleFields()
Definition: ExtensionManagementUtilityTest.php:626
‪$tca
‪$tca
Definition: sys_file_metadata.php:5
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility\unloadExtension
‪static unloadExtension(string $extensionKey)
Definition: ExtensionManagementUtility.php:1176
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\getExtensionVersionForEmptyExtensionKeyThrowsException
‪getExtensionVersionForEmptyExtensionKeyThrowsException()
Definition: ExtensionManagementUtilityTest.php:1090
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\addTcaSelectItemGroupAddsGroup
‪addTcaSelectItemGroupAddsGroup(string $groupId, string $groupLabel, ?string $position, ?array $existingGroups, array $expectedGroups)
Definition: ExtensionManagementUtilityTest.php:1376
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\addFieldsToAllPalettesOfFieldAddsNewPaletteIfFieldHasNoPaletteYet
‪addFieldsToAllPalettesOfFieldAddsNewPaletteIfFieldHasNoPaletteYet()
Definition: ExtensionManagementUtilityTest.php:855
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest
Definition: ExtensionManagementUtilityTest.php:35
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\extPathAppendsScriptNameToPath
‪extPathAppendsScriptNameToPath()
Definition: ExtensionManagementUtilityTest.php:118
‪TYPO3\CMS\Core\Tests\Unit\Utility\AccessibleProxies\ExtensionManagementUtilityAccessibleProxy
Definition: ExtensionManagementUtilityAccessibleProxy.php:27
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\canAddFieldsToAllTCATypesRespectsPositionFieldInPalette
‪canAddFieldsToAllTCATypesRespectsPositionFieldInPalette()
Definition: ExtensionManagementUtilityTest.php:265
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\canAddFieldsToAllTCATypesBeforeExistingOnes
‪canAddFieldsToAllTCATypesBeforeExistingOnes()
Definition: ExtensionManagementUtilityTest.php:215
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\addFieldsToAllPalettesOfFieldAddsBeforeExistingIfRequested
‪addFieldsToAllPalettesOfFieldAddsBeforeExistingIfRequested()
Definition: ExtensionManagementUtilityTest.php:671
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Core\Utility\StringUtility
Definition: StringUtility.php:24
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\canAddFieldsToPaletteBeforeExistingOnes
‪canAddFieldsToPaletteBeforeExistingOnes()
Definition: ExtensionManagementUtilityTest.php:384
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\extPathThrowsExceptionIfExtensionIsNotLoaded
‪extPathThrowsExceptionIfExtensionIsNotLoaded()
Definition: ExtensionManagementUtilityTest.php:99
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\setUp
‪setUp()
Definition: ExtensionManagementUtilityTest.php:39
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\extensionKeyDataProvider
‪static extensionKeyDataProvider()
Definition: ExtensionManagementUtilityTest.php:177
‪TYPO3\CMS\Core\Utility\StringUtility\getUniqueId
‪static getUniqueId(string $prefix='')
Definition: StringUtility.php:57
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\addToAllTCAtypesAddsBeforeDiv
‪addToAllTCAtypesAddsBeforeDiv()
Definition: ExtensionManagementUtilityTest.php:366
‪TYPO3\CMS\Core\Tests\Unit\Utility\ExtensionManagementUtilityTest\addTcaSelectItemDataProvider
‪static addTcaSelectItemDataProvider()
Definition: ExtensionManagementUtilityTest.php:1004
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility\getCN
‪static getCN(string $key)
Definition: ExtensionManagementUtility.php:96