public function testMerge() { $mockDef = $this->mock('tubepress_api_ioc_DefinitionInterface'); $mockDefs = array($mockDef); $mockContainer = $this->mock('tubepress_api_ioc_ContainerBuilderInterface'); $mockContainer->shouldReceive('getDefinitions')->once()->andReturn($mockDefs); $mockContainer->shouldReceive('addDefinitions')->once()->with($mockDefs); $mockExtension = $this->mock('tubepress_spi_ioc_ContainerExtensionInterface'); $mockExtension->shouldReceive('load')->once()->with(Mockery::any('tubepress_internal_ioc_ContainerBuilder')); $this->_sut->registerExtension($mockExtension); $this->_sut->process($mockContainer); $this->assertTrue(true); }
public function testLoad() { $this->prepareForLoad(); $this->_sut->load($this->_mockContainer); $realContainerBuilder = new tubepress_internal_ioc_ContainerBuilder(); $realContainerBuilder->registerExtension($this->_sut); foreach ($this->getExpectedExternalServicesMap() as $id => $type) { if (is_string($type)) { $realContainerBuilder->set($id, $this->mock($type)); } else { $realContainerBuilder->set($id, $type); } } foreach ($this->getExpectedParameterMap() as $key => $value) { $realContainerBuilder->setParameter($key, $value); } foreach ($this->_expectedDecoratedServices as $serviceId) { $decoratedDefinition = new tubepress_internal_ioc_Definition($serviceId); $decoratedDefinition->setFactoryClass('Mockery'); $decoratedDefinition->setFactoryMethod('mock'); $decoratedDefinition->addArgument($serviceId); $realContainerBuilder->setDefinition(strtolower($serviceId), $decoratedDefinition); } $this->preCompile($realContainerBuilder); $realContainerBuilder->compile(); $this->postCompile($realContainerBuilder); foreach ($this->_expectedServiceConstructions as $id => $type) { $this->assertTrue($realContainerBuilder->hasDefinition($id), "Expected that container has definition for {$id}"); $this->assertTrue($realContainerBuilder->has($id), "Expected that container has definition for {$id}"); $service = $realContainerBuilder->get($id); if (is_string($type)) { $this->assertInstanceOf($type, $service, "{$id} is not an instance of {$type} (actually is " . get_class($service) . ')'); } else { /** * @var $def tubepress_api_ioc_DefinitionInterface */ $def = $type; $this->assertInstanceOf($def->getClass(), $service); } } }
/** * @param tubepress_internal_ioc_ContainerBuilder $container * @param $extensionClassName * @param $index * @param $count * @param $addon */ private function _registerModernExtension(tubepress_internal_ioc_ContainerBuilder $container, $extensionClassName, $index, $count, tubepress_api_contrib_AddonInterface $addon) { try { $ref = new ReflectionClass($extensionClassName); /** @noinspection PhpParamsInspection */ $container->registerExtension($ref->newInstance()); if ($this->_shouldLog) { $this->_logDebug(sprintf('(Add-on <code>%d</code> of <code>%d</code>: <code>%s</code>) Successfully loaded <code>%s</code> as a container extension', $index, $count, $addon->getName(), $extensionClassName)); } } catch (Exception $e) { if ($this->_shouldLog) { $this->_logger->error(sprintf('(Add-on <code>%d</code> of <code>%d</code>: <code>%s</code>) Failed to load <code>%s</code> as a container extension: <code>%s</code>', $index, $count, $addon->getName(), $extensionClassName, $e->getMessage())); } } }