mirror of
https://github.com/twigphp/Twig.git
synced 2026-08-29 03:26:56 +00:00
0c6bd47d6b
* 3.x: Deprecate using Node directly, introduce EmptyNode and Nodes Add support for inline comments Update plural.rst: Fixing(?) broken links Fix CS Add support for accessing class constants with the dot operator Fix getting a property on an object casted to an array Replace strtr() by strtolower() Improve escape deprecation message Remove useless assign in compiled code Add fixture filename as key Be more precise about double-escaping Fix template name in error for an unknown dynamic extends called from an include
127 lines
3.9 KiB
PHP
127 lines
3.9 KiB
PHP
<?php
|
|
|
|
namespace Twig\Tests\Node;
|
|
|
|
/*
|
|
* This file is part of Twig.
|
|
*
|
|
* (c) Fabien Potencier
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
use PHPUnit\Framework\Attributes\IgnoreDeprecations;
|
|
use PHPUnit\Framework\TestCase;
|
|
use Twig\Node\NameDeprecation;
|
|
use Twig\Node\Node;
|
|
use Twig\TwigFilter;
|
|
use Twig\TwigFunction;
|
|
use Twig\TwigTest;
|
|
|
|
class NodeTest extends TestCase
|
|
{
|
|
public function testToString()
|
|
{
|
|
// callable is not a supported type for a Node attribute, but Drupal uses some apparently
|
|
$node = new NodeForTest([], ['value' => function () { return '1'; }], 1);
|
|
|
|
$this->assertEquals(<<<EOF
|
|
Twig\Tests\Node\NodeForTest
|
|
attributes:
|
|
value: \Closure
|
|
EOF
|
|
, (string) $node
|
|
);
|
|
}
|
|
|
|
public function testToStringWithTwigCallables()
|
|
{
|
|
$node = new NodeForTest([], [
|
|
'function' => new TwigFunction('a_function'),
|
|
'filter' => new TwigFilter('a_filter'),
|
|
'test' => new TwigTest('a_test'),
|
|
], 1);
|
|
|
|
$this->assertEquals(<<<EOF
|
|
Twig\Tests\Node\NodeForTest
|
|
attributes:
|
|
function: Twig\TwigFunction(a_function)
|
|
filter: Twig\TwigFilter(a_filter)
|
|
test: Twig\TwigTest(a_test)
|
|
EOF
|
|
, (string) $node);
|
|
}
|
|
|
|
public function testToStringWithTag()
|
|
{
|
|
$node = new NodeForTest();
|
|
$node->setNodeTag('tag');
|
|
|
|
$this->assertEquals(<<<EOF
|
|
Twig\Tests\Node\NodeForTest
|
|
tag: tag
|
|
EOF
|
|
, (string) $node);
|
|
}
|
|
|
|
public function testAttributeDeprecationIgnore()
|
|
{
|
|
$node = new NodeForTest([], ['foo' => false]);
|
|
$node->deprecateAttribute('foo', new NameDeprecation('foo/bar', '2.0', 'bar'));
|
|
|
|
$this->assertFalse($node->getAttribute('foo', false));
|
|
}
|
|
|
|
#[IgnoreDeprecations]
|
|
public function testAttributeDeprecationWithoutAlternative()
|
|
{
|
|
$node = new NodeForTest([], ['foo' => false]);
|
|
$node->deprecateAttribute('foo', new NameDeprecation('foo/bar', '2.0'));
|
|
|
|
$this->expectUserDeprecationMessage('Since foo/bar 2.0: Getting attribute "foo" on a "Twig\Tests\Node\NodeForTest" class is deprecated.');
|
|
$this->assertFalse($node->getAttribute('foo'));
|
|
}
|
|
|
|
#[IgnoreDeprecations]
|
|
public function testAttributeDeprecationWithAlternative()
|
|
{
|
|
$node = new NodeForTest([], ['foo' => false]);
|
|
$node->deprecateAttribute('foo', new NameDeprecation('foo/bar', '2.0', 'bar'));
|
|
|
|
$this->expectUserDeprecationMessage('Since foo/bar 2.0: Getting attribute "foo" on a "Twig\Tests\Node\NodeForTest" class is deprecated, get the "bar" attribute instead.');
|
|
$this->assertFalse($node->getAttribute('foo'));
|
|
}
|
|
|
|
public function testNodeDeprecationIgnore()
|
|
{
|
|
$node = new NodeForTest(['foo' => $foo = new NodeForTest()]);
|
|
$node->deprecateNode('foo', new NameDeprecation('foo/bar', '2.0'));
|
|
|
|
$this->assertSame($foo, $node->getNode('foo', false));
|
|
}
|
|
|
|
#[IgnoreDeprecations]
|
|
public function testNodeDeprecationWithoutAlternative()
|
|
{
|
|
$node = new NodeForTest(['foo' => $foo = new NodeForTest()]);
|
|
$node->deprecateNode('foo', new NameDeprecation('foo/bar', '2.0'));
|
|
|
|
$this->expectUserDeprecationMessage('Since foo/bar 2.0: Getting node "foo" on a "Twig\Tests\Node\NodeForTest" class is deprecated.');
|
|
$this->assertSame($foo, $node->getNode('foo'));
|
|
}
|
|
|
|
#[IgnoreDeprecations]
|
|
public function testNodeAttributeDeprecationWithAlternative()
|
|
{
|
|
$node = new NodeForTest(['foo' => $foo = new NodeForTest()]);
|
|
$node->deprecateNode('foo', new NameDeprecation('foo/bar', '2.0', 'bar'));
|
|
|
|
$this->expectUserDeprecationMessage('Since foo/bar 2.0: Getting node "foo" on a "Twig\Tests\Node\NodeForTest" class is deprecated, get the "bar" node instead.');
|
|
$this->assertSame($foo, $node->getNode('foo'));
|
|
}
|
|
}
|
|
|
|
class NodeForTest extends Node
|
|
{
|
|
} |