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->setFactory(array(new Reference('b'), 'createA'));
31 $bDefinition = new Definition('\stdClass');
32 $bDefinition->setPublic(false);
33 $container->setDefinition('b', $bDefinition);
35 $container->setAlias('a_alias', 'a');
36 $container->setAlias('b_alias', 'b');
38 $container->setAlias('container', 'service_container');
40 $this->process($container);
42 $this->assertTrue($container->has('a'), '->process() does nothing to public definitions.');
43 $this->assertTrue($container->hasAlias('a_alias'));
44 $this->assertFalse($container->has('b'), '->process() removes non-public definitions.');
46 $container->has('b_alias') && !$container->hasAlias('b_alias'),
47 '->process() replaces alias to actual.'
50 $this->assertTrue($container->has('container'));
52 $resolvedFactory = $aDefinition->getFactory();
53 $this->assertSame('b_alias', (string) $resolvedFactory[0]);
57 * @expectedException \InvalidArgumentException
59 public function testProcessWithInvalidAlias()
61 $container = new ContainerBuilder();
62 $container->setAlias('a_alias', 'a');
63 $this->process($container);
66 protected function process(ContainerBuilder $container)
68 $pass = new ReplaceAliasByActualDefinitionPass();
69 $pass->process($container);