CheckCircularReferencesPassTest.php 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <?php
  2. namespace Symfony\Tests\Component\DependencyInjection\Compiler;
  3. use Symfony\Component\DependencyInjection\Reference;
  4. use Symfony\Component\DependencyInjection\Compiler\CheckCircularReferencesPass;
  5. use Symfony\Component\DependencyInjection\Compiler\AnalyzeServiceReferencesPass;
  6. use Symfony\Component\DependencyInjection\Compiler\Compiler;
  7. use Symfony\Component\DependencyInjection\ContainerBuilder;
  8. class CheckCircularReferencesPassTest extends \PHPUnit_Framework_TestCase
  9. {
  10. /**
  11. * @expectedException \RuntimeException
  12. */
  13. public function testProcess()
  14. {
  15. $container = new ContainerBuilder();
  16. $container->register('a')->addArgument(new Reference('b'));
  17. $container->register('b')->addArgument(new Reference('a'));
  18. $this->process($container);
  19. }
  20. /**
  21. * @expectedException \RuntimeException
  22. */
  23. public function testProcessDetectsIndirectCircularReference()
  24. {
  25. $container = new ContainerBuilder();
  26. $container->register('a')->addArgument(new Reference('b'));
  27. $container->register('b')->addArgument(new Reference('c'));
  28. $container->register('c')->addArgument(new Reference('a'));
  29. $this->process($container);
  30. }
  31. public function testProcessIgnoresMethodCalls()
  32. {
  33. $container = new ContainerBuilder();
  34. $container->register('a')->addArgument(new Reference('b'));
  35. $container->register('b')->addMethodCall('setA', array(new Reference('a')));
  36. $this->process($container);
  37. }
  38. protected function process(ContainerBuilder $container)
  39. {
  40. $compiler = new Compiler();
  41. $passConfig = $compiler->getPassConfig();
  42. $passConfig->setOptimizationPasses(array(
  43. new AnalyzeServiceReferencesPass(true),
  44. new CheckCircularReferencesPass(),
  45. ));
  46. $passConfig->setRemovingPasses(array());
  47. $compiler->compile($container);
  48. }
  49. }