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
|
<?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\Bridge\Twig\Tests\NodeVisitor;
use PHPUnit\Framework\TestCase;
use Symfony\Bridge\Twig\NodeVisitor\TranslationNodeVisitor;
use Twig\Environment;
use Twig\Loader\LoaderInterface;
use Twig\Node\Expression\ArrayExpression;
use Twig\Node\Expression\ConstantExpression;
use Twig\Node\Expression\FilterExpression;
use Twig\Node\Expression\Variable\ContextVariable;
use Twig\Node\Node;
use Twig\Node\Nodes;
use Twig\TwigFilter;
class TranslationNodeVisitorTest extends TestCase
{
#[\PHPUnit\Framework\Attributes\DataProvider('getMessagesExtractionTestData')]
public function testMessagesExtraction(Node $node, array $expectedMessages)
{
$env = new Environment($this->createMock(LoaderInterface::class), ['cache' => false, 'autoescape' => false, 'optimizations' => 0]);
$visitor = new TranslationNodeVisitor();
$visitor->enable();
$visitor->enterNode($node, $env);
$visitor->leaveNode($node, $env);
$this->assertEquals($expectedMessages, $visitor->getMessages());
}
public function testMessageExtractionWithInvalidDomainNode()
{
$message = 'new key';
$n = new Nodes([
new ArrayExpression([], 0),
new ContextVariable('variable', 0),
]);
$node = new FilterExpression(
new ConstantExpression($message, 0),
new TwigFilter('trans'),
$n,
0
);
$this->testMessagesExtraction($node, [[$message, TranslationNodeVisitor::UNDEFINED_DOMAIN]]);
}
public static function getMessagesExtractionTestData()
{
$message = 'new key';
$domain = 'domain';
return [
[TwigNodeProvider::getTransFilter($message), [[$message, null]]],
[TwigNodeProvider::getTransTag($message), [[$message, null]]],
[TwigNodeProvider::getTransFilter($message, $domain), [[$message, $domain]]],
[TwigNodeProvider::getTransTag($message, $domain), [[$message, $domain]]],
];
}
}
|