Files
smarty/tests/UnitTests/SmartyMethodsTests/RegisterModifier/RegisterModifierTest.php
T
Simon WisselinkandGitHub 5cb412d040 Bugfix/1100 modifier called like a function compiled to modifier name not callback (#1101)
* Fixed that modifiers called like function would be compiled to modifier name instead of calling the registered callback
2025-02-13 23:21:21 +01:00

126 lines
3.9 KiB
PHP

<?php
/**
* Smarty PHPunit tests register->modifier / unregister->modifier methods
*
* @package PHPunit
* @author Uwe Tews
*/
/**
* class for register->modifier / unregister->modifier methods tests
*
* @runTestsInSeparateProcess
* @preserveGlobalState disabled
* @backupStaticAttributes enabled
*/
class RegisterModifierTest extends PHPUnit_Smarty
{
public function setUp(): void
{
$this->setUpSmarty(__DIR__);
}
public function testInit()
{
$this->cleanDirs();
}
/**
* test register->modifier method for function
*/
public function testRegisterModifier()
{
$this->smarty->registerPlugin(Smarty::PLUGIN_MODIFIER, 'testmodifier', 'mymodifier');
$this->assertEquals('mymodifier', $this->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER]['testmodifier'][0]);
$this->smarty->assign('foo', 'foo');
$this->smarty->assign('bar', 'bar');
$this->assertEquals('foo function blar bar', $this->smarty->fetch('eval:{$foo|testmodifier:blar:$bar}'));
}
/**
* test register->modifier method for classes
*/
public function testRegisterModifierClass()
{
$this->smarty->registerPlugin(Smarty::PLUGIN_MODIFIER, 'testmodifier', array('mymodifierclass', 'static_method'));
$this->smarty->assign('foo', 'foo');
$this->smarty->assign('bar', 'bar');
$this->assertEquals('foo static blar bar', $this->smarty->fetch('eval:{$foo|testmodifier:blar:$bar}'));
}
/**
* test register->modifier method for objects
*/
public function testRegisterModifierObject()
{
$obj = new mymodifierclass;
$this->smarty->registerPlugin(Smarty::PLUGIN_MODIFIER, 'testmodifier', array($obj, 'object_method'));
$this->smarty->assign('foo', 'foo');
$this->smarty->assign('bar', 'bar');
$this->assertEquals('foo object blar bar', $this->smarty->fetch('eval:{$foo|testmodifier:blar:$bar}'));
}
/**
* test unregister->modifier method
*/
public function testUnregisterModifier()
{
$this->smarty->registerPlugin(Smarty::PLUGIN_MODIFIER, 'testmodifier', 'mymodifier');
$this->smarty->unregisterPlugin(Smarty::PLUGIN_MODIFIER, 'testmodifier');
$this->assertFalse(isset($this->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER]['testmodifier']));
}
/**
* test unregister->modifier method not registered
*/
public function testUnregisterModifierNotRegistered()
{
$this->smarty->unregisterPlugin(Smarty::PLUGIN_MODIFIER, 'testmodifier');
$this->assertFalse(isset($this->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER]['testmodifier']));
}
/**
* test unregister->modifier method other registered
*/
public function testUnregisterModifierOtherRegistered()
{
$this->smarty->registerPlugin(Smarty::PLUGIN_BLOCK, 'testmodifier', 'mymodifier');
$this->smarty->unregisterPlugin(Smarty::PLUGIN_MODIFIER, 'testmodifier');
$this->assertTrue(isset($this->smarty->registered_plugins[Smarty::PLUGIN_BLOCK]['testmodifier']));
}
public function testRegisterNativePhpFuncAsString()
{
$this->smarty->registerPlugin(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::PLUGIN_MODIFIER, 'k_xyz_a', 'strrev');
$this->smarty->assign('myVar', 'andersom');
$this->assertEquals('mosredna', $this->smarty->fetch('string:{k_xyz_a($myVar)}'));
}
}
function mymodifier($a, $b, $c)
{
return "$a function $b $c";
}
class mymodifierclass
{
static function static_method($a, $b, $c)
{
return "$a static $b $c";
}
public function object_method($a, $b, $c)
{
return "$a object $b $c";
}
}