Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / vendor / symfony / event-dispatcher / Tests / DependencyInjection / RegisterListenersPassTest.php
1 <?php
2
3 /*
4  * This file is part of the Symfony package.
5  *
6  * (c) Fabien Potencier <fabien@symfony.com>
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11
12 namespace Symfony\Component\EventDispatcher\Tests\DependencyInjection;
13
14 use PHPUnit\Framework\TestCase;
15 use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument;
16 use Symfony\Component\DependencyInjection\ContainerBuilder;
17 use Symfony\Component\DependencyInjection\Reference;
18 use Symfony\Component\EventDispatcher\DependencyInjection\RegisterListenersPass;
19
20 class RegisterListenersPassTest extends TestCase
21 {
22     /**
23      * Tests that event subscribers not implementing EventSubscriberInterface
24      * trigger an exception.
25      *
26      * @expectedException \InvalidArgumentException
27      */
28     public function testEventSubscriberWithoutInterface()
29     {
30         $builder = new ContainerBuilder();
31         $builder->register('event_dispatcher');
32         $builder->register('my_event_subscriber', 'stdClass')
33             ->addTag('kernel.event_subscriber');
34
35         $registerListenersPass = new RegisterListenersPass();
36         $registerListenersPass->process($builder);
37     }
38
39     public function testValidEventSubscriber()
40     {
41         $services = array(
42             'my_event_subscriber' => array(0 => array()),
43         );
44
45         $builder = new ContainerBuilder();
46         $eventDispatcherDefinition = $builder->register('event_dispatcher');
47         $builder->register('my_event_subscriber', 'Symfony\Component\EventDispatcher\Tests\DependencyInjection\SubscriberService')
48             ->addTag('kernel.event_subscriber');
49
50         $registerListenersPass = new RegisterListenersPass();
51         $registerListenersPass->process($builder);
52
53         $expectedCalls = array(
54             array(
55                 'addListener',
56                 array(
57                     'event',
58                     array(new ServiceClosureArgument(new Reference('my_event_subscriber')), 'onEvent'),
59                     0,
60                 ),
61             ),
62         );
63         $this->assertEquals($expectedCalls, $eventDispatcherDefinition->getMethodCalls());
64     }
65
66     /**
67      * @expectedException \InvalidArgumentException
68      * @expectedExceptionMessage The service "foo" tagged "kernel.event_listener" must not be abstract.
69      */
70     public function testAbstractEventListener()
71     {
72         $container = new ContainerBuilder();
73         $container->register('foo', 'stdClass')->setAbstract(true)->addTag('kernel.event_listener', array());
74         $container->register('event_dispatcher', 'stdClass');
75
76         $registerListenersPass = new RegisterListenersPass();
77         $registerListenersPass->process($container);
78     }
79
80     /**
81      * @expectedException \InvalidArgumentException
82      * @expectedExceptionMessage The service "foo" tagged "kernel.event_subscriber" must not be abstract.
83      */
84     public function testAbstractEventSubscriber()
85     {
86         $container = new ContainerBuilder();
87         $container->register('foo', 'stdClass')->setAbstract(true)->addTag('kernel.event_subscriber', array());
88         $container->register('event_dispatcher', 'stdClass');
89
90         $registerListenersPass = new RegisterListenersPass();
91         $registerListenersPass->process($container);
92     }
93
94     public function testEventSubscriberResolvableClassName()
95     {
96         $container = new ContainerBuilder();
97
98         $container->setParameter('subscriber.class', 'Symfony\Component\EventDispatcher\Tests\DependencyInjection\SubscriberService');
99         $container->register('foo', '%subscriber.class%')->addTag('kernel.event_subscriber', array());
100         $container->register('event_dispatcher', 'stdClass');
101
102         $registerListenersPass = new RegisterListenersPass();
103         $registerListenersPass->process($container);
104
105         $definition = $container->getDefinition('event_dispatcher');
106         $expectedCalls = array(
107             array(
108                 'addListener',
109                 array(
110                     'event',
111                     array(new ServiceClosureArgument(new Reference('foo')), 'onEvent'),
112                     0,
113                 ),
114             ),
115         );
116         $this->assertEquals($expectedCalls, $definition->getMethodCalls());
117     }
118
119     public function testHotPathEvents()
120     {
121         $container = new ContainerBuilder();
122
123         $container->register('foo', SubscriberService::class)->addTag('kernel.event_subscriber', array());
124         $container->register('event_dispatcher', 'stdClass');
125
126         (new RegisterListenersPass())->setHotPathEvents(array('event'))->process($container);
127
128         $this->assertTrue($container->getDefinition('foo')->hasTag('container.hot_path'));
129     }
130
131     /**
132      * @expectedException \InvalidArgumentException
133      * @expectedExceptionMessage You have requested a non-existent parameter "subscriber.class"
134      */
135     public function testEventSubscriberUnresolvableClassName()
136     {
137         $container = new ContainerBuilder();
138         $container->register('foo', '%subscriber.class%')->addTag('kernel.event_subscriber', array());
139         $container->register('event_dispatcher', 'stdClass');
140
141         $registerListenersPass = new RegisterListenersPass();
142         $registerListenersPass->process($container);
143     }
144 }
145
146 class SubscriberService implements \Symfony\Component\EventDispatcher\EventSubscriberInterface
147 {
148     public static function getSubscribedEvents()
149     {
150         return array(
151             'event' => 'onEvent',
152         );
153     }
154 }