123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- <?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;
- use PHPUnit\Framework\TestCase;
- use Symfony\Component\DependencyInjection\Alias;
- use Symfony\Component\DependencyInjection\ContainerBuilder;
- use Symfony\Component\DependencyInjection\Reference;
- /**
- * This class tests the integration of the different compiler passes.
- */
- class IntegrationTest extends TestCase
- {
- /**
- * This tests that dependencies are correctly processed.
- *
- * We're checking that:
- *
- * * A is public, B/C are private
- * * A -> C
- * * B -> C
- */
- public function testProcessRemovesAndInlinesRecursively()
- {
- $container = new ContainerBuilder();
- $container->setResourceTracking(false);
- $a = $container
- ->register('a', '\stdClass')
- ->addArgument(new Reference('c'))
- ;
- $b = $container
- ->register('b', '\stdClass')
- ->addArgument(new Reference('c'))
- ->setPublic(false)
- ;
- $c = $container
- ->register('c', '\stdClass')
- ->setPublic(false)
- ;
- $container->compile();
- $this->assertTrue($container->hasDefinition('a'));
- $arguments = $a->getArguments();
- $this->assertSame($c, $arguments[0]);
- $this->assertFalse($container->hasDefinition('b'));
- $this->assertFalse($container->hasDefinition('c'));
- }
- public function testProcessInlinesReferencesToAliases()
- {
- $container = new ContainerBuilder();
- $container->setResourceTracking(false);
- $a = $container
- ->register('a', '\stdClass')
- ->addArgument(new Reference('b'))
- ;
- $container->setAlias('b', new Alias('c', false));
- $c = $container
- ->register('c', '\stdClass')
- ->setPublic(false)
- ;
- $container->compile();
- $this->assertTrue($container->hasDefinition('a'));
- $arguments = $a->getArguments();
- $this->assertSame($c, $arguments[0]);
- $this->assertFalse($container->hasAlias('b'));
- $this->assertFalse($container->hasDefinition('c'));
- }
- public function testProcessInlinesWhenThereAreMultipleReferencesButFromTheSameDefinition()
- {
- $container = new ContainerBuilder();
- $container->setResourceTracking(false);
- $container
- ->register('a', '\stdClass')
- ->addArgument(new Reference('b'))
- ->addMethodCall('setC', array(new Reference('c')))
- ;
- $container
- ->register('b', '\stdClass')
- ->addArgument(new Reference('c'))
- ->setPublic(false)
- ;
- $container
- ->register('c', '\stdClass')
- ->setPublic(false)
- ;
- $container->compile();
- $this->assertTrue($container->hasDefinition('a'));
- $this->assertFalse($container->hasDefinition('b'));
- $this->assertFalse($container->hasDefinition('c'), 'Service C was not inlined.');
- }
- }
|