From 68d7b1573ba2e7ed595568ee0a18ec29c1b3af6f Mon Sep 17 00:00:00 2001 From: Fabian Grutschus Date: Mon, 9 Oct 2023 11:52:48 +0200 Subject: [PATCH] Fixed: handling non-scalars in NumberParse filter filter() now returns $value as-is for non-scalar and boolean values, which fixes triggering a deprection warning since PHP 8.1. Fix for issue #105 Signed-off-by: Fabian Grutschus --- psalm-baseline.xml | 4 +--- src/Filter/NumberParse.php | 6 ++++++ test/Filter/NumberParseTest.php | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+), 3 deletions(-) diff --git a/psalm-baseline.xml b/psalm-baseline.xml index 7cb0e215..49e1312c 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -55,9 +55,6 @@ - - $value - (int) $style (int) $type @@ -773,6 +770,7 @@ formattedToNumberProvider + formatNonNumberProvider diff --git a/src/Filter/NumberParse.php b/src/Filter/NumberParse.php index 4bc9ca84..5c6e3a95 100644 --- a/src/Filter/NumberParse.php +++ b/src/Filter/NumberParse.php @@ -9,8 +9,10 @@ use function intl_get_error_message; use function is_array; +use function is_bool; use function is_float; use function is_int; +use function is_scalar; use function iterator_to_array; /** @@ -149,6 +151,10 @@ public function getFormatter() */ public function filter($value) { + if (! is_scalar($value) || is_bool($value)) { + return $value; + } + if ( ! is_int($value) && ! is_float($value) diff --git a/test/Filter/NumberParseTest.php b/test/Filter/NumberParseTest.php index efd1fade..5517e480 100644 --- a/test/Filter/NumberParseTest.php +++ b/test/Filter/NumberParseTest.php @@ -8,6 +8,7 @@ use LaminasTest\I18n\TestCase; use NumberFormatter; use PHPUnit\Framework\Attributes\DataProvider; +use stdClass; class NumberParseTest extends TestCase { @@ -68,6 +69,38 @@ public static function formattedToNumberProvider(): array ]; } + #[DataProvider('formatNonNumberProvider')] + public function testFormattedWithNonNumbers( + mixed $value, + mixed $expected + ): void { + $filter = new NumberParseFilter('en_US', NumberFormatter::DEFAULT_STYLE, NumberFormatter::TYPE_DOUBLE); + self::assertEquals($expected, $filter->filter($value)); + } + + /** @return array */ + public static function formatNonNumberProvider(): array + { + return [ + [ + null, + null, + ], + [ + [], + [], + ], + [ + new stdClass(), + new stdClass(), + ], + [ + false, + false, + ], + ]; + } + public function testTheNumberFormatterCanBeManuallyInjected(): void { $formatter = new NumberFormatter('en_US', NumberFormatter::DEFAULT_STYLE);