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\ReplaceAliasByActualDefinitionPass;
16 use Symfony\Component\DependencyInjection\ContainerBuilder;
17 use Symfony\Component\DependencyInjection\Definition;
18 use Symfony\Component\DependencyInjection\Reference;
20 require_once __DIR__.'/../Fixtures/includes/foo.php';
22 class ReplaceAliasByActualDefinitionPassTest extends TestCase
24 public function testProcess()
26 $container = new ContainerBuilder();
28 $aDefinition = $container->register('a', '\stdClass');
29 $aDefinition->setFactoryService('b', false);
31 $aDefinition->setFactory(array(new Reference('b'), 'createA'));
33 $bDefinition = new Definition('\stdClass');
34 $bDefinition->setPublic(false);
35 $container->setDefinition('b', $bDefinition);
37 $container->setAlias('a_alias', 'a');
38 $container->setAlias('b_alias', 'b');
40 $container->setAlias('container', 'service_container');
42 $this->process($container);
44 $this->assertTrue($container->has('a'), '->process() does nothing to public definitions.');
45 $this->assertTrue($container->hasAlias('a_alias'));
46 $this->assertFalse($container->has('b'), '->process() removes non-public definitions.');
48 $container->has('b_alias') && !$container->hasAlias('b_alias'),
49 '->process() replaces alias to actual.'
52 $this->assertSame('b_alias', $aDefinition->getFactoryService(false));
53 $this->assertTrue($container->has('container'));
55 $resolvedFactory = $aDefinition->getFactory();
56 $this->assertSame('b_alias', (string) $resolvedFactory[0]);
62 public function testPrivateAliasesInFactory()
64 $container = new ContainerBuilder();
66 $container->register('a', 'Bar\FooClass');
67 $container->register('b', 'Bar\FooClass')
68 ->setFactoryService('a')
69 ->setFactoryMethod('getInstance');
71 $container->register('c', 'stdClass')->setPublic(false);
72 $container->setAlias('c_alias', 'c');
74 $this->process($container);
76 $this->assertInstanceOf('Bar\FooClass', $container->get('b'));
80 * @expectedException \InvalidArgumentException
82 public function testProcessWithInvalidAlias()
84 $container = new ContainerBuilder();
85 $container->setAlias('a_alias', 'a');
86 $this->process($container);
89 protected function process(ContainerBuilder $container)
91 $pass = new ReplaceAliasByActualDefinitionPass();
92 $pass->process($container);