6fb619718a646d801590082725a37754f1126811
[yaffs-website] / vendor / symfony / dependency-injection / Tests / Compiler / ResolveReferencesToAliasesPassTest.php
1 <?php
2
3 /*
4  * This file is part of the Symfony package.
5  *
6  * (c) Fabien Potencier <fabien@symfony.com>
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11
12 namespace Symfony\Component\DependencyInjection\Tests\Compiler;
13
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;
20
21 class ResolveReferencesToAliasesPassTest extends TestCase
22 {
23     public function testProcess()
24     {
25         $container = new ContainerBuilder();
26         $container->setAlias('bar', 'foo');
27         $def = $container
28             ->register('moo')
29             ->setArguments(array(new Reference('bar')))
30         ;
31
32         $this->process($container);
33
34         $arguments = $def->getArguments();
35         $this->assertEquals('foo', (string) $arguments[0]);
36     }
37
38     public function testProcessRecursively()
39     {
40         $container = new ContainerBuilder();
41         $container->setAlias('bar', 'foo');
42         $container->setAlias('moo', 'bar');
43         $def = $container
44             ->register('foobar')
45             ->setArguments(array(new Reference('moo')))
46         ;
47
48         $this->process($container);
49
50         $arguments = $def->getArguments();
51         $this->assertEquals('foo', (string) $arguments[0]);
52     }
53
54     /**
55      * @expectedException \Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException
56      */
57     public function testAliasCircularReference()
58     {
59         $container = new ContainerBuilder();
60         $container->setAlias('bar', 'foo');
61         $container->setAlias('foo', 'bar');
62         $this->process($container);
63     }
64
65     public function testResolveFactory()
66     {
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);
76
77         $this->process($container);
78
79         $resolvedFooFactory = $container->getDefinition('foo')->getFactory();
80         $resolvedBarFactory = $container->getDefinition('bar')->getFactory();
81
82         $this->assertSame('factory', (string) $resolvedFooFactory[0]);
83         $this->assertSame('Factory', (string) $resolvedBarFactory[0]);
84     }
85
86     protected function process(ContainerBuilder $container)
87     {
88         $pass = new ResolveReferencesToAliasesPass();
89         $pass->process($container);
90     }
91 }