/** * @dataProvider providePatternsAndMatches */ public function testPatternMatching($eventPattern, array $expectedMatches, array $expectedMisses) { $pattern = new ListenerPattern($eventPattern, null); foreach ($expectedMatches as $eventName) { $this->assertTrue($pattern->test($eventName), sprintf('Pattern "%s" should match event "%s"', $eventPattern, $eventName)); } foreach ($expectedMisses as $eventName) { $this->assertFalse($pattern->test($eventName), sprintf('Pattern "%s" should not match event "%s"', $eventPattern, $eventName)); } }
/** * 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]); } } }