RemoveUnusedDefinitionsPassTest.php 2.3 KB

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