* * 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:----F7aGP24o+qzNy/YtQI45eydCex38Utj5zSduZrykPoWY6E3p7njJ/AlNRrkjs3f6vzTbOB/xsLbjlSKbDXloP1FiEqY9ZXuAJun1YcGBzdtQa7/rhbRJIWtn/wJdI5f2l7xBU+bzWvU4yCq6u9X2gYSaFmoZ3PE+SiIJo5Om/qAP1PpLX1g4/iRRjKukVfG3rIEoFChZZoLVICdmFPzfrOZCIcwzTciU4DJtqnq58YXfjXsgCTAwsHQaIkjOUZJbRbEmWBQIo+O6Yu2xgBhumEhHDPNW2fAECFkz6uZKplwPBfd3y+mNynwMCslIFN8L7re2+QL2YHyRso2K9Qnh1REnSQiqsM3xbUcETHZ9X6INZCFPtdQ8LwIODF90QcbwYjxgM8zPFTpM0zDQ5CZvWUY0nWbGbMfPJCHbPgxgHHuZQFSUlHML131cjguyeYZ3ap/3Q/1A4t1LMW9aqLBcgofFN5H62wKbDS5sNEiNpirYvLLk/eQzX3r/wvUUjITtr+ZoFbnA3nn90y4LcK4MheWgqopLO0K9dFg/ZWNaqw/6tHLaPZmnBfvPZZk3nMfVrOfBrJRZueK1B+mBpgSZxGw3PeN0RwxcwFDgqKW99BxfcPhVACiL9IB6Ijowxb1QFh4LS05H5Tm5gvwAFHQALE7HaM3ftjL/YXKn/86Z2KE=----ATTACHMENT:----OTIyNTY3MDY3MDgyMzU5MyA3NDY4OTU3MDI1NjI5NzU1IDM5MzcyOTgxNzE0MjA1MjU=