ReplaceAliasByActualDefinitionPassTest.php 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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\Compiler\ReplaceAliasByActualDefinitionPass;
  13. use Symfony\Component\DependencyInjection\ContainerBuilder;
  14. use Symfony\Component\DependencyInjection\Definition;
  15. use Symfony\Component\DependencyInjection\Reference;
  16. require_once __DIR__.'/../Fixtures/includes/foo.php';
  17. class ReplaceAliasByActualDefinitionPassTest extends TestCase
  18. {
  19. public function testProcess()
  20. {
  21. $container = new ContainerBuilder();
  22. $aDefinition = $container->register('a', '\stdClass');
  23. $aDefinition->setFactory(array(new Reference('b'), 'createA'));
  24. $bDefinition = new Definition('\stdClass');
  25. $bDefinition->setPublic(false);
  26. $container->setDefinition('b', $bDefinition);
  27. $container->setAlias('a_alias', 'a');
  28. $container->setAlias('b_alias', 'b');
  29. $container->setAlias('container', 'service_container');
  30. $this->process($container);
  31. $this->assertTrue($container->has('a'), '->process() does nothing to public definitions.');
  32. $this->assertTrue($container->hasAlias('a_alias'));
  33. $this->assertFalse($container->has('b'), '->process() removes non-public definitions.');
  34. $this->assertTrue(
  35. $container->has('b_alias') && !$container->hasAlias('b_alias'),
  36. '->process() replaces alias to actual.'
  37. );
  38. $this->assertTrue($container->has('container'));
  39. $resolvedFactory = $aDefinition->getFactory();
  40. $this->assertSame('b_alias', (string) $resolvedFactory[0]);
  41. }
  42. /**
  43. * @expectedException \InvalidArgumentException
  44. */
  45. public function testProcessWithInvalidAlias()
  46. {
  47. $container = new ContainerBuilder();
  48. $container->setAlias('a_alias', 'a');
  49. $this->process($container);
  50. }
  51. protected function process(ContainerBuilder $container)
  52. {
  53. $pass = new ReplaceAliasByActualDefinitionPass();
  54. $pass->process($container);
  55. }
  56. }