RemoveUnusedDefinitionsPassTest.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. namespace Symfony\Tests\Component\DependencyInjection\Compiler;
  3. use Symfony\Component\DependencyInjection\Compiler\AnalyzeServiceReferencesPass;
  4. use Symfony\Component\DependencyInjection\Compiler\Compiler;
  5. use Symfony\Component\DependencyInjection\Compiler\RepeatedPass;
  6. use Symfony\Component\DependencyInjection\Compiler\RemoveUnusedDefinitionsPass;
  7. use Symfony\Component\DependencyInjection\Definition;
  8. use Symfony\Component\DependencyInjection\Reference;
  9. use Symfony\Component\DependencyInjection\ContainerBuilder;
  10. class RemoveUnusedDefinitionsPassTest extends \PHPUnit_Framework_TestCase
  11. {
  12. public function testProcess()
  13. {
  14. $container = new ContainerBuilder();
  15. $container
  16. ->register('foo')
  17. ->setPublic(false)
  18. ;
  19. $container
  20. ->register('bar')
  21. ->setPublic(false)
  22. ;
  23. $container
  24. ->register('moo')
  25. ->setArguments(array(new Reference('bar')))
  26. ;
  27. $this->process($container);
  28. $this->assertFalse($container->hasDefinition('foo'));
  29. $this->assertTrue($container->hasDefinition('bar'));
  30. $this->assertTrue($container->hasDefinition('moo'));
  31. }
  32. public function testProcessRemovesUnusedDefinitionsRecursively()
  33. {
  34. $container = new ContainerBuilder();
  35. $container
  36. ->register('foo')
  37. ->setPublic(false)
  38. ;
  39. $container
  40. ->register('bar')
  41. ->setArguments(array(new Reference('foo')))
  42. ->setPublic(false)
  43. ;
  44. $this->process($container);
  45. $this->assertFalse($container->hasDefinition('foo'));
  46. $this->assertFalse($container->hasDefinition('bar'));
  47. }
  48. public function testProcessWorksWithInlinedDefinitions()
  49. {
  50. $container = new ContainerBuilder();
  51. $container
  52. ->register('foo')
  53. ->setPublic(false)
  54. ;
  55. $container
  56. ->register('bar')
  57. ->setArguments(array(new Definition(null, array(new Reference('foo')))))
  58. ;
  59. $this->process($container);
  60. $this->assertTrue($container->hasDefinition('foo'));
  61. $this->assertTrue($container->hasDefinition('bar'));
  62. }
  63. protected function process(ContainerBuilder $container)
  64. {
  65. $repeatedPass = new RepeatedPass(array(new AnalyzeServiceReferencesPass(), new RemoveUnusedDefinitionsPass()));
  66. $repeatedPass->setCompiler(new Compiler());
  67. $repeatedPass->process($container);
  68. }
  69. }