Files
Twig/tests/Fixtures/expressions/set.test
2026-08-23 09:40:21 +02:00

82 lines
2.4 KiB
Plaintext

--TEST--
Twig supports the "=" operator (assignment)
--TEMPLATE--
{# stores #}
{% do b = 1 + 3 %}{{ b }}
{# stores and displays #}
{{ b = 1 + 3 }}{{ b }}
{# stores and returns #}
{% do (c = 4) ? 0 : -1 %}{{ c }}
{# = can be chained #}
{% do c = d = "a" %}{{ c }}{{ d }}
{% do a = (b = 4) + 5 %}{{ a }}{{ b }}
# Array destructuring
{% do [first, last] = ['Fabien', 'Potencier'] %}{{ first }} {{ last }}
{% do [a, b] = [b, a] %}{{ a }}{{ b }}
{% do [, second] = ['first', 'second'] %}{{ second }}
{% do [x, y, z] = ['one', 'two'] %}{{ x }} {{ y }} {{ z is same as(null) ? 'null' : z }}
# Object destructuring
{% do {name, email} = user %}{{ name }} {{ email }}
{% do {first_name, last_name} = user_map %}{{ first_name }} {{ last_name }}
{% do {name} = user_obj %}{{ name }}
# Array destructuring from a Traversable
{% do destructured = ([p, q] = pair_traversable) %}{{ p }} {{ q }} {{ pair_traversable.yielded }} {{ destructured is same as(pair_traversable) ? 'same' : 'different' }}
{% do [r, , t] = short_traversable %}{{ r }} {{ t is same as(null) ? 'null' : t }}
# Object destructuring with renaming
{% do {name: userName, email: userEmail} = user %}{{ userName }} {{ userEmail }}
{% do {first_name: first, last_name: last} = user_map %}{{ first }} {{ last }}
{% do {name: objName} = user_obj %}{{ objName }}
{% do {name: n1} = user %}{% do {name: n2} = user_obj %}{{ n1 }} {{ n2 }}
--DATA--
return [
'user' => (object)['name' => 'Fabien', 'email' => 'fabien@example.com'],
'user_map' => ['first_name' => 'Fabien', 'last_name' => 'Potencier'],
'user_obj' => new class {
public function getName() { return 'Fabien'; }
},
'null_obj' => null,
'pair_traversable' => new class implements IteratorAggregate {
public int $yielded = 0;
public function getIterator(): Traversable
{
foreach ([5 => 'Fabien', 8 => 'Potencier', 13 => 'Ignored'] as $key => $value) {
++$this->yielded;
yield $key => $value;
}
}
},
'short_traversable' => new ArrayIterator(['one']),
]
--EXPECT--
4
44
4
aa
94
# Array destructuring
Fabien Potencier
49
second
one two null
# Object destructuring
Fabien fabien@example.com
Fabien Potencier
Fabien
# Array destructuring from a Traversable
Fabien Potencier 2 same
one null
# Object destructuring with renaming
Fabien fabien@example.com
Fabien Potencier
Fabien
Fabien Fabien