IntegrationTest.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <?php
  2. namespace Symfony\Tests\Component\DependencyInjection\Compiler;
  3. use Symfony\Component\DependencyInjection\Alias;
  4. use Symfony\Component\DependencyInjection\Reference;
  5. use Symfony\Component\DependencyInjection\ContainerBuilder;
  6. /**
  7. * This class tests the integration of the different compiler passes
  8. */
  9. class IntegrationTest extends \PHPUnit_Framework_TestCase
  10. {
  11. /**
  12. * This tests that the following dependencies are correctly processed:
  13. *
  14. * A is public, B/C are private
  15. * A -> C
  16. * B -> C
  17. */
  18. public function testProcessRemovesAndInlinesRecursively()
  19. {
  20. $container = new ContainerBuilder();
  21. $a = $container
  22. ->register('a')
  23. ->addArgument(new Reference('c'))
  24. ;
  25. $b = $container
  26. ->register('b')
  27. ->addArgument(new Reference('c'))
  28. ->setPublic(false)
  29. ;
  30. $c = $container
  31. ->register('c')
  32. ->setPublic(false)
  33. ;
  34. $container->compile();
  35. $this->assertTrue($container->hasDefinition('a'));
  36. $arguments = $a->getArguments();
  37. $this->assertSame($c, $arguments[0]);
  38. $this->assertFalse($container->hasDefinition('b'));
  39. $this->assertFalse($container->hasDefinition('c'));
  40. }
  41. public function testProcessInlinesReferencesToAliases()
  42. {
  43. $container = new ContainerBuilder();
  44. $a = $container
  45. ->register('a')
  46. ->addArgument(new Reference('b'))
  47. ;
  48. $container->setAlias('b', new Alias('c', false));
  49. $c = $container
  50. ->register('c')
  51. ->setPublic(false)
  52. ;
  53. $container->compile();
  54. $this->assertTrue($container->hasDefinition('a'));
  55. $arguments = $a->getArguments();
  56. $this->assertSame($c, $arguments[0]);
  57. $this->assertFalse($container->hasAlias('b'));
  58. $this->assertFalse($container->hasDefinition('c'));
  59. }
  60. public function testProcessInlinesWhenThereAreMultipleReferencesButFromTheSameDefinition()
  61. {
  62. $container = new ContainerBuilder();
  63. $container
  64. ->register('a')
  65. ->addArgument(new Reference('b'))
  66. ->addMethodCall('setC', array(new Reference('c')))
  67. ;
  68. $container
  69. ->register('b')
  70. ->addArgument(new Reference('c'))
  71. ->setPublic(false)
  72. ;
  73. $container
  74. ->register('c')
  75. ->setPublic(false)
  76. ;
  77. $container->compile();
  78. $this->assertTrue($container->hasDefinition('a'));
  79. $this->assertFalse($container->hasDefinition('b'));
  80. $this->assertFalse($container->hasDefinition('c'), 'Service C was not inlined.');
  81. }
  82. }