From a4b8466205416fd32199fcf6753f108cd5e5c9ed Mon Sep 17 00:00:00 2001 From: Simon Wisselink Date: Thu, 13 Feb 2025 23:20:05 +0100 Subject: [PATCH] Added unit tests to prevent regressions of issue #1100 that was fixed in v4 --- ...egisterModifierFirstClassCallablesTest.php | 55 +++++++++++++++++++ .../RegisterModifier/RegisterModifierTest.php | 14 +++++ 2 files changed, 69 insertions(+) create mode 100644 tests/UnitTests/SmartyMethodsTests/RegisterModifier/RegisterModifierFirstClassCallablesTest.php diff --git a/tests/UnitTests/SmartyMethodsTests/RegisterModifier/RegisterModifierFirstClassCallablesTest.php b/tests/UnitTests/SmartyMethodsTests/RegisterModifier/RegisterModifierFirstClassCallablesTest.php new file mode 100644 index 000000000..18e3fa367 --- /dev/null +++ b/tests/UnitTests/SmartyMethodsTests/RegisterModifier/RegisterModifierFirstClassCallablesTest.php @@ -0,0 +1,55 @@ += 80100) { + + /** + * class for register modifier with (first class) callables tests + * + * @runTestsInSeparateProcess + * @preserveGlobalState disabled + * @backupStaticAttributes enabled + */ + class RegisterModifierFirstClassCallablesTest extends PHPUnit_Smarty + { + public function setUp(): void + { + $this->setUpSmarty(__DIR__); + } + + + public function testInit() + { + $this->cleanDirs(); + } + + public function testRegisterFirstClassCallable() + { + $this->smarty->registerPlugin(\Smarty\Smarty::PLUGIN_MODIFIER, 'testmodifier', eval('return strrev(...);')); + $this->assertEquals('mosredna', $this->smarty->fetch('string:{"andersom"|testmodifier}')); + } + + public function testRegisterFirstClassCallableSameName() + { + $this->smarty->registerPlugin(\Smarty\Smarty::PLUGIN_MODIFIER, 'mymodifier', eval('return strrev(...);')); + $this->assertEquals('mosredna', $this->smarty->fetch('string:{"andersom"|mymodifier}')); + } + + public function testRegisterFirstClassCallableAsFunc() + { + $this->smarty->registerPlugin(\Smarty\Smarty::PLUGIN_MODIFIER, 'kprint_r_out', eval('return strrev(...);')); + $this->smarty->assign('myVar', 'andersom'); + $this->assertEquals('mosredna', $this->smarty->fetch('string:{kprint_r_out($myVar)}')); + } + + public function testRegisterFirstClassCallableSameNameAsPhpFunc() + { + $this->smarty->registerPlugin(\Smarty\Smarty::PLUGIN_MODIFIER, 'mymodifierfcc', eval('return strrev(...);')); + $this->assertEquals('mosredna', $this->smarty->fetch('string:{mymodifierfcc("andersom")}')); + } + + } +} +function mymodifierfcc($a, $b, $c) +{ + return "$a function $b $c"; +} diff --git a/tests/UnitTests/SmartyMethodsTests/RegisterModifier/RegisterModifierTest.php b/tests/UnitTests/SmartyMethodsTests/RegisterModifier/RegisterModifierTest.php index 05ee74592..1d422d034 100644 --- a/tests/UnitTests/SmartyMethodsTests/RegisterModifier/RegisterModifierTest.php +++ b/tests/UnitTests/SmartyMethodsTests/RegisterModifier/RegisterModifierTest.php @@ -135,6 +135,20 @@ public function testSetExtensions($template, $expectedValue) $this->assertEquals($expectedValue, $this->smarty->fetch('string:' . $template)); } + public function testRegisterNativePhpFuncAsString() + { + $this->smarty->registerPlugin(\Smarty\Smarty::PLUGIN_MODIFIER, 'strrev', 'strrev'); + $this->smarty->assign('myVar', 'andersom'); + $this->assertEquals('mosredna', $this->smarty->fetch('string:{strrev($myVar)}')); + } + + public function testRegisterNativePhpFuncUnderDifferentName() + { + $this->smarty->registerPlugin(\Smarty\Smarty::PLUGIN_MODIFIER, 'k_xyz_a', 'strrev'); + $this->smarty->assign('myVar', 'andersom'); + $this->assertEquals('mosredna', $this->smarty->fetch('string:{k_xyz_a($myVar)}')); + } + } class WildcardExtension extends \Smarty\Extension\Base {