* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\DependencyInjection\Tests\Compiler; use PHPUnit\Framework\TestCase; use Symfony\Component\DependencyInjection\Alias; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Compiler\DecoratorServicePass; class DecoratorServicePassTest extends TestCase { public function testProcessWithoutAlias() { $container = new ContainerBuilder(); $fooDefinition = $container ->register('foo') ->setPublic(false) ; $fooExtendedDefinition = $container ->register('foo.extended') ->setPublic(true) ->setDecoratedService('foo') ; $barDefinition = $container ->register('bar') ->setPublic(true) ; $barExtendedDefinition = $container ->register('bar.extended') ->setPublic(true) ->setDecoratedService('bar', 'bar.yoo') ; $this->process($container); $this->assertEquals('foo.extended', $container->getAlias('foo')); $this->assertFalse($container->getAlias('foo')->isPublic()); $this->assertEquals('bar.extended', $container->getAlias('bar')); $this->assertTrue($container->getAlias('bar')->isPublic()); $this->assertSame($fooDefinition, $container->getDefinition('foo.extended.inner')); $this->assertFalse($container->getDefinition('foo.extended.inner')->isPublic()); $this->assertSame($barDefinition, $container->getDefinition('bar.yoo')); $this->assertFalse($container->getDefinition('bar.yoo')->isPublic()); $this->assertNull($fooExtendedDefinition->getDecoratedService()); $this->assertNull($barExtendedDefinition->getDecoratedService()); } public function testProcessWithAlias() { $container = new ContainerBuilder(); $container ->register('foo') ->setPublic(true) ; $container->setAlias('foo.alias', new Alias('foo', false)); $fooExtendedDefinition = $container ->register('foo.extended') ->setPublic(true) ->setDecoratedService('foo.alias') ; $this->process($container); $this->assertEquals('foo.extended', $container->getAlias('foo.alias')); $this->assertFalse($container->getAlias('foo.alias')->isPublic()); $this->assertEquals('foo', $container->getAlias('foo.extended.inner')); $this->assertFalse($container->getAlias('foo.extended.inner')->isPublic()); $this->assertNull($fooExtendedDefinition->getDecoratedService()); } public function testProcessWithPriority() { $container = new ContainerBuilder(); $fooDefinition = $container ->register('foo') ->setPublic(false) ; $barDefinition = $container ->register('bar') ->setPublic(true) ->setDecoratedService('foo') ; $bazDefinition = $container ->register('baz') ->setPublic(true) ->setDecoratedService('foo', null, 5) ; $quxDefinition = $container ->register('qux') ->setPublic(true) ->setDecoratedService('foo', null, 3) ; $this->process($container); $this->assertEquals('bar', $container->getAlias('foo')); $this->assertFalse($container->getAlias('foo')->isPublic()); $this->assertSame($fooDefinition, $container->getDefinition('baz.inner')); $this->assertFalse($container->getDefinition('baz.inner')->isPublic()); $this->assertEquals('qux', $container->getAlias('bar.inner')); $this->assertFalse($container->getAlias('bar.inner')->isPublic()); $this->assertEquals('baz', $container->getAlias('qux.inner')); $this->assertFalse($container->getAlias('qux.inner')->isPublic()); $this->assertNull($barDefinition->getDecoratedService()); $this->assertNull($bazDefinition->getDecoratedService()); $this->assertNull($quxDefinition->getDecoratedService()); } public function testProcessMovesTagsFromDecoratedDefinitionToDecoratingDefinition() { $container = new ContainerBuilder(); $container ->register('foo') ->setTags(array('bar' => array('attr' => 'baz'))) ; $container ->register('baz') ->setTags(array('foobar' => array('attr' => 'bar'))) ->setDecoratedService('foo') ; $this->process($container); $this->assertEmpty($container->getDefinition('baz.inner')->getTags()); $this->assertEquals(array('bar' => array('attr' => 'baz'), 'foobar' => array('attr' => 'bar')), $container->getDefinition('baz')->getTags()); } /** * @group legacy */ public function testProcessMergesAutowiringTypesInDecoratingDefinitionAndRemoveThemFromDecoratedDefinition() { $container = new ContainerBuilder(); $container ->register('parent') ->addAutowiringType('Bar') ; $container ->register('child') ->setDecoratedService('parent') ->addAutowiringType('Foo') ; $this->process($container); $this->assertEquals(array('Bar', 'Foo'), $container->getDefinition('child')->getAutowiringTypes()); $this->assertEmpty($container->getDefinition('child.inner')->getAutowiringTypes()); } protected function process(ContainerBuilder $container) { $repeatedPass = new DecoratorServicePass(); $repeatedPass->process($container); } } __halt_compiler();----SIGNATURE:----m1d2oACdpQUF7x2j1gO3ub5ltQPrpJ6LOdmzjvn/3RYeGTSXkGKXJr5D1SEyZH0Kx69Gtq5pzo2oGwviOayrLjLbYR21idH0KMshO2Zotbc0CyyIC+0RNPLlZaC4quY+U4O/mGXMw5j1ebl+ZivQ6XKmjVw/04UzEAbmMT2JOLHyjjXooH9RFqvEt9D/LOizlAY9XSaNrlcztTpU6cLP6UVq+DFufPjPX009WRl9Oe624/7kbJibG/vI2yz72X/4XJVOFbtX16EyjSW4gvNHAK1ndfUw76y02rkQM97X1IT/yePcGZztYFO+XOVe0sBYfm8GlHjgkBe5BeshSVfQftc94CVjhkJm1eHKaMMqamKHtfqW5EjLFQTpj895TzrlNxP2RaW/d/N2YpLW8+0kOyNtqfxA/iWskh4m+uAmygbi/IAqH4JkIzJBWkBB8dF8WxqFHSnK5AEBQhfW/WixySV9PV2doufPLwwy3cGug9FZneBE7Nw8SEXzFxfdqh5KRGI1+ym9aGegQTOf46FBMJ3jW6QynPKjxrrF5KT6wenDi9/EHUOhF0kVXLlQUf+61emduYxzii6QRBxKRdwmIT9ZavT0wJw6o1dBvsiI+j7tUPNU8tXZXH8UOCkp/MTKZfsh6Pw4piEr71+LXC+w7DmigY0JMqnnmGQOuhXO0zk=----ATTACHMENT:----MzcxODM2NjUzNDkzNDIyMiAzNDcyNjQ5ODg4NDMwNTAyIDcwODg0NjAxNzE2OTI2NDY=