public function testListenerReturnsClosure()
 {
     $closure = function (Event $event) {
     };
     $listener = new AnonymousListener($closure, Priority::HIGH);
     $this->assertEquals($closure, $listener->getClosure());
 }
Esempio n. 2
0
 /**
  * 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();
 }