public function testListenerReturnsClosure() { $closure = function (Event $event) { }; $listener = new AnonymousListener($closure, Priority::HIGH); $this->assertEquals($closure, $listener->getClosure()); }
/** * Priority given here overrides the priority set within the anonymous listener * * @param AnonymousListener $listener * @param int $priority * @return Worker[] */ private function createWorkersFromAnonymousListener(AnonymousListener $listener, $priority = null) { $closureReflection = new \ReflectionMethod($listener->getClosure(), '__invoke'); $params = $closureReflection->getParameters(); if ($priority === null) { $priority = $listener->getPriority(); } if (isset($params[0])) { $param = $params[0]; $eventClassName = $this->getEventClassNameFromParam($param); if ($eventClassName === null) { $message = sprintf('First closure param (%s) must be a class implementing an Event', $param->name); throw new \InvalidArgumentException($message); } return array(new Worker($this->generateWorkerId(), $listener, 'invoke', $eventClassName, $priority)); } return array(); }