diff --git a/4dev/tests/Check/CoreLibsCheckColorsTest.php b/4dev/tests/Check/CoreLibsCheckColorsTest.php index 7386bf76..7f0bc1c2 100644 --- a/4dev/tests/Check/CoreLibsCheckColorsTest.php +++ b/4dev/tests/Check/CoreLibsCheckColorsTest.php @@ -321,7 +321,7 @@ final class CoreLibsCheckColorsTest extends TestCase */ public function testValidateColorException(int $flag): void { - $this->expectException(\Exception::class); + $this->expectException(\UnexpectedValueException::class); \CoreLibs\Check\Colors::validateColor('#ffffff', $flag); } } diff --git a/4dev/tests/Combined/CoreLibsCombinedArrayHandlerTest.php b/4dev/tests/Combined/CoreLibsCombinedArrayHandlerTest.php index 2965010a..25ade3a5 100644 --- a/4dev/tests/Combined/CoreLibsCombinedArrayHandlerTest.php +++ b/4dev/tests/Combined/CoreLibsCombinedArrayHandlerTest.php @@ -518,17 +518,20 @@ final class CoreLibsCombinedArrayHandlerTest extends TestCase return [ // error <2 arguments 'too view arguments' => [ + 'ArgumentCountError', 'arrayMergeRecursive needs two or more array arguments', [1] ], // error <2 arrays 'only one array' => [ + 'ArgumentCountError', 'arrayMergeRecursive needs two or more array arguments', [1], true, ], // error element is not array 'non array between array' => [ + 'TypeError', 'arrayMergeRecursive encountered a non array argument', [1], 'string', @@ -947,18 +950,20 @@ final class CoreLibsCombinedArrayHandlerTest extends TestCase */ public function testArrayMergeRecursiveWarningA(): void { - set_error_handler( - static function (int $errno, string $errstr): never { - throw new Exception($errstr, $errno); - }, - E_USER_WARNING - ); + // set_error_handler( + // static function (int $errno, string $errstr): never { + // throw new Exception($errstr, $errno); + // }, + // E_USER_WARNING + // ); $arrays = func_get_args(); // first is expected warning + $exception = array_shift($arrays); $warning = array_shift($arrays); // phpunit 10.0 compatible + $this->expectException($exception); $this->expectExceptionMessage($warning); \CoreLibs\Combined\ArrayHandler::arrayMergeRecursive(...$arrays); diff --git a/www/admin/class_test.check.colors.php b/www/admin/class_test.check.colors.php index 130f6af2..595a0dda 100644 --- a/www/admin/class_test.check.colors.php +++ b/www/admin/class_test.check.colors.php @@ -99,7 +99,7 @@ echo "
"; try { $check = Colors::validateColor('#ab12cd', 99); print "No Exception"; -} catch (\Exception $e) { +} catch (\UnexpectedValueException $e) { print "ERROR: " . $e->getCode() . ": " . $e->getMessage() . "
"; } diff --git a/www/lib/CoreLibs/Check/Colors.php b/www/lib/CoreLibs/Check/Colors.php index 466ff133..cbc93f6f 100644 --- a/www/lib/CoreLibs/Check/Colors.php +++ b/www/lib/CoreLibs/Check/Colors.php @@ -41,6 +41,7 @@ class Colors * @param int|false $rgb_flag flag to check for rgb * @param int|false $hsl_flag flag to check for hsl type * @return bool True if no error, False if error + * @throws \UnexpectedValueException 1: cannot extract color from string */ private static function rgbHslContentCheck( string $color, @@ -52,7 +53,7 @@ class Colors if ( !is_array($color_list = preg_split("/,\s*/", $matches[1] ?? '')) ) { - throw new \Exception("Could not extract color list from rgg/hsl", 3); + throw new \UnexpectedValueException("Could not extract color list from rgg/hsl", 1); } // based on rgb/hsl settings check that entries are valid // rgb: either 0-255 OR 0-100% @@ -124,7 +125,8 @@ class Colors * @param int $flags defaults to ALL, else use | to combined from * HEX_RGB, HEX_RGBA, RGB, RGBA, HSL, HSLA * @return bool True if valid, False if not - * @throws Exception 1: no valid flag set + * @throws \UnexpectedValueException 1: no valid flag set + * @throws \InvalidArgumentException 2: no regex block set */ public static function validateColor(string $color, int $flags = self::ALL): bool { @@ -152,10 +154,10 @@ class Colors } // wrong flag set if ($flags > self::ALL) { - throw new \Exception("Invalid flags parameter: $flags", 1); + throw new \UnexpectedValueException("Invalid flags parameter: $flags", 1); } if (!count($regex_blocks)) { - throw new \Exception("No regex blocks set: $flags", 2); + throw new \InvalidArgumentException("No regex blocks set: $flags", 2); } // build regex diff --git a/www/lib/CoreLibs/Check/Encoding.php b/www/lib/CoreLibs/Check/Encoding.php index 3141e432..577cf9b9 100644 --- a/www/lib/CoreLibs/Check/Encoding.php +++ b/www/lib/CoreLibs/Check/Encoding.php @@ -90,27 +90,26 @@ class Encoding $temp = mb_convert_encoding($string, $to_encoding, $from_encoding); $compare = mb_convert_encoding($temp, $from_encoding, $to_encoding); // if string does not match anymore we have a convert problem - if ($string != $compare) { - $failed = []; - // go through each character and find the ones that do not match - for ($i = 0, $iMax = mb_strlen($string, $from_encoding); $i < $iMax; $i++) { - $char = mb_substr($string, $i, 1, $from_encoding); - $r_char = mb_substr($compare, $i, 1, $from_encoding); - // the ord 194 is a hack to fix the IE7/IE8 - // bug with line break and illegal character - if ( - (($char != $r_char && (!self::$mb_error_char || - in_array(self::$mb_error_char, ['none', 'long', 'entity']))) || - ($char != $r_char && $r_char == self::$mb_error_char && self::$mb_error_char)) && - ord($char) != 194 - ) { - $failed[] = $char; - } - } - return $failed; - } else { + if ($string == $compare) { return false; } + $failed = []; + // go through each character and find the ones that do not match + for ($i = 0, $iMax = mb_strlen($string, $from_encoding); $i < $iMax; $i++) { + $char = mb_substr($string, $i, 1, $from_encoding); + $r_char = mb_substr($compare, $i, 1, $from_encoding); + // the ord 194 is a hack to fix the IE7/IE8 + // bug with line break and illegal character + if ( + (($char != $r_char && (!self::$mb_error_char || + in_array(self::$mb_error_char, ['none', 'long', 'entity']))) || + ($char != $r_char && $r_char == self::$mb_error_char && self::$mb_error_char)) && + ord($char) != 194 + ) { + $failed[] = $char; + } + } + return $failed; } } diff --git a/www/lib/CoreLibs/Combined/ArrayHandler.php b/www/lib/CoreLibs/Combined/ArrayHandler.php index a7cb5f1f..d664310c 100644 --- a/www/lib/CoreLibs/Combined/ArrayHandler.php +++ b/www/lib/CoreLibs/Combined/ArrayHandler.php @@ -245,14 +245,13 @@ class ArrayHandler * bool key flag: true: handle keys as string or int * default false: all keys are string * - * @return array|false merged array + * @return array merged array */ - public static function arrayMergeRecursive(): array|false + public static function arrayMergeRecursive(): array { // croak on not enough arguemnts (we need at least two) if (func_num_args() < 2) { - trigger_error(__FUNCTION__ . ' needs two or more array arguments', E_USER_WARNING); - return false; + throw new \ArgumentCountError(__FUNCTION__ . ' needs two or more array arguments'); } // default key is not string $key_is_string = false; @@ -265,15 +264,13 @@ class ArrayHandler } // check that arrays count is at least two, else we don't have enough to do anything if (count($arrays) < 2) { - trigger_error(__FUNCTION__ . ' needs two or more array arguments', E_USER_WARNING); - return false; + throw new \ArgumentCountError(__FUNCTION__ . ' needs two or more array arguments'); } $merged = []; while ($arrays) { $array = array_shift($arrays); if (!is_array($array)) { - trigger_error(__FUNCTION__ . ' encountered a non array argument', E_USER_WARNING); - return false; + throw new \TypeError(__FUNCTION__ . ' encountered a non array argument'); } if (!$array) { continue;