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