‪TYPO3CMS  ‪main
ListenerProviderPassTest.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 Symfony\Component\Config\FileLocator;
22 use Symfony\Component\DependencyInjection\ContainerBuilder;
23 use Symfony\Component\DependencyInjection\Definition;
24 use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
25 use Symfony\Component\DependencyInjection\Reference;
28 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
29 
30 final class ‪ListenerProviderPassTest extends UnitTestCase
31 {
32  protected function ‪getContainerWithListenerProvider(array $packages = []): ContainerBuilder
33  {
34  $container = new ContainerBuilder();
35 
36  foreach ($packages as $package) {
37  $yamlFileLoader = new YamlFileLoader($container, new FileLocator($package . '/Configuration'));
38  $yamlFileLoader->load('Services.yaml');
39  }
40 
41  $listenerProvider = new Definition(ListenerProvider::class);
42  $listenerProvider->setPublic(true);
43  $listenerProvider->setArguments([
44  new Reference('service_container'),
45  ]);
46 
47  $container->setDefinition(ListenerProvider::class, $listenerProvider);
48 
49  $container->addCompilerPass(new ‪ListenerProviderPass('event.listener'));
50  $container->compile();
51 
52  return $container;
53  }
54 
55  #[Test]
56  public function ‪simpleChainsAndDependencies(): void
57  {
58  $container = $this->‪getContainerWithListenerProvider([
59  __DIR__ . '/Fixtures/Package1',
60  __DIR__ . '/Fixtures/Package2',
61  __DIR__ . '/Fixtures/Package3',
62  ]);
63 
64  $listenerProvider = $container->get(ListenerProvider::class);
65  $listeners = $listenerProvider->getAllListenerDefinitions();
66 
67  self::assertEquals(
68  [
69  'TYPO3\\CMS\\Core\\Mail\\Event\\AfterMailerInitializationEvent' => [
70  'package2.listener' => [
71  'service' => 'package2.listener',
72  'method' => 'onEvent',
73  ],
74  'legacy-hook' => [
75  'service' => 'package1.listener1',
76  'method' => null,
77  ],
78  ],
79  'TYPO3\\CMS\\Core\\Foo\\Event\\TestEvent' => [
80  'legacy-hook' => [
81  'service' => 'package3.listener',
82  'method' => null,
83  ],
84  ],
85  ],
86  $listeners
87  );
88  }
89 
90  #[Test]
91  public function ‪cycleException(): void
92  {
93  $this->expectException(\UnexpectedValueException::class);
94  $this->expectExceptionMessage('Your dependencies have cycles. That will not work out. Cycles found: legacy-hook->package4.listener, package4.listener->legacy-hook');
95 
97  __DIR__ . '/Fixtures/Package1',
98  __DIR__ . '/Fixtures/Package4Cycle',
99  ]);
100  }
101 
102  #[Test]
103  public function ‪withoutConfiguration(): void
104  {
105  $container = $this->‪getContainerWithListenerProvider([]);
106 
107  $listenerProvider = $container->get(ListenerProvider::class);
108  $listeners = $listenerProvider->getAllListenerDefinitions();
109 
110  self::assertEquals([], $listeners);
111  }
112 }
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection\ListenerProviderPassTest\withoutConfiguration
‪withoutConfiguration()
Definition: ListenerProviderPassTest.php:103
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection\ListenerProviderPassTest\simpleChainsAndDependencies
‪simpleChainsAndDependencies()
Definition: ListenerProviderPassTest.php:56
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection
Definition: ConsoleCommandPassTest.php:18
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection\ListenerProviderPassTest
Definition: ListenerProviderPassTest.php:31
‪TYPO3\CMS\Core\DependencyInjection\ListenerProviderPass
Definition: ListenerProviderPass.php:32
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection\ListenerProviderPassTest\cycleException
‪cycleException()
Definition: ListenerProviderPassTest.php:91
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection\ListenerProviderPassTest\getContainerWithListenerProvider
‪getContainerWithListenerProvider(array $packages=[])
Definition: ListenerProviderPassTest.php:32
‪TYPO3\CMS\Core\EventDispatcher\ListenerProvider
Definition: ListenerProvider.php:30