/** * @covers Symfony\Components\DependencyInjection\Builder::merge */ public function testMerge() { $container = new Builder(); $container->merge(null); $this->assertEquals(array(), $container->getParameterBag()->all(), '->merge() accepts null as an argument'); $this->assertEquals(array(), $container->getDefinitions(), '->merge() accepts null as an argument'); $container = new Builder(new ParameterBag(array('bar' => 'foo'))); $config = new BuilderConfiguration(array(), new ParameterBag(array('foo' => 'bar'))); $container->merge($config); $this->assertEquals(array('bar' => 'foo', 'foo' => 'bar'), $container->getParameterBag()->all(), '->merge() merges current parameters with the loaded ones'); $container = new Builder(new ParameterBag(array('bar' => 'foo', 'foo' => 'baz'))); $config = new BuilderConfiguration(array(), new ParameterBag(array('foo' => 'bar'))); $container->merge($config); $this->assertEquals(array('bar' => 'foo', 'foo' => 'baz'), $container->getParameterBag()->all(), '->merge() does not change the already defined parameters'); $container = new Builder(new ParameterBag(array('bar' => 'foo'))); $config = new BuilderConfiguration(array(), new ParameterBag(array('foo' => '%bar%'))); $container->merge($config); $this->assertEquals(array('bar' => 'foo', 'foo' => 'foo'), $container->getParameterBag()->all(), '->merge() evaluates the values of the parameters towards already defined ones'); $container = new Builder(new ParameterBag(array('bar' => 'foo'))); $config = new BuilderConfiguration(array(), new ParameterBag(array('foo' => '%bar%', 'baz' => '%foo%'))); $container->merge($config); $this->assertEquals(array('bar' => 'foo', 'foo' => 'foo', 'baz' => 'foo'), $container->getParameterBag()->all(), '->merge() evaluates the values of the parameters towards already defined ones'); $container = new Builder(); $container->register('foo', 'FooClass'); $container->register('bar', 'BarClass'); $config = new BuilderConfiguration(); $config->setDefinition('baz', new Definition('BazClass')); $config->setAlias('alias_for_foo', 'foo'); $container->merge($config); $this->assertEquals(array('foo', 'bar', 'baz'), array_keys($container->getDefinitions()), '->merge() merges definitions already defined ones'); $this->assertEquals(array('alias_for_foo' => 'foo'), $container->getAliases(), '->merge() registers defined aliases'); $container = new Builder(); $container->register('foo', 'FooClass'); $config->setDefinition('foo', new Definition('BazClass')); $container->merge($config); $this->assertEquals('BazClass', $container->getDefinition('foo')->getClass(), '->merge() overrides already defined services'); }
$t->is($container->getParameters(), array('bar' => 'foo', 'foo' => 'baz'), '->merge() does not change the already defined parameters'); $container = new Builder(array('bar' => 'foo')); $config = new BuilderConfiguration(); $config->setParameters(array('foo' => '%bar%')); $container->merge($config); $t->is($container->getParameters(), array('bar' => 'foo', 'foo' => 'foo'), '->merge() evaluates the values of the parameters towards already defined ones'); $container = new Builder(array('bar' => 'foo')); $config = new BuilderConfiguration(); $config->setParameters(array('foo' => '%bar%', 'baz' => '%foo%')); $container->merge($config); $t->is($container->getParameters(), array('bar' => 'foo', 'foo' => 'foo', 'baz' => 'foo'), '->merge() evaluates the values of the parameters towards already defined ones'); $container = new Builder(); $container->register('foo', 'FooClass'); $container->register('bar', 'BarClass'); $config = new BuilderConfiguration(); $config->setDefinition('baz', new Definition('BazClass')); $config->setAlias('alias_for_foo', 'foo'); $container->merge($config); $t->is(array_keys($container->getDefinitions()), array('foo', 'bar', 'baz'), '->merge() merges definitions already defined ones'); $t->is($container->getAliases(), array('alias_for_foo' => 'foo'), '->merge() registers defined aliases'); $container = new Builder(); $container->register('foo', 'FooClass'); $config->setDefinition('foo', new Definition('BazClass')); $container->merge($config); $t->is($container->getDefinition('foo')->getClass(), 'BazClass', '->merge() overrides already defined services'); // ->findAnnotatedServiceIds() $t->diag('->findAnnotatedServiceIds()'); $builder = new Builder(); $builder->register('foo', 'FooClass')->addAnnotation('foo', array('foo' => 'foo'))->addAnnotation('bar', array('bar' => 'bar'))->addAnnotation('foo', array('foofoo' => 'foofoo')); $t->is($builder->findAnnotatedServiceIds('foo'), array('foo' => array(array('foo' => 'foo'), array('foofoo' => 'foofoo'))), '->findAnnotatedServiceIds() returns an array of service ids and its annotation attributes'); $t->is($builder->findAnnotatedServiceIds('foobar'), array(), '->findAnnotatedServiceIds() returns an empty array if there is annotated services');
public function optimizeContainer(Builder $container) { // replace all classes with the real value foreach ($container->getDefinitions() as $definition) { if (false !== strpos($class = $definition->getClass(), '%')) { $definition->setClass(Builder::resolveValue($class, $container->getParameters())); unset($container[substr($class, 1, -1)]); } } }