ResolveReferencesToAliasesPassTest.php 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <?php
  2. /*
  3. * This file is part of the Symfony package.
  4. *
  5. * (c) Fabien Potencier <fabien@symfony.com>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Symfony\Component\DependencyInjection\Tests\Compiler;
  11. use PHPUnit\Framework\TestCase;
  12. use Symfony\Component\DependencyInjection\Alias;
  13. use Symfony\Component\DependencyInjection\Definition;
  14. use Symfony\Component\DependencyInjection\Reference;
  15. use Symfony\Component\DependencyInjection\Compiler\ResolveReferencesToAliasesPass;
  16. use Symfony\Component\DependencyInjection\ContainerBuilder;
  17. class ResolveReferencesToAliasesPassTest extends TestCase
  18. {
  19. public function testProcess()
  20. {
  21. $container = new ContainerBuilder();
  22. $container->setAlias('bar', 'foo');
  23. $def = $container
  24. ->register('moo')
  25. ->setArguments(array(new Reference('bar')))
  26. ;
  27. $this->process($container);
  28. $arguments = $def->getArguments();
  29. $this->assertEquals('foo', (string) $arguments[0]);
  30. }
  31. public function testProcessRecursively()
  32. {
  33. $container = new ContainerBuilder();
  34. $container->setAlias('bar', 'foo');
  35. $container->setAlias('moo', 'bar');
  36. $def = $container
  37. ->register('foobar')
  38. ->setArguments(array(new Reference('moo')))
  39. ;
  40. $this->process($container);
  41. $arguments = $def->getArguments();
  42. $this->assertEquals('foo', (string) $arguments[0]);
  43. }
  44. /**
  45. * @expectedException \Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException
  46. */
  47. public function testAliasCircularReference()
  48. {
  49. $container = new ContainerBuilder();
  50. $container->setAlias('bar', 'foo');
  51. $container->setAlias('foo', 'bar');
  52. $this->process($container);
  53. }
  54. public function testResolveFactory()
  55. {
  56. $container = new ContainerBuilder();
  57. $container->register('factory', 'Factory');
  58. $container->setAlias('factory_alias', new Alias('factory'));
  59. $foo = new Definition();
  60. $foo->setFactory(array(new Reference('factory_alias'), 'createFoo'));
  61. $container->setDefinition('foo', $foo);
  62. $bar = new Definition();
  63. $bar->setFactory(array('Factory', 'createFoo'));
  64. $container->setDefinition('bar', $bar);
  65. $this->process($container);
  66. $resolvedFooFactory = $container->getDefinition('foo')->getFactory();
  67. $resolvedBarFactory = $container->getDefinition('bar')->getFactory();
  68. $this->assertSame('factory', (string) $resolvedFooFactory[0]);
  69. $this->assertSame('Factory', (string) $resolvedBarFactory[0]);
  70. }
  71. protected function process(ContainerBuilder $container)
  72. {
  73. $pass = new ResolveReferencesToAliasesPass();
  74. $pass->process($container);
  75. }
  76. }