Version 1
[yaffs-website] / vendor / symfony / dependency-injection / Tests / Compiler / ReplaceAliasByActualDefinitionPassTest.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\Compiler\ReplaceAliasByActualDefinitionPass;
16 use Symfony\Component\DependencyInjection\ContainerBuilder;
17 use Symfony\Component\DependencyInjection\Definition;
18 use Symfony\Component\DependencyInjection\Reference;
19
20 require_once __DIR__.'/../Fixtures/includes/foo.php';
21
22 class ReplaceAliasByActualDefinitionPassTest extends TestCase
23 {
24     public function testProcess()
25     {
26         $container = new ContainerBuilder();
27
28         $aDefinition = $container->register('a', '\stdClass');
29         $aDefinition->setFactoryService('b', false);
30
31         $aDefinition->setFactory(array(new Reference('b'), 'createA'));
32
33         $bDefinition = new Definition('\stdClass');
34         $bDefinition->setPublic(false);
35         $container->setDefinition('b', $bDefinition);
36
37         $container->setAlias('a_alias', 'a');
38         $container->setAlias('b_alias', 'b');
39
40         $container->setAlias('container', 'service_container');
41
42         $this->process($container);
43
44         $this->assertTrue($container->has('a'), '->process() does nothing to public definitions.');
45         $this->assertTrue($container->hasAlias('a_alias'));
46         $this->assertFalse($container->has('b'), '->process() removes non-public definitions.');
47         $this->assertTrue(
48             $container->has('b_alias') && !$container->hasAlias('b_alias'),
49             '->process() replaces alias to actual.'
50         );
51
52         $this->assertSame('b_alias', $aDefinition->getFactoryService(false));
53         $this->assertTrue($container->has('container'));
54
55         $resolvedFactory = $aDefinition->getFactory();
56         $this->assertSame('b_alias', (string) $resolvedFactory[0]);
57     }
58
59     /**
60      * @group legacy
61      */
62     public function testPrivateAliasesInFactory()
63     {
64         $container = new ContainerBuilder();
65
66         $container->register('a', 'Bar\FooClass');
67         $container->register('b', 'Bar\FooClass')
68             ->setFactoryService('a')
69             ->setFactoryMethod('getInstance');
70
71         $container->register('c', 'stdClass')->setPublic(false);
72         $container->setAlias('c_alias', 'c');
73
74         $this->process($container);
75
76         $this->assertInstanceOf('Bar\FooClass', $container->get('b'));
77     }
78
79     /**
80      * @expectedException \InvalidArgumentException
81      */
82     public function testProcessWithInvalidAlias()
83     {
84         $container = new ContainerBuilder();
85         $container->setAlias('a_alias', 'a');
86         $this->process($container);
87     }
88
89     protected function process(ContainerBuilder $container)
90     {
91         $pass = new ReplaceAliasByActualDefinitionPass();
92         $pass->process($container);
93     }
94 }