Updating Media dependent modules to versions compatible with core Media.
[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\Compiler\ResolveParameterPlaceHoldersPass;
19 use Symfony\Component\DependencyInjection\Definition;
20 use Symfony\Component\DependencyInjection\Reference;
21 use Symfony\Component\DependencyInjection\ContainerBuilder;
22
23 class RemoveUnusedDefinitionsPassTest extends TestCase
24 {
25     public function testProcess()
26     {
27         $container = new ContainerBuilder();
28         $container
29             ->register('foo')
30             ->setPublic(false)
31         ;
32         $container
33             ->register('bar')
34             ->setPublic(false)
35         ;
36         $container
37             ->register('moo')
38             ->setArguments(array(new Reference('bar')))
39         ;
40
41         $this->process($container);
42
43         $this->assertFalse($container->hasDefinition('foo'));
44         $this->assertTrue($container->hasDefinition('bar'));
45         $this->assertTrue($container->hasDefinition('moo'));
46     }
47
48     public function testProcessRemovesUnusedDefinitionsRecursively()
49     {
50         $container = new ContainerBuilder();
51         $container
52             ->register('foo')
53             ->setPublic(false)
54         ;
55         $container
56             ->register('bar')
57             ->setArguments(array(new Reference('foo')))
58             ->setPublic(false)
59         ;
60
61         $this->process($container);
62
63         $this->assertFalse($container->hasDefinition('foo'));
64         $this->assertFalse($container->hasDefinition('bar'));
65     }
66
67     public function testProcessWorksWithInlinedDefinitions()
68     {
69         $container = new ContainerBuilder();
70         $container
71             ->register('foo')
72             ->setPublic(false)
73         ;
74         $container
75             ->register('bar')
76             ->setArguments(array(new Definition(null, array(new Reference('foo')))))
77         ;
78
79         $this->process($container);
80
81         $this->assertTrue($container->hasDefinition('foo'));
82         $this->assertTrue($container->hasDefinition('bar'));
83     }
84
85     public function testProcessWontRemovePrivateFactory()
86     {
87         $container = new ContainerBuilder();
88
89         $container
90             ->register('foo', 'stdClass')
91             ->setFactory(array('stdClass', 'getInstance'))
92             ->setPublic(false);
93
94         $container
95             ->register('bar', 'stdClass')
96             ->setFactory(array(new Reference('foo'), 'getInstance'))
97             ->setPublic(false);
98
99         $container
100             ->register('foobar')
101             ->addArgument(new Reference('bar'));
102
103         $this->process($container);
104
105         $this->assertTrue($container->hasDefinition('foo'));
106         $this->assertTrue($container->hasDefinition('bar'));
107         $this->assertTrue($container->hasDefinition('foobar'));
108     }
109
110     public function testProcessConsiderEnvVariablesAsUsedEvenInPrivateServices()
111     {
112         $container = new ContainerBuilder();
113         $container->setParameter('env(FOOBAR)', 'test');
114         $container
115             ->register('foo')
116             ->setArguments(array('%env(FOOBAR)%'))
117             ->setPublic(false)
118         ;
119
120         $resolvePass = new ResolveParameterPlaceHoldersPass();
121         $resolvePass->process($container);
122
123         $this->process($container);
124
125         $this->assertFalse($container->hasDefinition('foo'));
126
127         $envCounters = $container->getEnvCounters();
128         $this->assertArrayHasKey('FOOBAR', $envCounters);
129         $this->assertSame(1, $envCounters['FOOBAR']);
130     }
131
132     protected function process(ContainerBuilder $container)
133     {
134         $repeatedPass = new RepeatedPass(array(new AnalyzeServiceReferencesPass(), new RemoveUnusedDefinitionsPass()));
135         $repeatedPass->process($container);
136     }
137 }