EventManagerTest.php 2.79 KB
Newer Older
1 2 3 4 5 6 7
<?php

namespace Doctrine\Tests\Common;

use Doctrine\Common\EventManager;
use Doctrine\Common\EventArgs;

romanb's avatar
romanb committed
8 9
require_once __DIR__ . '/../TestInit.php';

10 11 12 13 14
class EventManagerTest extends \Doctrine\Tests\DoctrineTestCase
{
    /* Some pseudo events */
    const preFoo = 'preFoo';
    const postFoo = 'postFoo';
jwage's avatar
jwage committed
15 16
    const preBar = 'preBar';
    const postBar = 'postBar';
17 18 19 20 21 22

    private $_preFooInvoked = false;
    private $_postFooInvoked = false;

    private $_eventManager;

23 24
    protected function setUp()
    {
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
        $this->_eventManager = new EventManager;
        $this->_preFooInvoked = false;
        $this->_postFooInvoked = false;
    }

    public function testInitialState()
    {
        $this->assertEquals(array(), $this->_eventManager->getListeners());
        $this->assertFalse($this->_eventManager->hasListeners(self::preFoo));
        $this->assertFalse($this->_eventManager->hasListeners(self::postFoo));
    }

    public function testAddEventListener()
    {
        $this->_eventManager->addEventListener(array('preFoo', 'postFoo'), $this);
        $this->assertTrue($this->_eventManager->hasListeners(self::preFoo));
        $this->assertTrue($this->_eventManager->hasListeners(self::postFoo));
        $this->assertEquals(1, count($this->_eventManager->getListeners(self::preFoo)));
        $this->assertEquals(1, count($this->_eventManager->getListeners(self::postFoo)));
        $this->assertEquals(2, count($this->_eventManager->getListeners()));
    }

    public function testDispatchEvent()
    {
        $this->_eventManager->addEventListener(array('preFoo', 'postFoo'), $this);
        $this->_eventManager->dispatchEvent(self::preFoo);
        $this->assertTrue($this->_preFooInvoked);
        $this->assertFalse($this->_postFooInvoked);
    }

jwage's avatar
jwage committed
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
    public function testRemoveEventListener()
    {
        $this->_eventManager->addEventListener(array('preBar'), $this);
        $this->assertTrue($this->_eventManager->hasListeners(self::preBar));
        $this->_eventManager->removeEventListener(array('preBar'), $this);
        $this->assertFalse($this->_eventManager->hasListeners(self::preBar));
    }

    public function testAddEventSubscriber()
    {
        $eventSubscriber = new TestEventSubscriber();
        $this->_eventManager->addEventSubscriber($eventSubscriber);
        $this->assertTrue($this->_eventManager->hasListeners(self::preFoo));
        $this->assertTrue($this->_eventManager->hasListeners(self::postFoo));
    }

71 72 73 74 75 76 77 78 79 80 81
    /* Listener methods */

    public function preFoo(EventArgs $e)
    {
        $this->_preFooInvoked = true;
    }

    public function postFoo(EventArgs $e)
    {
        $this->_postFooInvoked = true;
    }
jwage's avatar
jwage committed
82 83 84 85 86 87 88 89
}

class TestEventSubscriber implements \Doctrine\Common\EventSubscriber
{
    public function getSubscribedEvents()
    {
        return array('preFoo', 'postFoo');
    }
90
}