CheckCircularReferencesPassTest.php in Service Container 7
File
modules/providers/service_container_symfony/lib/Symfony/Component/DependencyInjection/Tests/Compiler/CheckCircularReferencesPassTest.php
View source
<?php
namespace Symfony\Component\DependencyInjection\Tests\Compiler;
use Symfony\Component\DependencyInjection\Reference;
use Symfony\Component\DependencyInjection\Compiler\CheckCircularReferencesPass;
use Symfony\Component\DependencyInjection\Compiler\AnalyzeServiceReferencesPass;
use Symfony\Component\DependencyInjection\Compiler\Compiler;
use Symfony\Component\DependencyInjection\ContainerBuilder;
class CheckCircularReferencesPassTest extends \PHPUnit_Framework_TestCase {
public function testProcess() {
$container = new ContainerBuilder();
$container
->register('a')
->addArgument(new Reference('b'));
$container
->register('b')
->addArgument(new Reference('a'));
$this
->process($container);
}
public function testProcessWithAliases() {
$container = new ContainerBuilder();
$container
->register('a')
->addArgument(new Reference('b'));
$container
->setAlias('b', 'c');
$container
->setAlias('c', 'a');
$this
->process($container);
}
public function testProcessWithFactory() {
$container = new ContainerBuilder();
$container
->register('a', 'stdClass')
->setFactory(array(
new Reference('b'),
'getInstance',
));
$container
->register('b', 'stdClass')
->setFactory(array(
new Reference('a'),
'getInstance',
));
$this
->process($container);
}
public function testProcessDetectsIndirectCircularReference() {
$container = new ContainerBuilder();
$container
->register('a')
->addArgument(new Reference('b'));
$container
->register('b')
->addArgument(new Reference('c'));
$container
->register('c')
->addArgument(new Reference('a'));
$this
->process($container);
}
public function testProcessDetectsIndirectCircularReferenceWithFactory() {
$container = new ContainerBuilder();
$container
->register('a')
->addArgument(new Reference('b'));
$container
->register('b', 'stdClass')
->setFactory(array(
new Reference('c'),
'getInstance',
));
$container
->register('c')
->addArgument(new Reference('a'));
$this
->process($container);
}
public function testDeepCircularReference() {
$container = new ContainerBuilder();
$container
->register('a')
->addArgument(new Reference('b'));
$container
->register('b')
->addArgument(new Reference('c'));
$container
->register('c')
->addArgument(new Reference('b'));
$this
->process($container);
}
public function testProcessIgnoresMethodCalls() {
$container = new ContainerBuilder();
$container
->register('a')
->addArgument(new Reference('b'));
$container
->register('b')
->addMethodCall('setA', array(
new Reference('a'),
));
$this
->process($container);
}
protected function process(ContainerBuilder $container) {
$compiler = new Compiler();
$passConfig = $compiler
->getPassConfig();
$passConfig
->setOptimizationPasses(array(
new AnalyzeServiceReferencesPass(true),
new CheckCircularReferencesPass(),
));
$passConfig
->setRemovingPasses(array());
$compiler
->compile($container);
}
}