4 * This file is part of the Symfony package.
6 * (c) Fabien Potencier <fabien@symfony.com>
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
12 namespace Symfony\Component\DependencyInjection\Tests\Compiler;
14 use PHPUnit\Framework\TestCase;
15 use Symfony\Component\DependencyInjection\Alias;
16 use Symfony\Component\DependencyInjection\Compiler\ResolveReferencesToAliasesPass;
17 use Symfony\Component\DependencyInjection\ContainerBuilder;
18 use Symfony\Component\DependencyInjection\Definition;
19 use Symfony\Component\DependencyInjection\Reference;
21 class ResolveReferencesToAliasesPassTest extends TestCase
23 public function testProcess()
25 $container = new ContainerBuilder();
26 $container->setAlias('bar', 'foo');
29 ->setArguments(array(new Reference('bar')))
32 $this->process($container);
34 $arguments = $def->getArguments();
35 $this->assertEquals('foo', (string) $arguments[0]);
38 public function testProcessRecursively()
40 $container = new ContainerBuilder();
41 $container->setAlias('bar', 'foo');
42 $container->setAlias('moo', 'bar');
45 ->setArguments(array(new Reference('moo')))
48 $this->process($container);
50 $arguments = $def->getArguments();
51 $this->assertEquals('foo', (string) $arguments[0]);
55 * @expectedException \Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException
57 public function testAliasCircularReference()
59 $container = new ContainerBuilder();
60 $container->setAlias('bar', 'foo');
61 $container->setAlias('foo', 'bar');
62 $this->process($container);
65 public function testResolveFactory()
67 $container = new ContainerBuilder();
68 $container->register('factory', 'Factory');
69 $container->setAlias('factory_alias', new Alias('factory'));
70 $foo = new Definition();
71 $foo->setFactory(array(new Reference('factory_alias'), 'createFoo'));
72 $container->setDefinition('foo', $foo);
73 $bar = new Definition();
74 $bar->setFactory(array('Factory', 'createFoo'));
75 $container->setDefinition('bar', $bar);
77 $this->process($container);
79 $resolvedFooFactory = $container->getDefinition('foo')->getFactory();
80 $resolvedBarFactory = $container->getDefinition('bar')->getFactory();
82 $this->assertSame('factory', (string) $resolvedFooFactory[0]);
83 $this->assertSame('Factory', (string) $resolvedBarFactory[0]);
86 protected function process(ContainerBuilder $container)
88 $pass = new ResolveReferencesToAliasesPass();
89 $pass->process($container);