public function testDispatcherBinding() { $listener = function () { return 'callback'; }; $pattern = new ListenerPattern('core.*', $listener, $priority = 0); $dispatcher = $this->getMockBuilder(Dispatcher::class)->setMethods(['attach', 'once', 'trigger', 'getListeners', 'detach', 'removeAllListeners', 'hasListeners'])->getMock(); $dispatcher->expects($this->once())->method('attach')->with('core.request', $listener, $priority); $pattern->bind($dispatcher, 'core.request'); // bind() should avoid adding the listener multiple times to the same event $pattern->bind($dispatcher, 'core.request'); }
/** * Adds an event listener for all events matching the specified pattern. * * This method will lazily register the listener when a matching event is * dispatched. * * @param ListenerPattern $pattern */ protected function addListenerPattern(ListenerPattern $pattern) { $this->patterns[$pattern->getEventPattern()][] = $pattern; foreach ($this->syncedEvents as $eventName => $value) { if ($pattern->test($eventName)) { unset($this->syncedEvents[$eventName]); } } }