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/ReplaceAliasByActualDefinitionPassTest.php

94 lines
2.9 KiB
PHP
Raw Normal View History

<?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 Symfony\Component\DependencyInjection\Compiler\ReplaceAliasByActualDefinitionPass;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Reference;
require_once __DIR__.'/../Fixtures/includes/foo.php';
class ReplaceAliasByActualDefinitionPassTest extends \PHPUnit_Framework_TestCase
{
public function testProcess()
{
$container = new ContainerBuilder();
2016-02-20 19:14:11 +00:00
$aDefinition = $container->register('a', '\stdClass');
2016-02-23 19:37:29 +00:00
$aDefinition->setFactoryService('b', false);
$aDefinition->setFactory(array(new Reference('b'), 'createA'));
$bDefinition = new Definition('\stdClass');
$bDefinition->setPublic(false);
$container->setDefinition('b', $bDefinition);
$container->setAlias('a_alias', 'a');
$container->setAlias('b_alias', 'b');
$container->setAlias('container', 'service_container');
$this->process($container);
$this->assertTrue($container->has('a'), '->process() does nothing to public definitions.');
$this->assertTrue($container->hasAlias('a_alias'));
$this->assertFalse($container->has('b'), '->process() removes non-public definitions.');
$this->assertTrue(
$container->has('b_alias') && !$container->hasAlias('b_alias'),
'->process() replaces alias to actual.'
);
2016-02-23 19:37:29 +00:00
$this->assertSame('b_alias', $aDefinition->getFactoryService(false));
$this->assertTrue($container->has('container'));
2016-07-28 12:36:19 +01:00
$resolvedFactory = $aDefinition->getFactory();
$this->assertSame('b_alias', (string) $resolvedFactory[0]);
}
/**
* @group legacy
*/
public function testPrivateAliasesInFactory()
{
$container = new ContainerBuilder();
2016-02-28 16:34:40 +00:00
$container->register('a', 'Bar\FooClass');
$container->register('b', 'Bar\FooClass')
->setFactoryService('a')
->setFactoryMethod('getInstance');
$container->register('c', 'stdClass')->setPublic(false);
$container->setAlias('c_alias', 'c');
$this->process($container);
2016-02-28 16:34:40 +00:00
$this->assertInstanceOf('Bar\FooClass', $container->get('b'));
}
/**
* @expectedException \InvalidArgumentException
*/
public function testProcessWithInvalidAlias()
{
$container = new ContainerBuilder();
$container->setAlias('a_alias', 'a');
$this->process($container);
}
protected function process(ContainerBuilder $container)
{
$pass = new ReplaceAliasByActualDefinitionPass();
$pass->process($container);
}
}