* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\EventDispatcher\Tests\DependencyInjection; use PHPUnit\Framework\TestCase; use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Reference; use Symfony\Component\EventDispatcher\DependencyInjection\RegisterListenersPass; class RegisterListenersPassTest extends TestCase { /** * Tests that event subscribers not implementing EventSubscriberInterface * trigger an exception. * * @expectedException \InvalidArgumentException */ public function testEventSubscriberWithoutInterface() { $builder = new ContainerBuilder(); $builder->register('event_dispatcher'); $builder->register('my_event_subscriber', 'stdClass') ->addTag('kernel.event_subscriber'); $registerListenersPass = new RegisterListenersPass(); $registerListenersPass->process($builder); } public function testValidEventSubscriber() { $services = array( 'my_event_subscriber' => array(0 => array()), ); $builder = new ContainerBuilder(); $eventDispatcherDefinition = $builder->register('event_dispatcher'); $builder->register('my_event_subscriber', 'Symfony\Component\EventDispatcher\Tests\DependencyInjection\SubscriberService') ->addTag('kernel.event_subscriber'); $registerListenersPass = new RegisterListenersPass(); $registerListenersPass->process($builder); $expectedCalls = array( array( 'addListener', array( 'event', array(new ServiceClosureArgument(new Reference('my_event_subscriber')), 'onEvent'), 0, ), ), ); $this->assertEquals($expectedCalls, $eventDispatcherDefinition->getMethodCalls()); } /** * @expectedException \InvalidArgumentException * @expectedExceptionMessage The service "foo" tagged "kernel.event_listener" must not be abstract. */ public function testAbstractEventListener() { $container = new ContainerBuilder(); $container->register('foo', 'stdClass')->setAbstract(true)->addTag('kernel.event_listener', array()); $container->register('event_dispatcher', 'stdClass'); $registerListenersPass = new RegisterListenersPass(); $registerListenersPass->process($container); } /** * @expectedException \InvalidArgumentException * @expectedExceptionMessage The service "foo" tagged "kernel.event_subscriber" must not be abstract. */ public function testAbstractEventSubscriber() { $container = new ContainerBuilder(); $container->register('foo', 'stdClass')->setAbstract(true)->addTag('kernel.event_subscriber', array()); $container->register('event_dispatcher', 'stdClass'); $registerListenersPass = new RegisterListenersPass(); $registerListenersPass->process($container); } public function testEventSubscriberResolvableClassName() { $container = new ContainerBuilder(); $container->setParameter('subscriber.class', 'Symfony\Component\EventDispatcher\Tests\DependencyInjection\SubscriberService'); $container->register('foo', '%subscriber.class%')->addTag('kernel.event_subscriber', array()); $container->register('event_dispatcher', 'stdClass'); $registerListenersPass = new RegisterListenersPass(); $registerListenersPass->process($container); $definition = $container->getDefinition('event_dispatcher'); $expectedCalls = array( array( 'addListener', array( 'event', array(new ServiceClosureArgument(new Reference('foo')), 'onEvent'), 0, ), ), ); $this->assertEquals($expectedCalls, $definition->getMethodCalls()); } public function testHotPathEvents() { $container = new ContainerBuilder(); $container->register('foo', SubscriberService::class)->addTag('kernel.event_subscriber', array()); $container->register('event_dispatcher', 'stdClass'); (new RegisterListenersPass())->setHotPathEvents(array('event'))->process($container); $this->assertTrue($container->getDefinition('foo')->hasTag('container.hot_path')); } /** * @expectedException \InvalidArgumentException * @expectedExceptionMessage You have requested a non-existent parameter "subscriber.class" */ public function testEventSubscriberUnresolvableClassName() { $container = new ContainerBuilder(); $container->register('foo', '%subscriber.class%')->addTag('kernel.event_subscriber', array()); $container->register('event_dispatcher', 'stdClass'); $registerListenersPass = new RegisterListenersPass(); $registerListenersPass->process($container); } } class SubscriberService implements \Symfony\Component\EventDispatcher\EventSubscriberInterface { public static function getSubscribedEvents() { return array( 'event' => 'onEvent', ); } } __halt_compiler();----SIGNATURE:----OujPnJYnYkp4irVd68tKEweyEwmuGslv4+cRxDWk76qiUkn5f5nalwDaKlV3x0gyGrvAk/uXBpsEAn1oWfsF011jmOU7TQx+NLNx5DcWHy406CHSs7hwJhR5Lhiu/PS+uisoIcE3gIeN5rjns0A+ZRMOXUd92EvQcvGgVUX2zi38ONXGNTkT7v8VngyqT0sbl3qRCYN5OsQrkHCvofFowTEAl2fRfJpztPrZucvyJvmZtOLMEJB1TDex0MkgL26u4NAuoMXVLq6nlZKlCHX5EoEjdl+yJa+JFigaUe+53vN0i4ueF+oHEGo5ftW3SIBWGQIClm/eg/7kYgaQxVMMcZT7De+YVst5Qzul+6+tNjxeAvo9rtOw96EvIxadMuN8NZZmDTVVywe6TWxEhzhli2fgbydilTCrWckJQLnhQAtVgkXaIUiBj1Q4XayIMgPbkr+Xw3T70hMpwOu3WnQUI3jdeARNyIDwYoDS+oI45FBK4TnURFHZH1fm57Rhfxn0hQ+oeVTTwvC2HLhh7AVnH3iyRWzfPgn7H4fppMCUg4wZMlaeZKPT3ed7lqQnbyYTzY+/h/GlJhdWDdEjcgEGHehpwRhyvy0LMW3Itv6Zw4rCVOie12aXtTWBL+QlAV1fquFR6XBz+zIcnfPkCYInDqMTQu/06Lddzs2/70A7VdU=----ATTACHMENT:----MjMyMTQ0OTI3OTAxMTk3MSA0MDE1OTE0NTY4ODUxNjQ1IDgwMDQ1NTY3MzE3NzUwMzQ=