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);
         }
     }
 }
Exemple #3
0
 /**
  * @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()));
         }
     }
 }