Skip to content

Commit

Permalink
address PHP 8.1 'explode', 'number_format', and 'replace' deprecations
Browse files Browse the repository at this point in the history
  • Loading branch information
mfettig committed Jul 21, 2022
1 parent 3f97b73 commit 4abef5f
Show file tree
Hide file tree
Showing 6 changed files with 220 additions and 1 deletion.
25 changes: 25 additions & 0 deletions libs/plugins/modifier.explode.php
@@ -0,0 +1,25 @@
<?php
/**
* Smarty plugin
*
* @package Smarty
* @subpackage PluginsModifier
*/

/**
* Smarty explode modifier plugin
* Type: modifier
* Name: explode
* Purpose: split a string by a string
*
* @param string $separator
* @param string $string
* @param int|null $limit
*
* @return array
*/
function smarty_modifier_explode($separator, $string, ?int $limit = null)
{
// provide $string default to prevent deprecation errors in PHP >=8.1
return explode($separator, $string ?? '', $limit ?? PHP_INT_MAX);
}
26 changes: 26 additions & 0 deletions libs/plugins/modifier.number_format.php
@@ -0,0 +1,26 @@
<?php
/**
* Smarty plugin
*
* @package Smarty
* @subpackage PluginsModifier
*/

/**
* Smarty number_format modifier plugin
* Type: modifier
* Name: number_format
* Purpose: Format a number with grouped thousands
*
* @param float|null $num
* @param int $decimals
* @param string|null $decimal_separator
* @param string|null $thousands_separator
*
* @return string
*/
function smarty_modifier_number_format(?float $num, int $decimals = 0, ?string $decimal_separator = ".", ?string $thousands_separator = ",")
{
// provide $num default to prevent deprecation errors in PHP >=8.1
return number_format($num ?? 0.0, $decimals, $decimal_separator, $thousands_separator);
}
2 changes: 1 addition & 1 deletion libs/plugins/shared.mb_str_replace.php
Expand Up @@ -44,7 +44,7 @@ function smarty_mb_str_replace($search, $replace, $subject, &$count = 0)
}
}
} else {
$parts = mb_split(preg_quote($search), $subject) ?: array();
$parts = mb_split(preg_quote($search), $subject ?? "") ?: array();
$count = count($parts) - 1;
$subject = implode($replace, $parts);
}
Expand Down
@@ -0,0 +1,55 @@
<?php

namespace UnitTests\TemplateSource\TagTests\PluginModifier;

/**
* class for modifier tests
*
* @runTestsInSeparateProcess
* @preserveGlobalState disabled
* @backupStaticAttributes enabled
*/
class PluginModifierExplodeTest extends \PHPUnit_Smarty
{
public function setUp(): void
{
$this->setUpSmarty(__DIR__);
}

/**
* @return void
* @throws \SmartyException
*
* @dataProvider explodeDataProvider
*/
public function testExplode($template, $subject, $expectedString)
{
$this->smarty->assign('subject', $subject);

$tpl = $this->smarty->createTemplate($template);
$res = $this->smarty->fetch($tpl);

$this->assertEquals($expectedString, $res);
}

public function explodeDataProvider()
{
return [
'default' => [
'template' => 'string:{","|explode:$subject|json_encode}',
'subject' => 'a,b,c,d',
'expectedString' => '["a","b","c","d"]',
],
'withNoDelimiterFound' => [
'template' => 'string:{","|explode:$subject|json_encode}',
'subject' => 'abcd',
'expectedString' => '["abcd"]',
],
'withNull' => [
'template' => 'string:{","|explode:$subject|json_encode}',
'subject' => null,
'expectedString' => '[""]',
],
];
}
}
@@ -0,0 +1,59 @@
<?php

namespace UnitTests\TemplateSource\TagTests\PluginModifier;

/**
* class for modifier tests
*
* @runTestsInSeparateProcess
* @preserveGlobalState disabled
* @backupStaticAttributes enabled
*/
class PluginModifierNumberFormatTest extends \PHPUnit_Smarty
{
public function setUp(): void
{
$this->setUpSmarty(__DIR__);
}

/**
* @return void
* @throws \SmartyException
*
* @dataProvider numberFormatDataProvider
*/
public function testNumberFormat($template, $subject, $expectedString)
{
$this->smarty->assign('subject', $subject);

$tpl = $this->smarty->createTemplate($template);

$this->assertEquals($expectedString, $this->smarty->fetch($tpl));
}

public function numberFormatDataProvider()
{
return [
'default' => [
'template' => 'string:{$subject|number_format}',
'subject' => 12345,
'expectedString' => "12,345",
],
'withDecimalDefault' => [
'template' => 'string:{$subject|number_format}',
'subject' => 12345.6789,
'expectedString' => "12,346",
],
'withDecimalAndExtras' => [
'template' => 'string:{$subject|number_format:2:\'-\':\'~\'}',
'subject' => 12345.6789,
'expectedString' => "12~345-68",
],
'withNull' => [
'template' => 'string:{$subject|number_format}',
'subject' => null,
'expectedString' => 0,
],
];
}
}
@@ -0,0 +1,54 @@
<?php

namespace UnitTests\TemplateSource\TagTests\PluginModifier;

/**
* class for modifier tests
*
* @runTestsInSeparateProcess
* @preserveGlobalState disabled
* @backupStaticAttributes enabled
*/
class PluginModifierReplaceTest extends \PHPUnit_Smarty
{
public function setUp(): void
{
$this->setUpSmarty(__DIR__);
}

/**
* @return void
* @throws \SmartyException
*
* @dataProvider replaceDataProvider
*/
public function testReplace($template, $subject, $expectedString)
{
$this->smarty->assign('subject', $subject);

$tpl = $this->smarty->createTemplate($template);

$this->assertEquals($expectedString, $this->smarty->fetch($tpl));
}

public function replaceDataProvider()
{
return [
'default' => [
'template' => 'string:{$subject|replace:",":"-"}',
'subject' => "a,b,c,d",
'expectedString' => "a-b-c-d",
],
'doNothing' => [
'template' => 'string:{$subject|replace:"":""}',
'subject' => "a,b,c,d",
'expectedString' => "a,b,c,d",
],
'withNull' => [
'template' => 'string:{$subject|replace:"":""}',
'subject' => null,
'expectedString' => "",
],
];
}
}

0 comments on commit 4abef5f

Please sign in to comment.