/** * Test Dispatch method. */ public function testDispatch() { // dispatch event name $this->given($dispatcher = $this->createEventDispatcher())->when($event = $dispatcher->dispatch('foo.event'))->then()->object($event)->isInstanceOf(Event::class); // dispatch event named $this->given($dispatcher = $this->createEventDispatcher())->when($event = $dispatcher->dispatch(Event::named('foo.event')))->then()->object($event)->isInstanceOf(Event::class); // dispatch event class $this->given($dispatcher = $this->createEventDispatcher())->when($event = $dispatcher->dispatch(new LoginUserEvent('*****@*****.**')))->then()->object($event)->isInstanceOf(EventInterface::class); // dispatch invalid event $this->given($dispatcher = $this->createEventDispatcher())->then()->exception(function () use($dispatcher) { $dispatcher->dispatch(new InvalidEvent()); })->isInstanceOf(\InvalidArgumentException::class); // dispatch with one callable listener $this->given($dispatcher = $this->createEventDispatcher())->and($counter = 0)->and($dispatcher->addListener('foo.event', function (Event $event) use(&$counter) { ++$counter; }))->when($dispatcher->dispatch('foo.event'))->then()->integer($counter)->isEqualTo(1); // dispatch with many callable listener $this->given($dispatcher = $this->createEventDispatcher())->and($counter = 0)->and($dispatcher->addListener('foo.event', function (Event $event) use(&$counter) { ++$counter; }))->and($dispatcher->addListener('foo.event', function (Event $event) use(&$counter) { ++$counter; }))->when($dispatcher->dispatch('foo.event'))->then()->integer($counter)->isEqualTo(2); // dispatch with many callable listener but stopped the event propagation $this->given($dispatcher = $this->createEventDispatcher())->and($counter = 0)->and($dispatcher->addListener('foo.event', function (Event $event) use(&$counter) { ++$counter; $event->stopPropagation(); }))->and($dispatcher->addListener('foo.event', function (Event $event) use(&$counter) { ++$counter; }))->when($dispatcher->dispatch('foo.event'))->then()->integer($counter)->isEqualTo(1); // dispatch with many callable listener and priority $this->given($dispatcher = $this->createEventDispatcher())->and($counter = 3)->and($dispatcher->addListener('foo.event', function (Event $event) use(&$counter) { $counter = $counter * 5; }, 50))->and($dispatcher->addListener('foo.event', function (Event $event) use(&$counter) { $counter = $counter + 2; }, 100))->when($dispatcher->dispatch('foo.event'))->then()->integer($counter)->isEqualTo(25); // dispatch with many listener class or callable $this->given($dispatcher = $this->createEventDispatcher())->and($event = new LoginUserEvent('*****@*****.**'))->and($dispatcher->addListener($event->eventName(), array(new LoginUserEventListener(), 'onLogin')))->and($dispatcher->addListener($event->eventName(), function (LoginUserEvent $event) { $this->string($event->email())->isEqualTo('*****@*****.**'); $event->setEmail('*****@*****.**'); }))->when($dispatcher->dispatch($event))->then()->string($event->email())->isEqualTo('*****@*****.**'); }
/** * @param LoginUserEvent $event * * @return bool */ public function onLoginSuccess(LoginUserEvent $event) { $event->setEmail('*****@*****.**'); }