mirror of
https://github.com/smarty-php/smarty.git
synced 2025-08-04 18:34:27 +02:00
add tests for issuse 312
This commit is contained in:
@@ -7,19 +7,14 @@
|
|||||||
* Smarty PHPUnit Bootstrap
|
* Smarty PHPUnit Bootstrap
|
||||||
*/
|
*/
|
||||||
include_once dirname(__FILE__) . '/Config.php';
|
include_once dirname(__FILE__) . '/Config.php';
|
||||||
// Locate Autoloader or SmartyBC class and load it
|
if (!class_exists('Smarty_Autoloader')) {
|
||||||
if (is_file(dirname(__FILE__) . '/../smarty/libs/Autoloader.php')) {
|
if (is_file(dirname(__FILE__) . '/../smarty/libs/bootstrap.php')) {
|
||||||
require_once dirname(__FILE__) . '/../smarty/libs/Autoloader.php';
|
require_once dirname(__FILE__) . '/../smarty/libs/bootstrap.php';
|
||||||
Smarty_Autoloader::register(true);
|
} elseif (is_file(dirname(__FILE__) . '/../libs/bootstrap.php')) {
|
||||||
} elseif (is_file(dirname(__FILE__) . '/../libs/Autoloader.php')) {
|
require_once dirname(__FILE__) . '/../libs/bootstrap.php';
|
||||||
require_once dirname(__FILE__) . '/../libs/Autoloader.php';
|
} else {
|
||||||
Smarty_Autoloader::register(true);
|
throw new Exception('can not locate Smarty distribution');
|
||||||
} elseif (is_file(dirname(__FILE__) . '/../smarty/libs/SmartyBC.class.php')) {
|
}
|
||||||
require_once dirname(__FILE__) . '/../smarty/libs/SmartyBC.class.php';
|
|
||||||
} elseif (is_file(dirname(__FILE__) . '/../libs/SmartyBC.class.php')) {
|
|
||||||
require_once dirname(__FILE__) . '/../libs/SmartyBC.class.php';
|
|
||||||
} else {
|
|
||||||
throw new Exception('can not locate Smarty distribution');
|
|
||||||
}
|
}
|
||||||
if (!defined('SMARTY_COMPOSER_INSTALL')) {
|
if (!defined('SMARTY_COMPOSER_INSTALL')) {
|
||||||
foreach (array(dirname(__FILE__) . '/../../autoload.php', dirname(__FILE__) . '/../vendor/autoload.php',
|
foreach (array(dirname(__FILE__) . '/../../autoload.php', dirname(__FILE__) . '/../vendor/autoload.php',
|
||||||
|
@@ -72,13 +72,15 @@ class PHPUnit_Smarty extends PHPUnit_Framework_TestCase
|
|||||||
*/
|
*/
|
||||||
public static $pdo = null;
|
public static $pdo = null;
|
||||||
|
|
||||||
|
public static $pluginsdir = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default blacklist
|
* Default blacklist
|
||||||
*
|
*
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $backupStaticAttributesBlacklist = array('PHPUnit_Smarty' => array('config', 'pdo', 'init',
|
protected $backupStaticAttributesBlacklist = array('PHPUnit_Smarty' => array('config', 'pdo', 'init',
|
||||||
'testNumver'),);
|
'testNumver', 'pluginsdir'),);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method is called before the first test of this test class is run.
|
* This method is called before the first test of this test class is run.
|
||||||
@@ -88,6 +90,7 @@ class PHPUnit_Smarty extends PHPUnit_Framework_TestCase
|
|||||||
{
|
{
|
||||||
error_reporting(E_ALL | E_STRICT);
|
error_reporting(E_ALL | E_STRICT);
|
||||||
self::$init = true;
|
self::$init = true;
|
||||||
|
self::$pluginsdir =self::getSmartyPluginsDir();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -113,7 +116,7 @@ class PHPUnit_Smarty extends PHPUnit_Framework_TestCase
|
|||||||
define('individualFolders', true);
|
define('individualFolders', true);
|
||||||
}
|
}
|
||||||
parent::__construct($name, $data, $dataName);
|
parent::__construct($name, $data, $dataName);
|
||||||
$this->backupStaticAttributesBlacklist[ get_class($this) ] = array('init', 'config', 'pdo', 'testNumber');
|
$this->backupStaticAttributesBlacklist[ get_class($this) ] = array('init', 'config', 'pdo', 'testNumber');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -437,17 +440,32 @@ KEY `expire` (`expire`)
|
|||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function normalizePath($path)
|
public function normalizePath($path, $ds =null ,$absolute = true)
|
||||||
{
|
{
|
||||||
if ($path[ 0 ] == '.') {
|
$ds = isset($ds) ? $ds : DIRECTORY_SEPARATOR;
|
||||||
$path = getcwd() . DIRECTORY_SEPARATOR . $path;
|
$nds = $ds == '/' ? '\\' : '/';
|
||||||
|
$getcwd = getcwd();
|
||||||
|
// normalize $ds
|
||||||
|
$path = str_replace($nds, $ds, $path);
|
||||||
|
preg_match('#^([a-zA-Z][:])?([.]{1,2}[\/\\\]+)?([\\\])?([.]{0,2}[\/\\\]+)?([[:print:]]*)#', $path, $match);
|
||||||
|
if ($match[1] === '') {
|
||||||
|
if ($match[ 2 ] !== '' || $match[ 2 ] . $match[ 3 ] . $match[ 4 ] === '') {
|
||||||
|
$path = $getcwd . $ds . $path;
|
||||||
|
} else if (Smarty::$_IS_WINDOWS && $match[ 3 ] !== '') {
|
||||||
|
$path = substr($getcwd, 0, 2) . $path;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
$path = preg_replace('#[\\\/]+([.][\\\/]+)*#', DIRECTORY_SEPARATOR, $path);
|
$path = preg_replace('#[\\\/]+([.][\\\/]+)*#', $ds, $path);
|
||||||
while (strrpos($path, '.' . DIRECTORY_SEPARATOR) !== false) {
|
while (strrpos($path, '.' . $ds) !== false) {
|
||||||
$path =
|
$path =
|
||||||
preg_replace('#([\\\/]([^\\\/]+[\\\/]){2}([.][.][\\\/]){2})|([\\\/][^\\\/]+[\\\/][.][.][\\\/])#', DIRECTORY_SEPARATOR,
|
preg_replace('#([\\\/]([^\\\/]+[\\\/]){2}([.][.][\\\/]){2})|([\\\/][^\\\/]+[\\\/][.][.][\\\/])#', $ds,
|
||||||
$path);
|
$path);
|
||||||
}
|
}
|
||||||
|
$cwd = preg_replace('#[\\\/]#', $ds, $getcwd);
|
||||||
|
$path = str_ireplace($cwd,$getcwd, $path);
|
||||||
|
if (!$absolute) {
|
||||||
|
$path = preg_replace('#'.$getcwd.'#', '', $path);
|
||||||
|
}
|
||||||
return $path;
|
return $path;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -633,6 +651,13 @@ KEY `expire` (`expire`)
|
|||||||
return isset($this->smarty) ? $this->smarty : (isset($this->smartyBC) ? $this->smartyBC : null);
|
return isset($this->smarty) ? $this->smarty : (isset($this->smartyBC) ? $this->smartyBC : null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function getSmartyPluginsDir(){
|
||||||
|
if (is_dir(dirname(__FILE__) . '/../smarty/libs/plugins')) {
|
||||||
|
return dirname(__FILE__) . '/../smarty/libs/plugins';
|
||||||
|
} else if(is_dir(dirname(__FILE__) . '/../libs/plugins')) {
|
||||||
|
return dirname(__FILE__) . '/../libs/plugins';
|
||||||
|
}
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Tears down the fixture
|
* Tears down the fixture
|
||||||
* This method is called after a test is executed.
|
* This method is called after a test is executed.
|
||||||
|
163
tests/UnitTests/X_Issues/Issuse312/InheritanceTest.php
Normal file
163
tests/UnitTests/X_Issues/Issuse312/InheritanceTest.php
Normal file
@@ -0,0 +1,163 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
//require_once '../../../../../vendor/autoload.php';
|
||||||
|
|
||||||
|
class Base
|
||||||
|
{
|
||||||
|
const TEMPLATE='034_parent.tpl';
|
||||||
|
|
||||||
|
public $id=null;
|
||||||
|
|
||||||
|
public function __construct($id)
|
||||||
|
{
|
||||||
|
$this->id=$id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getHTML()
|
||||||
|
{
|
||||||
|
return static::class;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Child extends Base
|
||||||
|
{
|
||||||
|
const TEMPLATE='034_child.tpl';
|
||||||
|
|
||||||
|
public function getText()
|
||||||
|
{
|
||||||
|
return $this->getHTML();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class BaseClone extends Base
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class InheritanceTest extends PHPUnit_Framework_TestCase
|
||||||
|
{
|
||||||
|
protected $smarty;
|
||||||
|
|
||||||
|
protected function setUp()
|
||||||
|
{
|
||||||
|
chdir(dirname(__FILE__));
|
||||||
|
$this->smarty=new Smarty();
|
||||||
|
$this->smarty->setTemplateDir('./templates');
|
||||||
|
$this->smarty->setCompileDir('./templates_c');
|
||||||
|
$this->smarty->setCacheDir('./cache');
|
||||||
|
$this->smarty->caching=false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider providerInheritance
|
||||||
|
*/
|
||||||
|
public function testInheritance($elements, $assertions)
|
||||||
|
{
|
||||||
|
foreach ($elements as $nr=> $element)
|
||||||
|
{
|
||||||
|
$this->smarty->assign('e', $element);
|
||||||
|
$this->assertSame($assertions[$nr], $this->smarty->fetch($element::TEMPLATE));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @dataProvider providerInheritance
|
||||||
|
*/
|
||||||
|
public function testInheritanceCaching($elements, $assertions)
|
||||||
|
{
|
||||||
|
$this->smarty->caching = true;
|
||||||
|
foreach ($elements as $nr=> $element)
|
||||||
|
{
|
||||||
|
$this->smarty->assign('e', $element);
|
||||||
|
$this->assertSame($assertions[$nr], $this->smarty->fetch($element::TEMPLATE));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @dataProvider providerInheritance
|
||||||
|
*/
|
||||||
|
public function testInheritanceCaching1($elements, $assertions)
|
||||||
|
{
|
||||||
|
$this->smarty->caching = true;
|
||||||
|
foreach ($elements as $nr=> $element)
|
||||||
|
{
|
||||||
|
$this->smarty->assign('e', $element);
|
||||||
|
$stat = $this->smarty->isCached($element::TEMPLATE);
|
||||||
|
$this->assertSame($assertions[$nr], $this->smarty->fetch($element::TEMPLATE));
|
||||||
|
$this->assertTrue($stat);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function providerInheritance()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
[
|
||||||
|
//(#0) This test works as expected
|
||||||
|
[
|
||||||
|
new Base(1),
|
||||||
|
new Base(2),
|
||||||
|
new BaseClone(3),
|
||||||
|
], [
|
||||||
|
'1 Base',
|
||||||
|
'2 Base',
|
||||||
|
'3 BaseClone',
|
||||||
|
],
|
||||||
|
], [
|
||||||
|
//(#1) This test works as expected
|
||||||
|
[
|
||||||
|
new Child(1),
|
||||||
|
new BaseClone(2), //This output is right(!)
|
||||||
|
], [
|
||||||
|
'1 Child',
|
||||||
|
'2 BaseClone',
|
||||||
|
],
|
||||||
|
], [
|
||||||
|
//(#2) This test fails
|
||||||
|
[
|
||||||
|
new Child(1),
|
||||||
|
new Child(2),
|
||||||
|
new BaseClone(3),
|
||||||
|
], [
|
||||||
|
'1 Child',
|
||||||
|
'2 Child',
|
||||||
|
'3 BaseClone', //Here the output is "2 Child"
|
||||||
|
],
|
||||||
|
], [
|
||||||
|
//(#3) This test fails
|
||||||
|
[
|
||||||
|
new Child(1),
|
||||||
|
new BaseClone(2),
|
||||||
|
new Child(3),
|
||||||
|
], [
|
||||||
|
'1 Child',
|
||||||
|
'2 BaseClone',
|
||||||
|
'3 Child', //Here the output is "2 Child"
|
||||||
|
],
|
||||||
|
], [
|
||||||
|
//(#4) This test fails
|
||||||
|
[
|
||||||
|
new Child(1),
|
||||||
|
new Child(2),
|
||||||
|
new BaseClone(3),
|
||||||
|
new Child(4),
|
||||||
|
], [
|
||||||
|
'1 Child',
|
||||||
|
'2 Child',
|
||||||
|
'3 BaseClone', //Here the output is also "2 Child"
|
||||||
|
'4 Child',
|
||||||
|
],
|
||||||
|
], [
|
||||||
|
//(#5) This test fails
|
||||||
|
[
|
||||||
|
new BaseClone(1),
|
||||||
|
new Child(2),
|
||||||
|
new Child(3),
|
||||||
|
new BaseClone(4),
|
||||||
|
], [
|
||||||
|
'1 BaseClone', //This output is right(!)
|
||||||
|
'2 Child',
|
||||||
|
'3 Child',
|
||||||
|
'4 BaseClone', //Here the output is "3 Child"
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
0
tests/UnitTests/X_Issues/Issuse312/cache/dummy.txt
vendored
Normal file
0
tests/UnitTests/X_Issues/Issuse312/cache/dummy.txt
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{extends '034_parent.tpl'}{block name=elementContent}{$e->getText() nocache}{/block}
|
@@ -0,0 +1 @@
|
|||||||
|
{$e->id nocache} {block name=elementContent}{$e->getHTML() nocache}{/block}
|
Reference in New Issue
Block a user