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\Compiler\AnalyzeServiceReferencesPass;
16 use Symfony\Component\DependencyInjection\Compiler\RemoveUnusedDefinitionsPass;
17 use Symfony\Component\DependencyInjection\Compiler\RepeatedPass;
18 use Symfony\Component\DependencyInjection\Compiler\ResolveParameterPlaceHoldersPass;
19 use Symfony\Component\DependencyInjection\ContainerBuilder;
20 use Symfony\Component\DependencyInjection\Definition;
21 use Symfony\Component\DependencyInjection\Reference;
23 class RemoveUnusedDefinitionsPassTest extends TestCase
25 public function testProcess()
27 $container = new ContainerBuilder();
38 ->setArguments(array(new Reference('bar')))
41 $this->process($container);
43 $this->assertFalse($container->hasDefinition('foo'));
44 $this->assertTrue($container->hasDefinition('bar'));
45 $this->assertTrue($container->hasDefinition('moo'));
48 public function testProcessRemovesUnusedDefinitionsRecursively()
50 $container = new ContainerBuilder();
57 ->setArguments(array(new Reference('foo')))
61 $this->process($container);
63 $this->assertFalse($container->hasDefinition('foo'));
64 $this->assertFalse($container->hasDefinition('bar'));
67 public function testProcessWorksWithInlinedDefinitions()
69 $container = new ContainerBuilder();
76 ->setArguments(array(new Definition(null, array(new Reference('foo')))))
79 $this->process($container);
81 $this->assertTrue($container->hasDefinition('foo'));
82 $this->assertTrue($container->hasDefinition('bar'));
85 public function testProcessWontRemovePrivateFactory()
87 $container = new ContainerBuilder();
90 ->register('foo', 'stdClass')
91 ->setFactory(array('stdClass', 'getInstance'))
95 ->register('bar', 'stdClass')
96 ->setFactory(array(new Reference('foo'), 'getInstance'))
101 ->addArgument(new Reference('bar'));
103 $this->process($container);
105 $this->assertTrue($container->hasDefinition('foo'));
106 $this->assertTrue($container->hasDefinition('bar'));
107 $this->assertTrue($container->hasDefinition('foobar'));
110 public function testProcessConsiderEnvVariablesAsUsedEvenInPrivateServices()
112 $container = new ContainerBuilder();
113 $container->setParameter('env(FOOBAR)', 'test');
116 ->setArguments(array('%env(FOOBAR)%'))
120 $resolvePass = new ResolveParameterPlaceHoldersPass();
121 $resolvePass->process($container);
123 $this->process($container);
125 $this->assertFalse($container->hasDefinition('foo'));
127 $envCounters = $container->getEnvCounters();
128 $this->assertArrayHasKey('FOOBAR', $envCounters);
129 $this->assertSame(1, $envCounters['FOOBAR']);
132 protected function process(ContainerBuilder $container)
134 $repeatedPass = new RepeatedPass(array(new AnalyzeServiceReferencesPass(), new RemoveUnusedDefinitionsPass()));
135 $repeatedPass->process($container);