InlineServiceDefinitionsPassTest.php 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <?php
  2. namespace Symfony\Tests\Component\DependencyInjection\Compiler;
  3. use Symfony\Component\DependencyInjection\Compiler\InlineServiceDefinitionsPass;
  4. use Symfony\Component\DependencyInjection\Reference;
  5. use Symfony\Component\DependencyInjection\ContainerBuilder;
  6. class InlineServiceDefinitionsPassTest extends \PHPUnit_Framework_TestCase
  7. {
  8. public function testProcess()
  9. {
  10. $container = new ContainerBuilder();
  11. $container
  12. ->register('inlinable.service')
  13. ->setPublic(false)
  14. ;
  15. $container
  16. ->register('service')
  17. ->setArguments(array(new Reference('inlinable.service')))
  18. ;
  19. $this->process($container);
  20. $arguments = $container->getDefinition('service')->getArguments();
  21. $this->assertInstanceOf('Symfony\Component\DependencyInjection\Definition', $arguments[0]);
  22. $this->assertSame($container->getDefinition('inlinable.service'), $arguments[0]);
  23. }
  24. public function testProcessDoesNotInlinesWhenAliasedServiceIsNotShared()
  25. {
  26. $container = new ContainerBuilder();
  27. $container
  28. ->register('foo')
  29. ->setPublic(false)
  30. ;
  31. $container->setAlias('moo', 'foo');
  32. $container
  33. ->register('service')
  34. ->setArguments(array($ref = new Reference('foo')))
  35. ;
  36. $this->process($container);
  37. $arguments = $container->getDefinition('service')->getArguments();
  38. $this->assertSame($ref, $arguments[0]);
  39. }
  40. public function testProcessDoesInlineNonSharedService()
  41. {
  42. $container = new ContainerBuilder();
  43. $container
  44. ->register('foo')
  45. ->setShared(false)
  46. ;
  47. $container
  48. ->register('bar')
  49. ->setPublic(false)
  50. ->setShared(false)
  51. ;
  52. $container->setAlias('moo', 'bar');
  53. $container
  54. ->register('service')
  55. ->setArguments(array(new Reference('foo'), $ref = new Reference('moo'), new Reference('bar')))
  56. ;
  57. $this->process($container);
  58. $arguments = $container->getDefinition('service')->getArguments();
  59. $this->assertSame($container->getDefinition('foo'), $arguments[0]);
  60. $this->assertSame($ref, $arguments[1]);
  61. $this->assertSame($container->getDefinition('bar'), $arguments[2]);
  62. }
  63. protected function process(ContainerBuilder $container)
  64. {
  65. $pass = new InlineServiceDefinitionsPass();
  66. $pass->process($container);
  67. }
  68. }