<?php declare(strict_types=1); namespace tests; use Exception; use flight\template\View; use PHPUnit\Framework\TestCase; class ViewTest extends TestCase { private View $view; protected function setUp(): void { $this->view = new View(); $this->view->path = __DIR__ . '/views'; } // Set template variables public function testVariables() { $this->view->set('test', 123); $this->assertEquals(123, $this->view->get('test')); $this->assertTrue($this->view->has('test')); $this->assertTrue(!$this->view->has('unknown')); $this->view->clear('test'); $this->assertNull($this->view->get('test')); } public function testMultipleVariables() { $this->view->set([ 'test' => 123, 'foo' => 'bar' ]); $this->assertEquals(123, $this->view->get('test')); $this->assertEquals('bar', $this->view->get('foo')); $this->view->clear(); $this->assertNull($this->view->get('test')); $this->assertNull($this->view->get('foo')); } // Check if template files exist public function testTemplateExists() { $this->assertTrue($this->view->exists('hello.php')); $this->assertTrue(!$this->view->exists('unknown.php')); } // Render a template public function testRender() { $this->view->render('hello', ['name' => 'Bob']); $this->expectOutputString('Hello, Bob!'); } public function testRenderBadFilePath() { $this->expectException(Exception::class); $exception_message = sprintf( 'Template file not found: %s%sviews%sbadfile.php', __DIR__, DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR ); $this->expectExceptionMessage($exception_message); $this->view->render('badfile'); } // Fetch template output public function testFetch() { $output = $this->view->fetch('hello', ['name' => 'Bob']); $this->assertEquals('Hello, Bob!', $output); } // Default extension public function testTemplateWithExtension() { $this->view->set('name', 'Bob'); $this->view->render('hello.php'); $this->expectOutputString('Hello, Bob!'); } // Custom extension public function testTemplateWithCustomExtension() { $this->view->set('name', 'Bob'); $this->view->extension = '.html'; $this->view->render('world'); $this->expectOutputString('Hello world, Bob!'); } public function testGetTemplateAbsolutePath() { $tmpfile = tmpfile(); $this->view->extension = ''; $file_path = stream_get_meta_data($tmpfile)['uri']; $this->assertEquals($file_path, $this->view->getTemplate($file_path)); } public function testE() { $this->expectOutputString('<script>'); $result = $this->view->e('<script>'); $this->assertEquals('<script>', $result); } public function testeNoNeedToEscape() { $this->expectOutputString('script'); $result = $this->view->e('script'); $this->assertEquals('script', $result); } public function testNormalizePath(): void { $viewMock = new class extends View { public static function normalizePath(string $path, string $separator = DIRECTORY_SEPARATOR): string { return parent::normalizePath($path, $separator); } }; $this->assertSame( 'C:/xampp/htdocs/libs/Flight/core/index.php', $viewMock::normalizePath('C:\xampp\htdocs\libs\Flight/core/index.php', '/') ); $this->assertSame( 'C:\xampp\htdocs\libs\Flight\core\index.php', $viewMock::normalizePath('C:/xampp/htdocs/libs/Flight\core\index.php', '\\') ); $this->assertSame( 'C:°xampp°htdocs°libs°Flight°core°index.php', $viewMock::normalizePath('C:/xampp/htdocs/libs/Flight\core\index.php', '°') ); } }