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 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
<?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 Symfony\Bridge\PhpUnit\ExpectDeprecationTrait;
use Twig\Node\NameDeprecation;
use Twig\Node\Node;
use Twig\TwigFilter;
use Twig\TwigFunction;
use Twig\TwigTest;
class NodeTest extends TestCase
{
use ExpectDeprecationTrait;
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->expectDeprecation('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->expectDeprecation('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->expectDeprecation('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->expectDeprecation('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
{
}
|