From ff58fb8617e6fd2997205660675bc274c64944fd Mon Sep 17 00:00:00 2001 From: Molkobain Date: Mon, 16 May 2022 16:15:11 +0200 Subject: [PATCH] =?UTF-8?q?N=C2=B05172=20-=20Add=20internal=20helpers=20to?= =?UTF-8?q?=20keep=20usage=20of=20null=20value=20in=20native=20PHP=20metho?= =?UTF-8?q?ds:=20strlen()=20=3D>=20utils::StrLen()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/utils.inc.php | 17 +++++++++++++++++ test/application/UtilsTest.php | 22 ++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/application/utils.inc.php b/application/utils.inc.php index 469c9dd22..6b7c4ac35 100644 --- a/application/utils.inc.php +++ b/application/utils.inc.php @@ -2819,6 +2819,23 @@ HTML; return $aPrefs[$sShortcutId]; } + //---------------------------------------------- + // PHP function helpers + //---------------------------------------------- + + /** + * Helper around the native strlen() PHP method to keep allowing usage of null value when computing the length of a string as null value is no longer allowed with PHP 8.1+ + * + * @param string|null $sString + * + * @return int Length of $sString, 0 if null + * @since 3.0.2 N°5172 + */ + public static function StrLen(?string $sString): int + { + return strlen($sString ?? ''); + } + //---------------------------------------------- // Environment helpers //---------------------------------------------- diff --git a/test/application/UtilsTest.php b/test/application/UtilsTest.php index 462ad1eb7..d5ff5ca8f 100644 --- a/test/application/UtilsTest.php +++ b/test/application/UtilsTest.php @@ -605,4 +605,26 @@ class UtilsTest extends \Combodo\iTop\Test\UnitTest\ItopTestCase '2G' => ['2G', 2 * 1024 * 1024 * 1024], ]; } + + /** + * @param string|null $sString + * @param int $iExpected + * + * @dataProvider StrLenProvider + */ + public function testStrLen(?string $sString, int $iExpected) + { + $iComputed = utils::StrLen($sString); + self::assertEquals($iExpected, $iComputed, 'Length was not as expected'); + } + + public function StrLenProvider(): array + { + return [ + 'null value' => [null, 0], + '0 character' => ['', 0], + '1 character' => ['a', 1], + '5 characters' => ['abcde', 5], + ]; + } }