AnalyzeServiceReferencesPassTest.php 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <?php
  2. namespace Symfony\Tests\Component\DependencyInjection\Compiler;
  3. use Symfony\Component\DependencyInjection\Definition;
  4. use Symfony\Component\DependencyInjection\Compiler\Compiler;
  5. use Symfony\Component\DependencyInjection\Compiler\AnalyzeServiceReferencesPass;
  6. use Symfony\Component\DependencyInjection\Compiler\RepeatedPass;
  7. use Symfony\Component\DependencyInjection\Reference;
  8. use Symfony\Component\DependencyInjection\ContainerBuilder;
  9. class AnalyzeServiceReferencesPassTest extends \PHPUnit_Framework_TestCase
  10. {
  11. public function testProcess()
  12. {
  13. $container = new ContainerBuilder();
  14. $a = $container
  15. ->register('a')
  16. ->addArgument($ref1 = new Reference('b'))
  17. ;
  18. $b = $container
  19. ->register('b')
  20. ->addMethodCall('setA', array($ref2 = new Reference('a')))
  21. ;
  22. $c = $container
  23. ->register('c')
  24. ->addArgument($ref3 = new Reference('a'))
  25. ->addArgument($ref4 = new Reference('b'))
  26. ;
  27. $graph = $this->process($container);
  28. $this->assertEquals(2, count($edges = $graph->getNode('b')->getInEdges()));
  29. $this->assertSame($ref1, $edges[0]->getValue());
  30. $this->assertSame($ref4, $edges[1]->getValue());
  31. }
  32. public function testProcessDetectsReferencesFromInlinedDefinitions()
  33. {
  34. $container = new ContainerBuilder();
  35. $container
  36. ->register('a')
  37. ;
  38. $container
  39. ->register('b')
  40. ->addArgument(new Definition(null, array($ref = new Reference('a'))))
  41. ;
  42. $graph = $this->process($container);
  43. $this->assertEquals(1, count($refs = $graph->getNode('a')->getInEdges()));
  44. $this->assertSame($ref, $refs[0]->getValue());
  45. }
  46. public function testProcessDoesNotSaveDuplicateReferences()
  47. {
  48. $container = new ContainerBuilder();
  49. $container
  50. ->register('a')
  51. ;
  52. $container
  53. ->register('b')
  54. ->addArgument(new Definition(null, array($ref1 = new Reference('a'))))
  55. ->addArgument(new Definition(null, array($ref2 = new Reference('a'))))
  56. ;
  57. $graph = $this->process($container);
  58. $this->assertEquals(2, count($graph->getNode('a')->getInEdges()));
  59. }
  60. protected function process(ContainerBuilder $container)
  61. {
  62. $pass = new RepeatedPass(array(new AnalyzeServiceReferencesPass()));
  63. $pass->setCompiler($compiler = new Compiler());
  64. $pass->process($container);
  65. return $compiler->getServiceReferenceGraph();
  66. }
  67. }