<?php
namespace Wingu\OctopusCore\EventDispatcher\Tests\Integration;
use Wingu\OctopusCore\EventDispatcher\EventDispatcher; use Wingu\OctopusCore\EventDispatcher\EventInterface; use Wingu\OctopusCore\EventDispatcher\Event; use Wingu\OctopusCore\EventDispatcher\Subscription; use Wingu\OctopusCore\EventDispatcher\EventNameMatcher\AllNamesMatcher; use Wingu\OctopusCore\EventDispatcher\EventNameMatcher\NameMatcher; use Wingu\OctopusCore\EventDispatcher\EventNameMatcher\WildcardMatcher;
class EventDispatcherTest extends TestCase {
public function testRaiseEventNoSubscriptions() { $ed = new EventDispatcher(); $event = new Event(null); $response = $ed->raiseEvent('test', $event);
$this->assertFalse($ed->hasEventSubscriptions('test')); $this->assertCount(0, $response); $this->assertSame($event, $response->getRaisedEvent()); }
public function testRaiseEventUntilCallbackCalledAfterEvent() { $ed = new EventDispatcher(); $event = new Event(null);
$callbackCalled = false; $untilCallback = function () use (&$callbackCalled) { $callbackCalled = true; };
$ed->on('test', function(EventInterface $event) use ($callbackCalled) { $event->stopPropagation(); $this->assertFalse($callbackCalled); });
$ed->raiseEventUntil('test', $event, $untilCallback);
$this->assertTrue($callbackCalled); }
public function testRaiseEventUntilCallbackStops() { $ed = new EventDispatcher(); $event = new Event(null);
$untilCallback = function () { return false; };
$ed->on('test', function(EventInterface $event) {}); $ed->on('test', function(EventInterface $event) { $this->fail('Callback returning FALSE did not stop the event.'); });
$ed->raiseEventUntil('test', $event, $untilCallback); }
public function testStopEventPropagation() { $ed = new EventDispatcher(); $event = new Event(null);
$responseReturn1 = new \stdClass(); $ed->on('test', function(EventInterface $event) use ($responseReturn1) { $event->stopPropagation(); return $responseReturn1; }); $ed->on('test', function() { $this->fail('Event propagation did not stop event handler trigger.'); }); $ed->on('test2', function() { $this->fail('Event should have not fired.'); });
$this->assertSame(3, count($ed->getSubscriptions())); $this->assertTrue($ed->hasEventSubscriptions('test')); $this->assertSame(2, count($ed->getEventSubscriptions('test')));
$response = $ed->raiseEvent('test', $event);
$this->assertCount(1, $response); $this->assertSame($event, $response->getRaisedEvent()); $this->assertSame($responseReturn1, $response[0]); }
public function testEventUnsubscribing() { $ed = new EventDispatcher(); $event = new Event(null); $handler = function() { $this->fail('Event unsubscribing failed.'); }; $ed->on('test', $handler); $ed->off('test', $handler);
$ed->raiseEvent('test', $event); }
public function testRemoveSubscription() { $ed = new EventDispatcher();
$handler1 = function() {}; $handler2 = function() {}; $subscription1 = new Subscription(new NameMatcher('test'), $handler1); $subscription2 = new Subscription(new AllNamesMatcher(), $handler2);
$ed->addSubscription($subscription1); $ed->addSubscription($subscription2);
$this->assertCount(2, $ed->getEventSubscriptions('test'));
$ed->removeSubscription($subscription1); $this->assertCount(1, $ed->getEventSubscriptions('test'));
$ed->removeSubscription(new Subscription(new AllNamesMatcher(), $handler2)); $this->assertCount(0, $ed->getEventSubscriptions('test')); }
public function testAddSubscriber() { $ed = new EventDispatcher();
$handler = function() {}; $subscription1 = new Subscription(new NameMatcher('test'), $handler); $subscription2 = new Subscription(new NameMatcher('test'), $handler);
$subscriber = $this->getMock('Wingu\OctopusCore\EventDispatcher\EventSubscriberInterface'); $subscriber->expects($this->any())->method('getSubscriptions')->will($this->returnValue([$subscription1, $subscription2]));
$ed->addSubscriber($subscriber);
$this->assertCount(2, $ed->getEventSubscriptions('test'));
$ed->removeSubscriber($subscriber); $this->assertFalse($ed->hasSubscriptions()); } }
|