57dd42b487ab44223fca9752617d84f18da35913
[yaffs-website] / vendor / symfony / dependency-injection / Tests / Compiler / RemoveUnusedDefinitionsPassTest.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\AnalyzeServiceReferencesPass;
16 use Symfony\Component\DependencyInjection\Compiler\RepeatedPass;
17 use Symfony\Component\DependencyInjection\Compiler\RemoveUnusedDefinitionsPass;
18 use Symfony\Component\DependencyInjection\Definition;
19 use Symfony\Component\DependencyInjection\Reference;
20 use Symfony\Component\DependencyInjection\ContainerBuilder;
21
22 class RemoveUnusedDefinitionsPassTest extends TestCase
23 {
24     public function testProcess()
25     {
26         $container = new ContainerBuilder();
27         $container
28             ->register('foo')
29             ->setPublic(false)
30         ;
31         $container
32             ->register('bar')
33             ->setPublic(false)
34         ;
35         $container
36             ->register('moo')
37             ->setArguments(array(new Reference('bar')))
38         ;
39
40         $this->process($container);
41
42         $this->assertFalse($container->hasDefinition('foo'));
43         $this->assertTrue($container->hasDefinition('bar'));
44         $this->assertTrue($container->hasDefinition('moo'));
45     }
46
47     public function testProcessRemovesUnusedDefinitionsRecursively()
48     {
49         $container = new ContainerBuilder();
50         $container
51             ->register('foo')
52             ->setPublic(false)
53         ;
54         $container
55             ->register('bar')
56             ->setArguments(array(new Reference('foo')))
57             ->setPublic(false)
58         ;
59
60         $this->process($container);
61
62         $this->assertFalse($container->hasDefinition('foo'));
63         $this->assertFalse($container->hasDefinition('bar'));
64     }
65
66     public function testProcessWorksWithInlinedDefinitions()
67     {
68         $container = new ContainerBuilder();
69         $container
70             ->register('foo')
71             ->setPublic(false)
72         ;
73         $container
74             ->register('bar')
75             ->setArguments(array(new Definition(null, array(new Reference('foo')))))
76         ;
77
78         $this->process($container);
79
80         $this->assertTrue($container->hasDefinition('foo'));
81         $this->assertTrue($container->hasDefinition('bar'));
82     }
83
84     public function testProcessWontRemovePrivateFactory()
85     {
86         $container = new ContainerBuilder();
87
88         $container
89             ->register('foo', 'stdClass')
90             ->setFactory(array('stdClass', 'getInstance'))
91             ->setPublic(false);
92
93         $container
94             ->register('bar', 'stdClass')
95             ->setFactory(array(new Reference('foo'), 'getInstance'))
96             ->setPublic(false);
97
98         $container
99             ->register('foobar')
100             ->addArgument(new Reference('bar'));
101
102         $this->process($container);
103
104         $this->assertTrue($container->hasDefinition('foo'));
105         $this->assertTrue($container->hasDefinition('bar'));
106         $this->assertTrue($container->hasDefinition('foobar'));
107     }
108
109     protected function process(ContainerBuilder $container)
110     {
111         $repeatedPass = new RepeatedPass(array(new AnalyzeServiceReferencesPass(), new RemoveUnusedDefinitionsPass()));
112         $repeatedPass->process($container);
113     }
114 }