This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
symfony/src/Symfony/Component/DependencyInjection/Tests/Compiler/RemoveUnusedDefinitionsPassTest.php

150 lines
4.3 KiB
PHP
Raw Normal View History

2011-01-05 11:13:27 +00:00
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Tests\Compiler;
2011-01-05 11:13:27 +00:00
2017-02-08 07:24:27 +00:00
use PHPUnit\Framework\TestCase;
2011-01-05 11:13:27 +00:00
use Symfony\Component\DependencyInjection\Compiler\RemoveUnusedDefinitionsPass;
use Symfony\Component\DependencyInjection\Compiler\ResolveParameterPlaceHoldersPass;
2018-07-26 10:03:18 +01:00
use Symfony\Component\DependencyInjection\ContainerBuilder;
2011-01-05 11:13:27 +00:00
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Reference;
2017-02-08 07:24:27 +00:00
class RemoveUnusedDefinitionsPassTest extends TestCase
2011-01-05 11:13:27 +00:00
{
public function testProcess()
{
$container = new ContainerBuilder();
$container
->register('foo')
->setPublic(false)
;
$container
->register('bar')
->setPublic(false)
;
$container
->register('moo')
2019-01-16 20:35:37 +00:00
->setArguments([new Reference('bar')])
2011-01-05 11:13:27 +00:00
;
$this->process($container);
$this->assertFalse($container->hasDefinition('foo'));
$this->assertTrue($container->hasDefinition('bar'));
$this->assertTrue($container->hasDefinition('moo'));
}
public function testProcessRemovesUnusedDefinitionsRecursively()
{
$container = new ContainerBuilder();
$container
->register('foo')
->setPublic(false)
;
$container
->register('bar')
2019-01-16 20:35:37 +00:00
->setArguments([new Reference('foo')])
2011-01-05 11:13:27 +00:00
->setPublic(false)
;
$this->process($container);
$this->assertFalse($container->hasDefinition('foo'));
$this->assertFalse($container->hasDefinition('bar'));
}
public function testProcessWorksWithInlinedDefinitions()
{
$container = new ContainerBuilder();
$container
->register('foo')
->setPublic(false)
;
$container
->register('bar')
2019-01-16 20:35:37 +00:00
->setArguments([new Definition(null, [new Reference('foo')])])
2011-01-05 11:13:27 +00:00
;
$this->process($container);
$this->assertTrue($container->hasDefinition('foo'));
$this->assertTrue($container->hasDefinition('bar'));
}
public function testProcessWontRemovePrivateFactory()
{
$container = new ContainerBuilder();
$container
->register('foo', 'stdClass')
2019-01-16 20:35:37 +00:00
->setFactory(['stdClass', 'getInstance'])
->setPublic(false);
$container
->register('bar', 'stdClass')
2019-01-16 20:35:37 +00:00
->setFactory([new Reference('foo'), 'getInstance'])
->setPublic(false);
$container
->register('foobar')
->addArgument(new Reference('bar'));
$this->process($container);
$this->assertTrue($container->hasDefinition('foo'));
$this->assertTrue($container->hasDefinition('bar'));
$this->assertTrue($container->hasDefinition('foobar'));
}
public function testProcessConsiderEnvVariablesAsUsedEvenInPrivateServices()
{
$container = new ContainerBuilder();
$container->setParameter('env(FOOBAR)', 'test');
$container
->register('foo')
2019-01-16 20:35:37 +00:00
->setArguments(['%env(FOOBAR)%'])
->setPublic(false)
;
$resolvePass = new ResolveParameterPlaceHoldersPass();
$resolvePass->process($container);
$this->process($container);
$this->assertFalse($container->hasDefinition('foo'));
$envCounters = $container->getEnvCounters();
$this->assertArrayHasKey('FOOBAR', $envCounters);
$this->assertSame(1, $envCounters['FOOBAR']);
}
public function testProcessDoesNotErrorOnServicesThatDoNotHaveDefinitions()
{
$container = new ContainerBuilder();
$container
->register('defined')
->addArgument(new Reference('not.defined'))
->setPublic(true);
$container->set('not.defined', new \StdClass());
$this->process($container);
$this->assertFalse($container->hasDefinition('not.defined'));
}
2011-01-05 11:13:27 +00:00
protected function process(ContainerBuilder $container)
{
(new RemoveUnusedDefinitionsPass())->process($container);
2011-01-05 11:13:27 +00:00
}
2011-06-08 18:56:59 +01:00
}