Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
223 changes: 223 additions & 0 deletions tests/unit/Compiler/AccessTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,223 @@
<?php

/**
* This file is part of the Phalcon Framework.
*
* (c) Phalcon Team <team@phalcon.io>
*
* For the full copyright and license information, please view the LICENSE.txt
* file that was distributed with this source code.
*/

declare(strict_types=1);

namespace Phalcon\Tests\Unit\Compiler;

use Phalcon\Volt\Compiler;
use PHPUnit\Framework\TestCase;

final class AccessTest extends TestCase
{
private Compiler $compiler;

public function setUp(): void
{
$this->compiler = new Compiler();
}

/**
* @return void
*
* @author Phalcon Team <team@phalcon.io>
* @since 2026-04-10
*/
public function testMvcViewEngineVoltParserExprDot(): void
{
$source = '{{ user.name }}';
$expected = [
[
'type' => 359,
'expr' => [
'type' => 46,
'left' => [
'type' => 265,
'value' => 'user',
'file' => 'eval code',
'line' => 1,
],
'right' => [
'type' => 265,
'value' => 'name',
'file' => 'eval code',
'line' => 1,
],
'file' => 'eval code',
'line' => 1,
],
'file' => 'eval code',
'line' => 1,
],
];
$actual = $this->compiler->parse($source);
$this->assertSame($expected, $actual);
}

/**
* @return void
*
* @author Phalcon Team <team@phalcon.io>
* @since 2026-04-10
*/
public function testMvcViewEngineVoltParserExprDotNested(): void
{
$source = '{{ user.address.city }}';
$expected = [
[
'type' => 359,
'expr' => [
'type' => 46,
'left' => [
'type' => 46,
'left' => [
'type' => 265,
'value' => 'user',
'file' => 'eval code',
'line' => 1,
],
'right' => [
'type' => 265,
'value' => 'address',
'file' => 'eval code',
'line' => 1,
],
'file' => 'eval code',
'line' => 1,
],
'right' => [
'type' => 265,
'value' => 'city',
'file' => 'eval code',
'line' => 1,
],
'file' => 'eval code',
'line' => 1,
],
'file' => 'eval code',
'line' => 1,
],
];
$actual = $this->compiler->parse($source);
$this->assertSame($expected, $actual);
}

/**
* @return void
*
* @author Phalcon Team <team@phalcon.io>
* @since 2026-04-10
*/
public function testMvcViewEngineVoltParserExprArrayAccess(): void
{
$source = '{{ items[0] }}';
$expected = [
[
'type' => 359,
'expr' => [
'type' => 361,
'left' => [
'type' => 265,
'value' => 'items',
'file' => 'eval code',
'line' => 1,
],
'right' => [
'type' => 258,
'value' => '0',
'file' => 'eval code',
'line' => 1,
],
'file' => 'eval code',
'line' => 1,
],
'file' => 'eval code',
'line' => 1,
],
];
$actual = $this->compiler->parse($source);
$this->assertSame($expected, $actual);
}

/**
* @return void
*
* @author Phalcon Team <team@phalcon.io>
* @since 2026-04-10
*/
public function testMvcViewEngineVoltParserExprArrayAccessKey(): void
{
$source = '{{ map[\'key\'] }}';
$expected = [
[
'type' => 359,
'expr' => [
'type' => 361,
'left' => [
'type' => 265,
'value' => 'map',
'file' => 'eval code',
'line' => 1,
],
'right' => [
'type' => 260,
'value' => 'key',
'file' => 'eval code',
'line' => 1,
],
'file' => 'eval code',
'line' => 1,
],
'file' => 'eval code',
'line' => 1,
],
];
$actual = $this->compiler->parse($source);
$this->assertSame($expected, $actual);
}

/**
* @return void
*
* @author Phalcon Team <team@phalcon.io>
* @since 2026-04-10
*/
public function testMvcViewEngineVoltParserExprArrayAccessVar(): void
{
$source = '{{ items[index] }}';
$expected = [
[
'type' => 359,
'expr' => [
'type' => 361,
'left' => [
'type' => 265,
'value' => 'items',
'file' => 'eval code',
'line' => 1,
],
'right' => [
'type' => 265,
'value' => 'index',
'file' => 'eval code',
'line' => 1,
],
'file' => 'eval code',
'line' => 1,
],
'file' => 'eval code',
'line' => 1,
],
];
$actual = $this->compiler->parse($source);
$this->assertSame($expected, $actual);
}
}
Loading
Loading