Browse Source

[EventDispatcher] added EventDispatcher::removeSubscriber()

Fabien Potencier 14 years ago
parent
commit
69d324eca8

+ 8 - 0
src/Symfony/Component/EventDispatcher/EventDispatcher.php

@@ -157,6 +157,14 @@ class EventDispatcher implements EventDispatcherInterface
         $this->addListener($subscriber->getSubscribedEvents(), $subscriber, $priority);
     }
 
+    /**
+     * @see EventDispatcherInterface::removeSubscriber
+     */
+    public function removeSubscriber(EventSubscriberInterface $subscriber)
+    {
+        $this->removeListener($subscriber->getSubscribedEvents(), $subscriber);
+    }
+
     /**
      * Triggers the listener method for an event.
      *

+ 7 - 0
src/Symfony/Component/EventDispatcher/EventDispatcherInterface.php

@@ -61,6 +61,13 @@ interface EventDispatcherInterface
      */
     function removeListener($eventNames, $listener);
 
+    /**
+     * Removes an event subscriber.
+     *
+     * @param EventSubscriberInterface $subscriber The subscriber.
+     */
+    function removeSubscriber(EventSubscriberInterface $subscriber);
+
     /**
      * Gets the listeners of a specific event or all listeners.
      *

+ 11 - 0
tests/Symfony/Tests/Component/EventDispatcher/EventDispatcherTest.php

@@ -168,6 +168,17 @@ class EventDispatcherTest extends \PHPUnit_Framework_TestCase
         $this->assertTrue($this->dispatcher->hasListeners(self::preFoo));
         $this->assertTrue($this->dispatcher->hasListeners(self::postFoo));
     }
+
+    public function testRemoveSubscriber()
+    {
+        $eventSubscriber = new TestEventSubscriber();
+        $this->dispatcher->addSubscriber($eventSubscriber);
+        $this->assertTrue($this->dispatcher->hasListeners(self::preFoo));
+        $this->assertTrue($this->dispatcher->hasListeners(self::postFoo));
+        $this->dispatcher->removeSubscriber($eventSubscriber);
+        $this->assertFalse($this->dispatcher->hasListeners(self::preFoo));
+        $this->assertFalse($this->dispatcher->hasListeners(self::postFoo));
+    }
 }
 
 class TestEventListener