Add unit tests for path conversion utilities in Template class

This commit is contained in:
Kijin Sung 2023-10-18 21:33:49 +09:00
parent 325c2c2b13
commit ca5c96d02a
2 changed files with 62 additions and 2 deletions

View file

@ -450,11 +450,17 @@ class Template
* Convert a relative path using the given basepath.
*
* @param string $path
* @param string $basepath
* @param ?string $basepath
* @return string
*/
public function convertPath(string $path, string $basepath): string
public function convertPath(string $path, ?string $basepath = null): string
{
// If basepath is not provided, use the relative dir of the current instance.
if ($basepath === null)
{
$basepath = $this->relative_dirname;
}
// Path relative to the Rhymix installation directory?
if (preg_match('#^\^/?(\w.+)$#s', $path, $match))
{

View file

@ -0,0 +1,54 @@
<?php
class TemplateTest extends \Codeception\Test\Unit
{
public function _before()
{
Context::init();
}
public function testIsRelativePath()
{
$tmpl = new \Rhymix\Framework\Template('./tests/_data/template', 'empty.html');
$this->assertTrue($tmpl->isRelativePath('foo.html'));
$this->assertTrue($tmpl->isRelativePath('foo/bar.html'));
$this->assertTrue($tmpl->isRelativePath('../foo/bar.html'));
$this->assertTrue($tmpl->isRelativePath('foo/../bar.html'));
$this->assertTrue($tmpl->isRelativePath('^/foo/../bar.html'));
$this->assertFalse($tmpl->isRelativePath('/foo/bar.html'));
$this->assertFalse($tmpl->isRelativePath('https://foo.com/bar.html'));
$this->assertFalse($tmpl->isRelativePath('file:///C:/foo/bar.html'));
$this->assertFalse($tmpl->isRelativePath('data:image/png;base64,AAAAAAAAAAA="'));
$this->assertFalse($tmpl->isRelativePath('{$foo}'));
}
public function testConvertPath()
{
$tmpl = new \Rhymix\Framework\Template('./tests/_data/template', 'empty.html');
$source = 'foo.html';
$target = 'tests/_data/template/foo.html';
$this->assertEquals($target, $tmpl->convertPath($source));
$source = 'foo/bar.js';
$target = 'tests/_data/template/foo/bar.js';
$this->assertEquals($target, $tmpl->convertPath($source));
$source = '../foo.scss';
$target = 'tests/_data/foo.scss';
$this->assertEquals($target, $tmpl->convertPath($source));
$source = '../../_output/foo/../bar.jpg';
$target = 'tests/_output/bar.jpg';
$this->assertEquals($target, $tmpl->convertPath($source));
$source = '/foo/bar.blade.php';
$target = 'tests/_data/template/foo/bar.blade.php';
$this->assertEquals($target, $tmpl->convertPath($source));
$source = '^/foo/bar.gif';
$target = '/rhymix/foo/bar.gif';
$this->assertEquals($target, $tmpl->convertPath($source));
}
}