Kaynağa Gözat

[FrameworkBundle] Added a test for listener services not available in the current scope

Victor Berchet 14 yıl önce
ebeveyn
işleme
b4df0ea9ed

+ 2 - 0
src/Symfony/Bundle/FrameworkBundle/ContainerAwareEventDispatcher.php

@@ -72,6 +72,8 @@ class ContainerAwareEventDispatcher extends EventDispatcher
      *
      * Lazily loads listeners for this event from the dependency injection
      * container.
+     *
+     * @throws \InvalidArgumentException if the service is not defined
      */
     public function dispatch($eventName, Event $event = null)
     {

+ 21 - 0
src/Symfony/Bundle/FrameworkBundle/Tests/ContainerAwareEventDispatcherTest.php

@@ -5,6 +5,7 @@ namespace Symfony\Bundle\FrameworkBundle\Tests;
 use Symfony\Component\DependencyInjection\Container;
 use Symfony\Bundle\FrameworkBundle\ContainerAwareEventDispatcher;
 use Symfony\Component\EventDispatcher\Event;
+use Symfony\Component\DependencyInjection\Scope;
 
 class ContainerAwareEventDispatcherTest extends \PHPUnit_Framework_TestCase
 {
@@ -51,6 +52,26 @@ class ContainerAwareEventDispatcherTest extends \PHPUnit_Framework_TestCase
         $dispatcher->dispatch('onEvent', $event);
     }
 
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testTriggerAListenerServiceOutOfScope()
+    {
+        $service = $this->getMock('Symfony\Bundle\FrameworkBundle\Tests\Service');
+
+        $scope = new Scope('scope');
+
+        $container = new Container();
+        $container->addScope($scope);
+        $container->enterScope('scope');
+        $container->set('service.listener', $service, 'scope');
+
+        $dispatcher = new ContainerAwareEventDispatcher($container);
+        $dispatcher->addListenerService('onEvent', 'service.listener');
+
+        $container->leaveScope('scope');
+        $dispatcher->dispatch('onEvent');        
+    }
 }
 
 class Service