mirror of
https://github.com/twigphp/Twig.git
synced 2026-09-20 14:36:57 +00:00
ef7ade8ee3
* 3.x: (30 commits)
Make {} optional for the types tag
Remove the note about types mapping argument
Add a note on the types locality
Fix CS
Fix typos in the docs
Use spl_object_id() instead of spl_object_hash()
Add `LastModifiedExtensionInterface` and implementation in `AbstractExtension` to track modification of runtime classes
Bump version
Optimize NameExpression compilation
Fix typo in enum twig doc functions
Remove dead method in ModuleNode
Bump version
Prepare the 3.18.0 release
Add support for `Twig\Markup`
Fix unary operator precedence change
Replace Twigfiddle by the new Twig playground
Fix MacroNode $name argument can be overridden
Ignore exceptions from undefined handlers when using the guard tag
[Doc] Update the docs about attribute() function
Fix doc
...
80 lines
2.2 KiB
PHP
80 lines
2.2 KiB
PHP
<?php
|
|
|
|
namespace Twig\Tests\TokenParser;
|
|
|
|
use PHPUnit\Framework\Attributes\DataProvider;
|
|
use PHPUnit\Framework\TestCase;
|
|
use Twig\Environment;
|
|
use Twig\Loader\ArrayLoader;
|
|
use Twig\Parser;
|
|
use Twig\Source;
|
|
|
|
class TypesTokenParserTest extends TestCase
|
|
{
|
|
#[DataProvider('getMappingTests')]
|
|
public function testMappingParsing(string $template, array $expected): void
|
|
{
|
|
$env = new Environment(new ArrayLoader(), ['cache' => false, 'autoescape' => false]);
|
|
$stream = $env->tokenize(new Source($template, ''));
|
|
$parser = new Parser($env);
|
|
|
|
$typesNode = $parser->parse($stream)->getNode('body')->getNode(0);
|
|
|
|
self::assertEquals($expected, $typesNode->getAttribute('mapping'));
|
|
}
|
|
|
|
public static function getMappingTests(): array
|
|
{
|
|
return [
|
|
// empty mapping
|
|
[
|
|
'{% types {} %}',
|
|
[],
|
|
],
|
|
|
|
// simple
|
|
[
|
|
'{% types {foo: "bar"} %}',
|
|
[
|
|
'foo' => ['type' => 'bar', 'optional' => false],
|
|
],
|
|
],
|
|
|
|
// trailing comma
|
|
[
|
|
'{% types {foo: "bar",} %}',
|
|
[
|
|
'foo' => ['type' => 'bar', 'optional' => false],
|
|
],
|
|
],
|
|
|
|
// optional name
|
|
[
|
|
'{% types {foo?: "bar"} %}',
|
|
[
|
|
'foo' => ['type' => 'bar', 'optional' => true],
|
|
],
|
|
],
|
|
|
|
// multiple pairs, duplicate values
|
|
[
|
|
'{% types {foo: "foo", bar?: "foo", baz: "baz"} %}',
|
|
[
|
|
'foo' => ['type' => 'foo', 'optional' => false],
|
|
'bar' => ['type' => 'foo', 'optional' => true],
|
|
'baz' => ['type' => 'baz', 'optional' => false],
|
|
],
|
|
],
|
|
|
|
// without {} enclosing
|
|
[
|
|
'{% types foo: "foo", bar: "bar" %}',
|
|
[
|
|
'foo' => ['type' => 'foo', 'optional' => false],
|
|
'bar' => ['type' => 'bar', 'optional' => false],
|
|
],
|
|
],
|
|
];
|
|
}
|
|
}
|