public function testListeners() { $meta = new ServiceMetadata('Service\\Test'); $this->assertEmpty($meta->getAllListeners()); $this->assertEmpty($meta->getListeners('event')); $listeners = array('eventOne' => array('listenerOne'), 'eventTwo' => array('listenerOne', 'listenerTwo')); $meta->setAllListeners($listeners); $this->assertEquals($listeners, $meta->getAllListeners()); $this->assertEquals($listeners['eventOne'], $meta->getListeners('eventOne')); $this->assertEquals($listeners['eventTwo'], $meta->getListeners('eventTwo')); $eventTwoListeners = $listeners['eventTwo']; $eventTwoListeners[] = 'listenerThree'; $meta->addListener('eventTwo', 'listenerThree'); $this->assertEquals($eventTwoListeners, $meta->getListeners('eventTwo')); }
/** * Loads the ServiceMetadata for the supplied class. * * @param string $class */ protected function loadMetadata($class) { // first run, we have no parent $parent = null; $parentClasses = $this->getParentClasses($class); $parentClasses[] = $class; // iterate through the list of mapped service parent classes foreach ($parentClasses as $parentClass) { // create an empty metadata class $class = new ServiceMetadata($class); // copy all data from the immediate parent, if present if ($parent) { $class->setClassName($parent->getClassName()); $class->setAllListeners($parent->getAllListeners()); } // now overlay the metadata from the class itself if (!isset($this->loadedMetadata[$parentClass])) { $this->driver->loadMetadataForClass($parentClass, $class); $this->loadedMetadata[$parentClass] = $class; } // the parent for the next iteration will be this iteration $parent = $class; } }