config->version = 2; ?>'; private $baseurl; public function _before() { $this->baseurl = '/' . basename(dirname(dirname(dirname(dirname(__DIR__))))) . '/'; } public function testVersion() { // Extension is .html and config is explicitly declared $source = '' . "\n" . '
{{ RX_VERSION|noescape }}
'; $target = '
'; $this->assertEquals("\n" . $target, $this->_parse($source), false); $source = '@version(2)' . "\n" . '
@php func_get_args(); @endphp
'; $target = '
'; $this->assertEquals("\n" . $target, $this->_parse($source), false); // Extension is .blade.php and config is not declared $source = ''; $target = ' disabled="disabled">'; $this->assertEquals($target, $this->_parse($source)); // Extension is .blade.php but version is incorrectly declared: will be parsed as v1 $source = '@version(1)' . "\n" . ''; $target = ''; $this->assertStringContainsString($target, $this->_parse($source)); } public function testClassAliases() { // XE-style $source = '' . "\n" . '{@ $foo = TemplateHandler::getInstance()}'; $target = "\n" . 'foo = Rhymix\Framework\Template::getInstance() ?>'; $this->assertEquals($target, $this->_parse($source)); // Blade-style $source = "@use('Rhymix\Framework\Template', 'TemplateHandler')" . "\n" . '{@ $foo = new TemplateHandler()}'; $target = "\n" . 'foo = new Rhymix\Framework\Template() ?>'; $this->assertEquals($target, $this->_parse($source)); } public function testInclude() { // Basic usage $source = ''; $target = 'relative_dirname, "foobar", "blade.php"); echo $__tpl->compile(); ?>'; $this->assertEquals($target, $this->_parse($source)); // Legacy 'target' attribute $source = ''; $target = 'relative_dirname, "subdir/foobar", "blade.php"); echo $__tpl->compile(); ?>'; $this->assertEquals($target, $this->_parse($source)); // Conditional include $source = ''; $target = 'relative_dirname, "../up/foobar", "blade.php"); echo $__tpl->compile(); ?>'; $this->assertEquals($target, $this->_parse($source)); // Conditional include with legacy 'cond' attribute $source = ''; $target = 'relative_dirname, "legacy/cond.statement.html", "blade.php"); echo $__tpl->compile(); ?>'; $this->assertEquals($target, $this->_parse($source)); // Path relative to Rhymix installation directory $source = ''; $target = 'compile(); ?>'; $this->assertEquals($target, $this->_parse($source)); // Unless $source = ''; $target = 'compile(); ?>'; $this->assertEquals($target, $this->_parse($source)); // With variables $source = ''; $target = 'relative_dirname, "foobar", "blade.php"); $__tpl->setVars($__Context->vars); echo $__tpl->compile(); ?>'; $this->assertEquals($target, $this->_parse($source)); // With array literal passed as variables $source = ''; $target = 'relative_dirname, "foobar", "blade.php"); $__tpl->setVars([\'foo\' => \'bar\']); echo $__tpl->compile(); ?>'; $this->assertEquals($target, $this->_parse($source)); // Blade-style @include $source = "@include ('foobar')"; $target = implode(' ', [ 'setVars($__vars);', 'echo $__tpl->compile(); })($this->relative_dirname, \'foobar\'); ?>' ]); $this->assertEquals($target, $this->_parse($source)); // Blade-style @include with variable in filename $source = "@include(\$var)"; $target = implode(' ', [ 'setVars($__vars);', 'echo $__tpl->compile(); })($this->relative_dirname, $__Context->var); ?>' ]); $this->assertEquals($target, $this->_parse($source)); // Blade-style @include with path relative to Rhymix installation directory $source = '@include ("^/common/js/plugins/foobar/baz.blade.php")'; $target = implode(' ', [ 'setVars($__vars);', 'echo $__tpl->compile(); })("common/js/plugins/foobar", "baz.blade.php"); ?>' ]); $this->assertEquals($target, $this->_parse($source)); // Blade-style @includeIf with variables $source = "@includeIf('dir/foobar', \$vars)"; $target = implode(' ', [ 'exists()) return;', 'if ($__vars) $__tpl->setVars($__vars);', 'echo $__tpl->compile(); })($this->relative_dirname, \'dir/foobar\', $__Context->vars); ?>' ]); $this->assertEquals($target, $this->_parse($source)); // Blade-style @includeWhen $source = "@includeWhen(\$foo->isBar(), '../../foobar.html', \$vars)"; $target = implode(' ', [ 'setVars($__vars);', 'echo $__tpl->compile(); })("includeWhen", $this->relative_dirname, $__Context->foo->isBar(), \'../../foobar.html\', $__Context->vars); ?>' ]); $this->assertEquals($target, $this->_parse($source)); // Blade-style @includeUnless with path relative to Rhymix installation directory $source = "@includeUnless (false, '^common/tpl/foobar.html', \$vars)"; $target = implode(' ', [ 'setVars($__vars);', 'echo $__tpl->compile(); })("includeUnless", "common/tpl", false, \'foobar.html\', $__Context->vars); ?>' ]); $this->assertEquals($target, $this->_parse($source)); } public function testAssetLoading() { } public function testEchoStatements() { } public function testOutputFilters() { } public function testPathConversion() { } public function testBlockConditions() { } public function testInlineConditions() { } public function testMiscDirectives() { } public function testComments() { } public function testVerbatim() { } public function testRawPhpCode() { } public function testAutoEscape() { } public function testCurlyBracesAndVars() { } public function testCompile() { } public function _parse($source, $force_v2 = true) { $filename = $force_v2 ? 'v2example.blade.php' : 'empty.html'; $tmpl = new \Rhymix\Framework\Template('./tests/_data/template', $filename); $result = $tmpl->parse($source); if (str_starts_with($result, $this->prefix)) { $result = substr($result, strlen($this->prefix)); } return $result; } }