1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
|
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\Compiler;
use PHPUnit\Framework\TestCase;
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\DataCollectorTranslatorPass;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Reference;
use Symfony\Component\Translation\DataCollector\TranslationDataCollector;
use Symfony\Component\Translation\DataCollectorTranslator;
use Symfony\Component\Translation\Translator;
use Symfony\Contracts\Translation\TranslatorInterface;
#[\PHPUnit\Framework\Attributes\Group('legacy')]
class DataCollectorTranslatorPassTest extends TestCase
{
private ContainerBuilder $container;
private DataCollectorTranslatorPass $dataCollectorTranslatorPass;
protected function setUp(): void
{
$this->container = new ContainerBuilder();
$this->dataCollectorTranslatorPass = new DataCollectorTranslatorPass();
$this->container->setParameter('translator_implementing_bag', Translator::class);
$this->container->setParameter('translator_not_implementing_bag', 'Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\Compiler\TranslatorWithTranslatorBag');
$this->container->register('translator.data_collector', DataCollectorTranslator::class)
->setDecoratedService('translator')
->setArguments([new Reference('translator.data_collector.inner')])
;
$this->container->register('data_collector.translation', TranslationDataCollector::class)
->setArguments([new Reference('translator.data_collector')])
;
}
#[\PHPUnit\Framework\Attributes\DataProvider('getImplementingTranslatorBagInterfaceTranslatorClassNames')]
public function testProcessKeepsDataCollectorTranslatorIfItImplementsTranslatorBagInterface($class)
{
$this->container->register('translator', $class);
$this->dataCollectorTranslatorPass->process($this->container);
$this->assertTrue($this->container->hasDefinition('translator.data_collector'));
}
#[\PHPUnit\Framework\Attributes\DataProvider('getImplementingTranslatorBagInterfaceTranslatorClassNames')]
public function testProcessKeepsDataCollectorIfTranslatorImplementsTranslatorBagInterface($class)
{
$this->container->register('translator', $class);
$this->dataCollectorTranslatorPass->process($this->container);
$this->assertTrue($this->container->hasDefinition('data_collector.translation'));
}
public static function getImplementingTranslatorBagInterfaceTranslatorClassNames()
{
return [
[Translator::class],
['%translator_implementing_bag%'],
];
}
#[\PHPUnit\Framework\Attributes\DataProvider('getNotImplementingTranslatorBagInterfaceTranslatorClassNames')]
public function testProcessRemovesDataCollectorTranslatorIfItDoesNotImplementTranslatorBagInterface($class)
{
$this->container->register('translator', $class);
$this->dataCollectorTranslatorPass->process($this->container);
$this->assertFalse($this->container->hasDefinition('translator.data_collector'));
}
#[\PHPUnit\Framework\Attributes\DataProvider('getNotImplementingTranslatorBagInterfaceTranslatorClassNames')]
public function testProcessRemovesDataCollectorIfTranslatorDoesNotImplementTranslatorBagInterface($class)
{
$this->container->register('translator', $class);
$this->dataCollectorTranslatorPass->process($this->container);
$this->assertFalse($this->container->hasDefinition('data_collector.translation'));
}
public static function getNotImplementingTranslatorBagInterfaceTranslatorClassNames()
{
return [
['Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\Compiler\TranslatorWithTranslatorBag'],
['%translator_not_implementing_bag%'],
];
}
}
class TranslatorWithTranslatorBag implements TranslatorInterface
{
public function trans(string $id, array $parameters = [], ?string $domain = null, ?string $locale = null): string
{
}
public function getLocale(): string
{
return 'en';
}
}
|