From 37ce682947de6abc42006aefc98a1900c058339e Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Mon, 20 Feb 2017 09:01:13 +0100 Subject: [PATCH] resolve parameters in definition classes --- .../Compiler/DataCollectorTranslatorPass.php | 2 +- .../DataCollectorTranslatorPassTest.php | 47 +++++++++++++++---- 2 files changed, 40 insertions(+), 9 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/DataCollectorTranslatorPass.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/DataCollectorTranslatorPass.php index 04a57a2e9572..ee2bbb6521b1 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/DataCollectorTranslatorPass.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/DataCollectorTranslatorPass.php @@ -25,7 +25,7 @@ public function process(ContainerBuilder $container) return; } - $translatorClass = $container->findDefinition('translator')->getClass(); + $translatorClass = $container->getParameterBag()->resolveValue($container->findDefinition('translator')->getClass()); if (!is_subclass_of($translatorClass, 'Symfony\Component\Translation\TranslatorBagInterface')) { $container->removeDefinition('translator.data_collector'); diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Compiler/DataCollectorTranslatorPassTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Compiler/DataCollectorTranslatorPassTest.php index 813fb9f6028d..22a661eb183f 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Compiler/DataCollectorTranslatorPassTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Compiler/DataCollectorTranslatorPassTest.php @@ -26,6 +26,9 @@ protected function setUp() $this->container = new ContainerBuilder(); $this->dataCollectorTranslatorPass = new DataCollectorTranslatorPass(); + $this->container->setParameter('translator_implementing_bag', 'Symfony\Component\Translation\Translator'); + $this->container->setParameter('translator_not_implementing_bag', 'Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\Compiler\TranslatorWithTranslatorBag'); + $this->container->register('translator.data_collector', 'Symfony\Component\Translation\DataCollectorTranslator') ->setPublic(false) ->setDecoratedService('translator') @@ -37,41 +40,69 @@ protected function setUp() ; } - public function testProcessKeepsDataCollectorTranslatorIfItImplementsTranslatorBagInterface() + /** + * @dataProvider getImplementingTranslatorBagInterfaceTranslatorClassNames + */ + public function testProcessKeepsDataCollectorTranslatorIfItImplementsTranslatorBagInterface($class) { - $this->container->register('translator', 'Symfony\Component\Translation\Translator'); + $this->container->register('translator', $class); $this->dataCollectorTranslatorPass->process($this->container); $this->assertTrue($this->container->hasDefinition('translator.data_collector')); } - public function testProcessKeepsDataCollectorIfTranslatorImplementsTranslatorBagInterface() + /** + * @dataProvider getImplementingTranslatorBagInterfaceTranslatorClassNames + */ + public function testProcessKeepsDataCollectorIfTranslatorImplementsTranslatorBagInterface($class) { - $this->container->register('translator', 'Symfony\Component\Translation\Translator'); + $this->container->register('translator', $class); $this->dataCollectorTranslatorPass->process($this->container); $this->assertTrue($this->container->hasDefinition('data_collector.translation')); } - public function testProcessRemovesDataCollectorTranslatorIfItDoesNotImplementTranslatorBagInterface() + public function getImplementingTranslatorBagInterfaceTranslatorClassNames() + { + return array( + array('Symfony\Component\Translation\Translator'), + array('%translator_implementing_bag%'), + ); + } + + /** + * @dataProvider getNotImplementingTranslatorBagInterfaceTranslatorClassNames + */ + public function testProcessRemovesDataCollectorTranslatorIfItDoesNotImplementTranslatorBagInterface($class) { - $this->container->register('translator', 'Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\Compiler\TranslatorWithTranslatorBag'); + $this->container->register('translator', $class); $this->dataCollectorTranslatorPass->process($this->container); $this->assertFalse($this->container->hasDefinition('translator.data_collector')); } - public function testProcessRemovesDataCollectorIfTranslatorDoesNotImplementTranslatorBagInterface() + /** + * @dataProvider getNotImplementingTranslatorBagInterfaceTranslatorClassNames + */ + public function testProcessRemovesDataCollectorIfTranslatorDoesNotImplementTranslatorBagInterface($class) { - $this->container->register('translator', 'Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\Compiler\TranslatorWithTranslatorBag'); + $this->container->register('translator', $class); $this->dataCollectorTranslatorPass->process($this->container); $this->assertFalse($this->container->hasDefinition('data_collector.translation')); } + + public function getNotImplementingTranslatorBagInterfaceTranslatorClassNames() + { + return array( + array('Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\Compiler\TranslatorWithTranslatorBag'), + array('%translator_not_implementing_bag%'), + ); + } } class TranslatorWithTranslatorBag implements TranslatorInterface