diff --git a/src/ACL/Login.php b/src/ACL/Login.php
index 9522d52..2a38c21 100644
--- a/src/ACL/Login.php
+++ b/src/ACL/Login.php
@@ -240,7 +240,7 @@ class Login
if (false === $this->loginSetOptions($options)) {
// on failure, exit
echo "Could not set options";
- $this->loginTerminate(4000);
+ $this->loginTerminate('Could not set options', 3000);
}
// string key, msg: string, flag: e (error), o (ok)
@@ -392,11 +392,18 @@ class Login
/**
* Wrapper for exit calls
*
- * @param int $code
+ * @param string $message [='']
+ * @param int $code [=0]
* @return void
*/
- protected function loginTerminate($code = 0): void
+ protected function loginTerminate(string $message = '', int $code = 0): void
{
+ // all below 1000 are info end, all above 1000 are critical -> should throw exception?
+ if ($code < 1000) {
+ $this->log->info($message, ['code' => $code]);
+ } else {
+ $this->log->critical($message, ['code' => $code]);
+ }
exit($code);
}
@@ -1810,14 +1817,14 @@ HTML;
$this->login_error = 1;
echo 'Could not connect to DB
';
// if I can't connect to the DB to auth exit hard. No access allowed
- $this->loginTerminate(1000);
+ $this->loginTerminate('Could not connect to DB', 1000);
}
// initial the session if there is no session running already
// check if session exists and could be created
if ($this->session->checkActiveSession() === false) {
$this->login_error = 2;
echo 'No active session found';
- $this->loginTerminate(2000);
+ $this->loginTerminate('No active session found', 2000);
}
// set internal page name
$this->page_name = $this->loginReadPageName();
@@ -1916,7 +1923,7 @@ HTML;
$this->loginPrintLogin();
}
// exit so we don't process anything further, at all
- $this->loginTerminate(3000);
+ $this->loginTerminate('Exit after non ajax page load', 100);
} else {
// if we are on an ajax page reset any POST/GET array data to avoid
// any accidentical processing going on
@@ -1924,7 +1931,7 @@ HTML;
$_GET = [];
// set the action to login so we can trigger special login html return
$_POST['action'] = 'login';
- $_POST['login_exit'] = 3000;
+ $_POST['login_exit'] = 100;
$_POST['login_error'] = $this->loginGetLastErrorCode();
$_POST['login_error_text'] = $this->loginGetErrorMsg(
$this->loginGetLastErrorCode(),
diff --git a/src/Check/Colors.php b/src/Check/Colors.php
index 466ff13..d896664 100644
--- a/src/Check/Colors.php
+++ b/src/Check/Colors.php
@@ -14,8 +14,6 @@ declare(strict_types=1);
namespace CoreLibs\Check;
-use Exception;
-
class Colors
{
/** @var int 1 for HEX rgb */
@@ -41,6 +39,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 +51,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 +123,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 +152,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/src/Check/Encoding.php b/src/Check/Encoding.php
index 3141e43..577cf9b 100644
--- a/src/Check/Encoding.php
+++ b/src/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/src/Combined/ArrayHandler.php b/src/Combined/ArrayHandler.php
index a7cb5f1..d664310 100644
--- a/src/Combined/ArrayHandler.php
+++ b/src/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;
diff --git a/src/Combined/DateTime.php b/src/Combined/DateTime.php
index 2791788..a807a39 100644
--- a/src/Combined/DateTime.php
+++ b/src/Combined/DateTime.php
@@ -105,49 +105,48 @@ class DateTime
bool $show_micro = true
): string {
// check if the timestamp has any h/m/s/ms inside, if yes skip
- if (!preg_match("/(h|m|s|ms)/", (string)$timestamp)) {
- list($timestamp, $ms) = array_pad(explode('.', (string)round((float)$timestamp, 4)), 2, null);
- // if negative remember
- $negative = false;
- if ((int)$timestamp < 0) {
- $negative = true;
- }
- $timestamp = abs((float)$timestamp);
- $timegroups = [86400, 3600, 60, 1];
- $labels = ['d', 'h', 'm', 's'];
- $time_string = '';
- // if timestamp is zero, return zero string
- if ($timestamp == 0) {
- $time_string = '0s';
- } else {
- for ($i = 0, $iMax = count($timegroups); $i < $iMax; $i++) {
- $output = floor((float)$timestamp / $timegroups[$i]);
- $timestamp = (float)$timestamp % $timegroups[$i];
- // output has days|hours|min|sec
- if ($output || $time_string) {
- $time_string .= $output . $labels[$i] . (($i + 1) != count($timegroups) ? ' ' : '');
- }
- }
- }
- // only add ms if we have an ms value
- if ($ms !== null) {
- // if we have ms and it has leading zeros, remove them, but only if it is nut just 0
- $ms = preg_replace("/^0+(\d+)$/", '${1}', $ms);
- if (!is_string($ms) || empty($ms)) {
- $ms = '0';
- }
- // add ms if there
- if ($show_micro) {
- $time_string .= ' ' . $ms . 'ms';
- } elseif (!$time_string) {
- $time_string .= $ms . 'ms';
- }
- }
- if ($negative) {
- $time_string = '-' . $time_string;
- }
+ if (preg_match("/(h|m|s|ms)/", (string)$timestamp)) {
+ return (string)$timestamp;
+ }
+ list($timestamp, $ms) = array_pad(explode('.', (string)round((float)$timestamp, 4)), 2, null);
+ // if negative remember
+ $negative = false;
+ if ((int)$timestamp < 0) {
+ $negative = true;
+ }
+ $timestamp = abs((float)$timestamp);
+ $timegroups = [86400, 3600, 60, 1];
+ $labels = ['d', 'h', 'm', 's'];
+ $time_string = '';
+ // if timestamp is zero, return zero string
+ if ($timestamp == 0) {
+ $time_string = '0s';
} else {
- $time_string = $timestamp;
+ for ($i = 0, $iMax = count($timegroups); $i < $iMax; $i++) {
+ $output = floor((float)$timestamp / $timegroups[$i]);
+ $timestamp = (float)$timestamp % $timegroups[$i];
+ // output has days|hours|min|sec
+ if ($output || $time_string) {
+ $time_string .= $output . $labels[$i] . (($i + 1) != count($timegroups) ? ' ' : '');
+ }
+ }
+ }
+ // only add ms if we have an ms value
+ if ($ms !== null) {
+ // if we have ms and it has leading zeros, remove them, but only if it is nut just 0
+ $ms = preg_replace("/^0+(\d+)$/", '${1}', $ms);
+ if (!is_string($ms) || empty($ms)) {
+ $ms = '0';
+ }
+ // add ms if there
+ if ($show_micro) {
+ $time_string .= ' ' . $ms . 'ms';
+ } elseif (!$time_string) {
+ $time_string .= $ms . 'ms';
+ }
+ }
+ if ($negative) {
+ $time_string = '-' . $time_string;
}
return (string)$time_string;
}
@@ -162,37 +161,36 @@ class DateTime
public static function stringToTime(string|int|float $timestring): string|int|float
{
$timestamp = 0;
- if (preg_match("/(d|h|m|s|ms)/", (string)$timestring)) {
- $timestring = (string)$timestring;
- // pos for preg match read + multiply factor
- $timegroups = [2 => 86400, 4 => 3600, 6 => 60, 8 => 1];
- $matches = [];
- // if start with -, strip and set negative
- $negative = false;
- if (preg_match("/^-/", $timestring)) {
- $negative = true;
- $timestring = substr($timestring, 1);
- }
- // preg match: 0: full string
- // 2, 4, 6, 8 are the to need values
- preg_match("/^((\d+)d ?)?((\d+)h ?)?((\d+)m ?)?((\d+)s ?)?((\d+)ms)?$/", $timestring, $matches);
- // multiply the returned matches and sum them up. the last one (ms) is added with .
- foreach ($timegroups as $i => $time_multiply) {
- if (isset($matches[$i]) && is_numeric($matches[$i])) {
- $timestamp += (float)$matches[$i] * $time_multiply;
- }
- }
- if (isset($matches[10]) && is_numeric($matches[10])) {
- $timestamp .= '.' . $matches[10];
- }
- if ($negative) {
- // cast to flaot so we can do a negative multiplication
- $timestamp = (float)$timestamp * -1;
- }
- return $timestamp;
- } else {
+ if (!preg_match("/(d|h|m|s|ms)/", (string)$timestring)) {
return $timestring;
}
+ $timestring = (string)$timestring;
+ // pos for preg match read + multiply factor
+ $timegroups = [2 => 86400, 4 => 3600, 6 => 60, 8 => 1];
+ $matches = [];
+ // if start with -, strip and set negative
+ $negative = false;
+ if (preg_match("/^-/", $timestring)) {
+ $negative = true;
+ $timestring = substr($timestring, 1);
+ }
+ // preg match: 0: full string
+ // 2, 4, 6, 8 are the to need values
+ preg_match("/^((\d+)d ?)?((\d+)h ?)?((\d+)m ?)?((\d+)s ?)?((\d+)ms)?$/", $timestring, $matches);
+ // multiply the returned matches and sum them up. the last one (ms) is added with .
+ foreach ($timegroups as $i => $time_multiply) {
+ if (isset($matches[$i]) && is_numeric($matches[$i])) {
+ $timestamp += (float)$matches[$i] * $time_multiply;
+ }
+ }
+ if (isset($matches[10]) && is_numeric($matches[10])) {
+ $timestamp .= '.' . $matches[10];
+ }
+ if ($negative) {
+ // cast to flaot so we can do a negative multiplication
+ $timestamp = (float)$timestamp * -1;
+ }
+ return $timestamp;
}
/**
@@ -323,36 +321,36 @@ class DateTime
*
* @param string $start_date start date string in YYYY-MM-DD
* @param string $end_date end date string in YYYY-MM-DD
- * @return int|bool false on error
- * or int -1 (se) as difference
+ * @return int int -1 (se) as difference
+ * @throws \UnexpectedValueException On empty start/end values
*/
- public static function compareDate(string $start_date, string $end_date): int|bool
+ public static function compareDate(string $start_date, string $end_date): int
{
// pre check for empty or wrong
- if ($start_date == '--' || $end_date == '--' || !$start_date || !$end_date) {
- return false;
+ if ($start_date == '--' || $end_date == '--' || empty($start_date) || empty($end_date)) {
+ throw new \UnexpectedValueException('Start or End date not set or are just "--"', 1);
}
// if invalid, quit
if (($start_timestamp = strtotime($start_date)) === false) {
- return false;
+ throw new \UnexpectedValueException("Error parsing start date through strtotime()", 2);
}
if (($end_timestamp = strtotime($end_date)) === false) {
- return false;
+ throw new \UnexpectedValueException("Error parsing end date through strtotime()", 3);
}
+ $comp = 0;
// convert anything to Y-m-d and then to timestamp
// this is to remove any time parts
$start_timestamp = strtotime(date('Y-m-d', $start_timestamp));
$end_timestamp = strtotime(date('Y-m-d', $end_timestamp));
// compare, or end with false
if ($start_timestamp < $end_timestamp) {
- return -1;
+ $comp = -1;
} elseif ($start_timestamp == $end_timestamp) {
- return 0;
+ $comp = 0;
} elseif ($start_timestamp > $end_timestamp) {
- return 1;
- } else {
- return false;
+ $comp = 1;
}
+ return $comp;
}
/**
@@ -366,32 +364,32 @@ class DateTime
*
* @param string $start_datetime start date/time in YYYY-MM-DD HH:mm:ss
* @param string $end_datetime end date/time in YYYY-MM-DD HH:mm:ss
- * @return int|bool false for error
- * or -1 (se) as difference
+ * @return int -1 (se) as difference
+ * @throws \UnexpectedValueException On empty start/end values
*/
- public static function compareDateTime(string $start_datetime, string $end_datetime): int|bool
+ public static function compareDateTime(string $start_datetime, string $end_datetime): int
{
// pre check for empty or wrong
- if ($start_datetime == '--' || $end_datetime == '--' || !$start_datetime || !$end_datetime) {
- return false;
+ if ($start_datetime == '--' || $end_datetime == '--' || empty($start_datetime) || empty($end_datetime)) {
+ throw new \UnexpectedValueException('Start or end timestamp not set or are just "--"', 1);
}
// quit if invalid timestamp
if (($start_timestamp = strtotime($start_datetime)) === false) {
- return false;
+ throw new \UnexpectedValueException("Error parsing start timestamp through strtotime()", 2);
}
if (($end_timestamp = strtotime($end_datetime)) === false) {
- return false;
+ throw new \UnexpectedValueException("Error parsing end timestamp through strtotime()", 3);
}
+ $comp = 0;
// compare, or return false
if ($start_timestamp < $end_timestamp) {
- return -1;
+ $comp = -1;
} elseif ($start_timestamp == $end_timestamp) {
- return 0;
+ $comp = 0;
} elseif ($start_timestamp > $end_timestamp) {
- return 1;
- } else {
- return false;
+ $comp = 1;
}
+ return $comp;
}
/**
diff --git a/src/Convert/Colors.php b/src/Convert/Colors.php
index 1c6f4b4..f9f5617 100644
--- a/src/Convert/Colors.php
+++ b/src/Convert/Colors.php
@@ -28,15 +28,15 @@ class Colors
* @param int $green green 0-255
* @param int $blue blue 0-255
* @param bool $hex_prefix default true, prefix with "#"
- * @return string|false rgb in hex values with leading # if set,
- * false for invalid color
+ * @return string rgb in hex values with leading # if set,
+ * @throws \LengthException If any argument is not in the range of 0~255
*/
public static function rgb2hex(
int $red,
int $green,
int $blue,
bool $hex_prefix = true
- ): string|false {
+ ): string {
$hex_color = '';
if ($hex_prefix === true) {
$hex_color = '#';
@@ -44,7 +44,8 @@ class Colors
foreach (['red', 'green', 'blue'] as $color) {
// if not valid, abort
if ($$color < 0 || $$color > 255) {
- return false;
+ throw new \LengthException('Argument value ' . $$color . ' for color ' . $color
+ . ' is not in the range of 0 to 255', 1);
}
// pad left with 0
$hex_color .= str_pad(dechex($$color), 2, '0', STR_PAD_LEFT);
@@ -55,37 +56,39 @@ class Colors
/**
* converts a hex RGB color to the int numbers
*
- * @param string $hexStr RGB hexstring
+ * @param string $hex_string RGB hexstring
* @param bool $return_as_string flag to return as string
* @param string $seperator string seperator: default: ","
- * @return string|array|false false on error or array with RGB
- * or a string with the seperator
+ * @return string|array array with RGB
+ * or a string with the seperator
+ * @throws \InvalidArgumentException if hex string is empty
+ * @throws \UnexpectedValueException if the hex string value is not valid
*/
public static function hex2rgb(
- string $hexStr,
+ string $hex_string,
bool $return_as_string = false,
string $seperator = ','
- ): string|array|false {
- $hexStr = preg_replace("/[^0-9A-Fa-f]/", '', $hexStr); // Gets a proper hex string
- if (!is_string($hexStr)) {
- return false;
+ ): string|array {
+ $hex_string = preg_replace("/[^0-9A-Fa-f]/", '', $hex_string); // Gets a proper hex string
+ if (!is_string($hex_string)) {
+ throw new \InvalidArgumentException('hex_string argument cannot be empty', 1);
}
$rgbArray = [];
- if (strlen($hexStr) == 6) {
+ if (strlen($hex_string) == 6) {
// If a proper hex code, convert using bitwise operation.
// No overhead... faster
- $colorVal = hexdec($hexStr);
+ $colorVal = hexdec($hex_string);
$rgbArray['r'] = 0xFF & ($colorVal >> 0x10);
$rgbArray['g'] = 0xFF & ($colorVal >> 0x8);
$rgbArray['b'] = 0xFF & $colorVal;
- } elseif (strlen($hexStr) == 3) {
+ } elseif (strlen($hex_string) == 3) {
// If shorthand notation, need some string manipulations
- $rgbArray['r'] = hexdec(str_repeat(substr($hexStr, 0, 1), 2));
- $rgbArray['g'] = hexdec(str_repeat(substr($hexStr, 1, 1), 2));
- $rgbArray['b'] = hexdec(str_repeat(substr($hexStr, 2, 1), 2));
+ $rgbArray['r'] = hexdec(str_repeat(substr($hex_string, 0, 1), 2));
+ $rgbArray['g'] = hexdec(str_repeat(substr($hex_string, 1, 1), 2));
+ $rgbArray['b'] = hexdec(str_repeat(substr($hex_string, 2, 1), 2));
} else {
// Invalid hex color code
- return false;
+ throw new \UnexpectedValueException('Invalid hex_string: ' . $hex_string, 2);
}
// returns the rgb string or the associative array
return $return_as_string ? implode($seperator, $rgbArray) : $rgbArray;
@@ -97,20 +100,21 @@ class Colors
* returns:
* array with hue (0-360), sat (0-100%), brightness/value (0-100%)
*
- * @param int $red red 0-255
- * @param int $green green 0-255
- * @param int $blue blue 0-255
- * @return array|false Hue, Sat, Brightness/Value
- * false for input value error
+ * @param int $red red 0-255
+ * @param int $green green 0-255
+ * @param int $blue blue 0-255
+ * @return array Hue, Sat, Brightness/Value
+ * @throws \LengthException If any argument is not in the range of 0~255
*/
- public static function rgb2hsb(int $red, int $green, int $blue): array|false
+ public static function rgb2hsb(int $red, int $green, int $blue): array
{
// check that rgb is from 0 to 255
- foreach (['red', 'green', 'blue'] as $c) {
- if ($$c < 0 || $$c > 255) {
- return false;
+ foreach (['red', 'green', 'blue'] as $color) {
+ if ($$color < 0 || $$color > 255) {
+ throw new \LengthException('Argument value ' . $$color . ' for color ' . $color
+ . ' is not in the range of 0 to 255', 1);
}
- $$c = $$c / 255;
+ $$color = $$color / 255;
}
$MAX = max($red, $green, $blue);
@@ -144,13 +148,13 @@ class Colors
* converts HSB/V to RGB values RGB is full INT
* if HSB/V value is invalid, sets this value to 0
*
- * @param float $H hue 0-360 (int)
- * @param float $S saturation 0-100 (int)
- * @param float $V brightness/value 0-100 (int)
- * @return array|false 0 red/1 green/2 blue array as 0-255
- * false for input value error
+ * @param float $H hue 0-360 (int)
+ * @param float $S saturation 0-100 (int)
+ * @param float $V brightness/value 0-100 (int)
+ * @return array 0 red/1 green/2 blue array as 0-255
+ * @throws \LengthException If any argument is not in the valid range
*/
- public static function hsb2rgb(float $H, float $S, float $V): array|false
+ public static function hsb2rgb(float $H, float $S, float $V): array
{
// check that H is 0 to 359, 360 = 0
// and S and V are 0 to 1
@@ -158,13 +162,13 @@ class Colors
$H = 0;
}
if ($H < 0 || $H > 359) {
- return false;
+ throw new \LengthException('Argument value ' . $H . ' for hue is not in the range of 0 to 359', 1);
}
if ($S < 0 || $S > 100) {
- return false;
+ throw new \LengthException('Argument value ' . $S . ' for saturation is not in the range of 0 to 100', 2);
}
if ($V < 0 || $V > 100) {
- return false;
+ throw new \LengthException('Argument value ' . $V . ' for brightness is not in the range of 0 to 100', 3);
}
// convert to internal 0-1 format
$S /= 100;
@@ -230,20 +234,21 @@ class Colors
* return:
* array with hue (0-360), saturation (0-100%) and luminance (0-100%)
*
- * @param int $red red 0-255
- * @param int $green green 0-255
- * @param int $blue blue 0-255
- * @return array|false hue/sat/luminance
- * false for input value error
+ * @param int $red red 0-255
+ * @param int $green green 0-255
+ * @param int $blue blue 0-255
+ * @return array hue/sat/luminance
+ * @throws \LengthException If any argument is not in the range of 0~255
*/
- public static function rgb2hsl(int $red, int $green, int $blue): array|false
+ public static function rgb2hsl(int $red, int $green, int $blue): array
{
// check that rgb is from 0 to 255
- foreach (['red', 'green', 'blue'] as $c) {
- if ($$c < 0 || $$c > 255) {
- return false;
+ foreach (['red', 'green', 'blue'] as $color) {
+ if ($$color < 0 || $$color > 255) {
+ throw new \LengthException('Argument value ' . $$color . ' for color ' . $color
+ . ' is not in the range of 0 to 255', 1);
}
- $$c = $$c / 255;
+ $$color = $$color / 255;
}
$min = min($red, $green, $blue);
@@ -284,24 +289,25 @@ class Colors
* converts an HSL to RGB
* if HSL value is invalid, set this value to 0
*
- * @param float $hue hue: 0-360 (degrees)
- * @param float $sat saturation: 0-100
- * @param float $lum luminance: 0-100
- * @return array|false red/blue/green 0-255 each
+ * @param float $hue hue: 0-360 (degrees)
+ * @param float $sat saturation: 0-100
+ * @param float $lum luminance: 0-100
+ * @return array red/blue/green 0-255 each
+ * @throws \LengthException If any argument is not in the valid range
*/
- public static function hsl2rgb(float $hue, float $sat, float $lum): array|false
+ public static function hsl2rgb(float $hue, float $sat, float $lum): array
{
if ($hue == 360) {
$hue = 0;
}
if ($hue < 0 || $hue > 359) {
- return false;
+ throw new \LengthException('Argument value ' . $hue . ' for hue is not in the range of 0 to 359', 1);
}
if ($sat < 0 || $sat > 100) {
- return false;
+ throw new \LengthException('Argument value ' . $sat . ' for saturation is not in the range of 0 to 100', 2);
}
if ($lum < 0 || $lum > 100) {
- return false;
+ throw new \LengthException('Argument value ' . $lum . ' for luminance is not in the range of 0 to 100', 3);
}
// calc to internal convert value for hue
$hue = (1 / 360) * $hue;
diff --git a/src/Create/Session.php b/src/Create/Session.php
index f7a0f7f..ca3607e 100644
--- a/src/Create/Session.php
+++ b/src/Create/Session.php
@@ -15,9 +15,6 @@ namespace CoreLibs\Create;
class Session
{
- /** @var string list for errors */
- private string $session_intern_error_str = '';
-
/**
* init a session, if array is empty or array does not have session_name set
* then no auto init is run
@@ -71,17 +68,6 @@ class Session
return true;
}
- /**
- * Return set error string, empty if none set
- * Error strings are only set in the startSession method
- *
- * @return string Last error string
- */
- public function getErrorStr(): string
- {
- return $this->session_intern_error_str;
- }
-
/**
* check if session name is valid
*
@@ -120,13 +106,11 @@ class Session
{
// we can't start sessions on command line
if ($this->checkCliStatus()) {
- $this->session_intern_error_str = '[SESSION] No sessions in php cli';
- return false;
+ throw new \RuntimeException('[SESSION] No sessions in php cli', 1);
}
// if session are OFF
if ($this->getSessionStatus() === PHP_SESSION_DISABLED) {
- $this->session_intern_error_str = '[SESSION] Sessions are disabled';
- return false;
+ throw new \RuntimeException('[SESSION] Sessions are disabled', 2);
}
// session_status
// initial the session if there is no session running already
@@ -139,8 +123,7 @@ class Session
if (!empty($session_name)) {
// invalid session name, abort
if (!$this->checkValidSessionName($session_name)) {
- $this->session_intern_error_str = '[SESSION] Invalid session name: ' . $session_name;
- return false;
+ throw new \UnexpectedValueException('[SESSION] Invalid session name: ' . $session_name, 3);
}
$this->setSessionName($session_name);
}
@@ -149,11 +132,10 @@ class Session
}
// if we still have no active session
if (!$this->checkActiveSession()) {
- $this->session_intern_error_str = '[SESSION] Failed to activate session';
- return false;
+ throw new \RuntimeException('[SESSION] Failed to activate session', 4);
}
if (false === ($session_id = $this->getSessionId())) {
- $this->session_intern_error_str = '[SESSION] getSessionId did not return a session id';
+ throw new \UnexpectedValueException('[SESSION] getSessionId did not return a session id', 5);
}
return $session_id;
}
diff --git a/src/DB/Extended/ArrayIO.php b/src/DB/Extended/ArrayIO.php
index 9b6b734..7c2ed51 100644
--- a/src/DB/Extended/ArrayIO.php
+++ b/src/DB/Extended/ArrayIO.php
@@ -61,6 +61,7 @@ class ArrayIO extends \CoreLibs\DB\IO
* @param \CoreLibs\Logging\Logging $log Logging class
* @param int $base_acl_level Set base acl level, if needed
* @param int $acl_admin Flag if this is an admin ACL access level
+ * @throws \RuntimeException Missing table array or table name entry
*/
public function __construct(
array $db_config,
@@ -83,6 +84,7 @@ class ArrayIO extends \CoreLibs\DB\IO
// error abort if no table array or no table name
if (empty($table_array) || empty($table_name)) {
$this->__dbError(1999, false, 'MAJOR ERROR: Core settings missing');
+ throw new \RuntimeException('MAJOR ERROR: Core settings missing', 1999);
}
// set primary key for given table_array
diff --git a/src/DB/IO.php b/src/DB/IO.php
index 398ba1c..4486b9a 100644
--- a/src/DB/IO.php
+++ b/src/DB/IO.php
@@ -340,6 +340,7 @@ class IO
// 4: convert numeric/floatN to float (CONVERT_NUMERIC)
// 8: convert bytea to string data (CONVERT_BYTEA)
/** @var int type settings as bit mask, 0 for off, anything >2 will aways set 1 too */
+ /** @phan-suppress-next-line PhanInvalidConstantExpression, PhanUndeclaredClassConstant */
private int $convert_type = Convert::off->value;
// FOR BELOW: (This should be private and only readable through some method)
// cursor array for cached readings
@@ -413,6 +414,7 @@ class IO
* phpcs:ignore
* @param array{db_name:string,db_user:string,db_pass:string,db_host:string,db_port:int,db_schema:string,db_encoding:string,db_type:string,db_ssl:string,db_convert_type?:string[]} $db_config DB configuration array
* @param \CoreLibs\Logging\Logging $log Logging class
+ * @throws \RuntimeException If no DB connection can be established on launch
*/
public function __construct(
array $db_config,
@@ -491,6 +493,7 @@ class IO
if (!$this->__connectToDB()) {
$this->__dbError(16);
$this->db_connection_closed = true;
+ throw new \RuntimeException('INIT: No DB Handler found / connect or reconnect failed', 16);
}
}
@@ -973,9 +976,9 @@ class IO
/**
* write an error
*
- * @param integer $error_id Any Error ID, used in debug message string
+ * @param integer $error_id Any Error ID, used in debug message string
* @param \PgSql\Result|false $cursor Optional cursor, passed on to preprocessor
- * @param string $msg optional message added to debug
+ * @param string $msg optional message added to debug
* @return void
*/
protected function __dbError(
diff --git a/src/Debug/FileWriter.php b/src/Debug/FileWriter.php
index c7105bb..d51f692 100644
--- a/src/Debug/FileWriter.php
+++ b/src/Debug/FileWriter.php
@@ -63,7 +63,7 @@ class FileWriter
*
* @param string $string string to write to the file
* @param boolean $enter default true, if set adds a linebreak \n at the end
- * @return bool True for log written, false for not wirrten
+ * @return bool True for log written, false for not written
*/
public static function fdebug(string $string, bool $enter = true): bool
{
@@ -75,7 +75,7 @@ class FileWriter
empty(self::$debug_folder) &&
defined('BASE') && defined('LOG')
) {
- /** @deprecated Do not use this anymore, define path with fsetFolder */
+ /** @deprecated Do not use this anymore, define path with festFolder */
trigger_error(
'fsetFolder must be set first. Setting via LOG_FILE_ID and LOG constants is deprecated',
E_USER_DEPRECATED
diff --git a/src/Language/L10n.php b/src/Language/L10n.php
index dcf97a7..2703415 100644
--- a/src/Language/L10n.php
+++ b/src/Language/L10n.php
@@ -254,7 +254,7 @@ class L10n
}
// if this is still null here, we abort
if ($this->l10n === null) {
- throw new \Exception(
+ throw new \RuntimeException(
"Could not create CoreLibs\Language\Core\GetTextReader object",
E_USER_ERROR
);
diff --git a/src/Output/Image.php b/src/Output/Image.php
index f530ec0..5af6ce3 100644
--- a/src/Output/Image.php
+++ b/src/Output/Image.php
@@ -23,7 +23,8 @@ class Image
* if empty ROOT is choosen
* @param string $cache_source cache path, if not given TMP is used
* @param bool $clear_cache if set to true, will create thumb all the tame
- * @return string|false thumbnail name, or false for error
+ * @return string thumbnail name
+ * @throws \RuntimeException no ImageMagick convert command found
*/
public static function createThumbnail(
string $pic,
@@ -33,7 +34,7 @@ class Image
string $path = '',
string $cache_source = '',
bool $clear_cache = false
- ): string|false {
+ ): string {
// get image type flags
$image_types = [
0 => 'UNKOWN-IMAGE',
@@ -41,7 +42,7 @@ class Image
2 => 'jpg',
3 => 'png'
];
- $return_data = false;
+ $return_data = '';
$CONVERT = '';
// if CONVERT is not defined, abort
/** @phan-suppress-next-line PhanUndeclaredConstant */
@@ -49,7 +50,7 @@ class Image
/** @phan-suppress-next-line PhanUndeclaredConstant */
$CONVERT = CONVERT;
} else {
- return $return_data;
+ throw new \RuntimeException('CONVERT set binary is not executable or CONVERT is not defined');
}
if (!empty($cache_source)) {
$tmp_src = $cache_source;
@@ -69,72 +70,7 @@ class Image
$pic = $tmp[(count($tmp) - 1)];
}
// does this picture exist and is it a picture
- if (file_exists($filename) && is_file($filename)) {
- [$width, $height, $type] = getimagesize($filename) ?: [0, 0, 0];
- $convert_prefix = '';
- $create_file = false;
- $delete_filename = '';
- // check if we can skip the PDF creation: if we have size, if do not have type, we assume type png
- if (!$type) {
- $check_thumb = $tmp_src . 'thumb_' . $pic . '_' . $size_x . 'x' . $size_y . '.' . $image_types[3];
- if (!is_file($check_thumb)) {
- $create_file = true;
- } else {
- $type = 3;
- }
- }
- // if type is not in the list, but returns as PDF, we need to convert to JPEG before
- if (!$type) {
- $output = [];
- $return = null;
- // is this a PDF, if no, return from here with nothing
- $convert_prefix = 'png:';
- # TEMP convert to PNG, we then override the file name
- $convert_string = $CONVERT . ' ' . $filename . ' ' . $convert_prefix . $filename . '_TEMP';
- $status = exec($convert_string, $output, $return);
- $filename .= '_TEMP';
- // for delete, in case we need to glob
- $delete_filename = $filename;
- // find file, if we can't find base name, use -0 as the first one (ignore other pages in multiple ones)
- if (!is_file($filename)) {
- $filename .= '-0';
- }
- [$width, $height, $type] = getimagesize($filename) ?: [0, 0, 0];
- }
- // if no size given, set size to original
- if (!$size_x || $size_x < 1) {
- $size_x = $width;
- }
- if (!$size_y || $size_y < 1) {
- $size_y = $height;
- }
- $thumb = 'thumb_' . $pic . '_' . $size_x . 'x' . $size_y . '.' . $image_types[$type];
- $thumbnail = $tmp_src . $thumb;
- // check if we already have this picture converted
- if (!is_file($thumbnail) || $clear_cache == true) {
- // convert the picture
- if ($width > $size_x) {
- $convert_string = $CONVERT . ' -geometry ' . $size_x . 'x ' . $filename . ' ' . $thumbnail;
- $status = exec($convert_string, $output, $return);
- // get the size of the converted data, if converted
- if (is_file($thumbnail)) {
- [$width, $height, $type] = getimagesize($thumbnail) ?: [0, 0, 0];
- }
- }
- if ($height > $size_y) {
- $convert_string = $CONVERT . ' -geometry x' . $size_y . ' ' . $filename . ' ' . $thumbnail;
- $status = exec($convert_string, $output, $return);
- }
- }
- if (!is_file($thumbnail)) {
- copy($filename, $thumbnail);
- }
- $return_data = $thumb;
- // if we have a delete filename, delete here with glob
- if ($delete_filename) {
- array_map('unlink', glob($delete_filename . '*') ?: []);
- }
- } else {
+ if (!file_exists($filename) || !is_file($filename)) {
if (!empty($dummy) && strstr($dummy, '/') === false) {
// check if we have the "dummy" image flag set
$filename = PICTURES . ICONS . strtoupper($dummy) . ".png";
@@ -142,11 +78,77 @@ class Image
if (!empty($dummy) && file_exists($filename) && is_file($filename)) {
$return_data = $filename;
} else {
- $return_data = false;
+ throw new \Exception('Could not set dummy return file: ' . $dummy . ' in ' . $filename);
}
} else {
- $filename = $dummy;
+ $return_data = $dummy;
}
+ return $return_data;
+ }
+ // resize image
+ [$width, $height, $type] = getimagesize($filename) ?: [0, 0, 0];
+ $convert_prefix = '';
+ $create_file = false;
+ $delete_filename = '';
+ // check if we can skip the PDF creation: if we have size, if do not have type, we assume type png
+ if (!$type) {
+ $check_thumb = $tmp_src . 'thumb_' . $pic . '_' . $size_x . 'x' . $size_y . '.' . $image_types[3];
+ if (!is_file($check_thumb)) {
+ $create_file = true;
+ } else {
+ $type = 3;
+ }
+ }
+ // if type is not in the list, but returns as PDF, we need to convert to JPEG before
+ if (!$type) {
+ $output = [];
+ $return = null;
+ // is this a PDF, if no, return from here with nothing
+ $convert_prefix = 'png:';
+ # TEMP convert to PNG, we then override the file name
+ $convert_string = $CONVERT . ' ' . $filename . ' ' . $convert_prefix . $filename . '_TEMP';
+ $status = exec($convert_string, $output, $return);
+ $filename .= '_TEMP';
+ // for delete, in case we need to glob
+ $delete_filename = $filename;
+ // find file, if we can't find base name, use -0 as the first one (ignore other pages in multiple ones)
+ if (!is_file($filename)) {
+ $filename .= '-0';
+ }
+ [$width, $height, $type] = getimagesize($filename) ?: [0, 0, 0];
+ }
+ // if no size given, set size to original
+ if (!$size_x || $size_x < 1) {
+ $size_x = $width;
+ }
+ if (!$size_y || $size_y < 1) {
+ $size_y = $height;
+ }
+ $thumb = 'thumb_' . $pic . '_' . $size_x . 'x' . $size_y . '.' . $image_types[$type];
+ $thumbnail = $tmp_src . $thumb;
+ // check if we already have this picture converted
+ if (!is_file($thumbnail) || $clear_cache == true) {
+ // convert the picture
+ if ($width > $size_x) {
+ $convert_string = $CONVERT . ' -geometry ' . $size_x . 'x ' . $filename . ' ' . $thumbnail;
+ $status = exec($convert_string, $output, $return);
+ // get the size of the converted data, if converted
+ if (is_file($thumbnail)) {
+ [$width, $height, $type] = getimagesize($thumbnail) ?: [0, 0, 0];
+ }
+ }
+ if ($height > $size_y) {
+ $convert_string = $CONVERT . ' -geometry x' . $size_y . ' ' . $filename . ' ' . $thumbnail;
+ $status = exec($convert_string, $output, $return);
+ }
+ }
+ if (!is_file($thumbnail)) {
+ copy($filename, $thumbnail);
+ }
+ $return_data = $thumb;
+ // if we have a delete filename, delete here with glob
+ if ($delete_filename) {
+ array_map('unlink', glob($delete_filename . '*') ?: []);
}
return $return_data;
}
@@ -173,7 +175,9 @@ class Image
* set to false to not use (default true)
* to use quick but less nice version
* @param int $jpeg_quality default 80, set image quality for jpeg only
- * @return string|false thumbnail with path
+ * @return string thumbnail with path
+ * @throws \UnexpectedValueException input values for filename or cache_folder are wrong
+ * @throws \RuntimeException convert (gd) failed
*/
public static function createThumbnailSimple(
string $filename,
@@ -185,8 +189,9 @@ class Image
bool $use_cache = true,
bool $high_quality = true,
int $jpeg_quality = 80
- ): string|false {
+ ): string {
$thumbnail = false;
+ $exception_message = 'Could not create thumbnail';
// $this->debug('IMAGE PREPARE', "FILE: $filename (exists "
// .(string)file_exists($filename)."), WIDTH: $thumb_width, HEIGHT: $thumb_height");
if (
@@ -210,12 +215,17 @@ class Image
}
// check that input image exists and is either jpeg or png
// also fail if the basic CACHE folder does not exist at all
- if (
- !file_exists($filename) ||
- !is_dir($cache_folder) ||
- !is_writable($cache_folder)
- ) {
- return $thumbnail;
+ if (!file_exists($filename)) {
+ // return $thumbnail;
+ throw new \UnexpectedValueException('Missing image file: ' . $filename);
+ }
+ if (!is_dir($cache_folder)) {
+ // return $thumbnail;
+ throw new \UnexpectedValueException('Cache folder is not a directory: ' . $cache_folder);
+ }
+ if (!is_writable($cache_folder)) {
+ // return $thumbnail;
+ throw new \UnexpectedValueException('Cache folder is not writeable: ' . $cache_folder);
}
// $this->debug('IMAGE PREPARE', "FILENAME OK, THUMB WIDTH/HEIGHT OK");
[$inc_width, $inc_height, $img_type] = getimagesize($filename) ?: [0, 0, null];
@@ -280,12 +290,18 @@ class Image
// image, copy source image, offset in image, source x/y, new size, source image size
$thumb = imagecreatetruecolor($thumb_width_r, $thumb_height_r);
if ($thumb === false) {
- return false;
+ throw new \RuntimeException(
+ 'imagecreatetruecolor failed: ' . $thumbnail . ', ' . $filename,
+ 1
+ );
}
if ($img_type == IMAGETYPE_PNG) {
$imagecolorallocatealpha = imagecolorallocatealpha($thumb, 0, 0, 0, 127);
if ($imagecolorallocatealpha === false) {
- return false;
+ throw new \RuntimeException(
+ 'imagecolorallocatealpha failed: ' . $thumbnail . ', ' . $filename,
+ 2
+ );
}
// preservere transaprency
imagecolortransparent(
@@ -347,7 +363,10 @@ class Image
imagedestroy($source);
imagedestroy($thumb);
} else {
- $thumbnail = false;
+ throw new \RuntimeException(
+ 'Invalid source image file. Only JPEG/PNG are allowed: ' . $filename,
+ 3
+ );
}
}
} else {
@@ -388,14 +407,20 @@ class Image
}
$thumb = imagecreatetruecolor($thumb_width, $thumb_height);
if ($thumb === false) {
- return false;
+ throw new \RuntimeException(
+ 'imagecreatetruecolor dummy failed: ' . $thumbnail . ', ' . $filename,
+ 3
+ );
}
// add outside border px = 5% (rounded up)
// eg 50px -> 2.5px
$gray = imagecolorallocate($thumb, 200, 200, 200);
$white = imagecolorallocate($thumb, 255, 255, 255);
if ($gray === false || $white === false) {
- return false;
+ throw new \RuntimeException(
+ 'imagecolorallocate/imagecolorallocate dummy failed: ' . $thumbnail . ', ' . $filename,
+ 2
+ );
}
// fill gray background
imagefill($thumb, 0, 0, $gray);
@@ -430,7 +455,11 @@ class Image
// add web path
$thumbnail = $thumbnail_web_path . $thumbnail;
}
- // either return false or the thumbnail name + output path web
+ // if still false -> throw exception
+ if ($thumbnail === false) {
+ throw new \RuntimeException($exception_message);
+ }
+ // else return the thumbnail name + output path web
return $thumbnail;
}
diff --git a/src/Security/SymmetricEncryption.php b/src/Security/SymmetricEncryption.php
index b106cea..2586e94 100644
--- a/src/Security/SymmetricEncryption.php
+++ b/src/Security/SymmetricEncryption.php
@@ -27,6 +27,7 @@ class SymmetricEncryption
* @param string $message Message to encrypt
* @param string $key Encryption key (as hex string)
* @return string
+ * @throws \Exception
* @throws \RangeException
*/
public static function encrypt(string $message, string $key): string
@@ -34,7 +35,7 @@ class SymmetricEncryption
try {
$key = CreateKey::hex2bin($key);
} catch (SodiumException $e) {
- throw new \Exception('Invalid hex key');
+ throw new \UnexpectedValueException('Invalid hex key');
}
if (mb_strlen($key, '8bit') !== SODIUM_CRYPTO_SECRETBOX_KEYBYTES) {
throw new \RangeException(
@@ -84,10 +85,10 @@ class SymmetricEncryption
$key
);
} catch (SodiumException $e) {
- throw new \Exception('Invalid ciphertext (too short)');
+ throw new \UnexpectedValueException('Invalid ciphertext (too short)');
}
if (!is_string($plain)) {
- throw new \Exception('Invalid Key');
+ throw new \UnexpectedValueException('Invalid Key');
}
sodium_memzero($ciphertext);
sodium_memzero($key);
diff --git a/test/phpunit/ACL/CoreLibsACLLoginTest.php b/test/phpunit/ACL/CoreLibsACLLoginTest.php
index 60958dc..e2a28b0 100644
--- a/test/phpunit/ACL/CoreLibsACLLoginTest.php
+++ b/test/phpunit/ACL/CoreLibsACLLoginTest.php
@@ -167,8 +167,10 @@ final class CoreLibsACLLoginTest extends TestCase
// change_password, pw_username, pw_old_password, pw_new_password,
// pw_new_password_confirm
// 3[session]: override session set
- // 4[error] : expected error code, 0 for all ok, 3000 for login page view
- // note that 1000 (no db), 2000 (no session) must be tested too
+ // 4[error] : expected error code, 0 for all ok, 100 for login page view
+ // note that 1000 (no db), 2000 (no session), 3000 (options set error)
+ // must be tested too
+ // <1000 info, >=1000 critical error
// 5[return] : expected return array, eg login_error code,
// or other info data to match
$tests = [
@@ -180,7 +182,7 @@ final class CoreLibsACLLoginTest extends TestCase
[],
[],
[],
- 3000,
+ 100,
[
'login_error' => 0,
'error_string' => 'Success: No error',
@@ -198,7 +200,7 @@ final class CoreLibsACLLoginTest extends TestCase
[],
[],
[],
- 3000,
+ 100,
[
'login_error' => 0,
'error_string' => 'Success: No error',
@@ -221,7 +223,7 @@ final class CoreLibsACLLoginTest extends TestCase
[],
[],
[],
- 3000,
+ 100,
[
'login_error' => 0,
'error_string' => 'Success: No error',
@@ -308,7 +310,7 @@ final class CoreLibsACLLoginTest extends TestCase
'login_password' => '',
],
[],
- 3000,
+ 100,
[
'login_error' => 102,
'error_string' => 'Fatal Error: '
@@ -329,7 +331,7 @@ final class CoreLibsACLLoginTest extends TestCase
'login_password' => 'abc',
],
[],
- 3000,
+ 100,
[
'login_error' => 102,
'error_string' => 'Fatal Error: '
@@ -350,7 +352,7 @@ final class CoreLibsACLLoginTest extends TestCase
'login_password' => '',
],
[],
- 3000,
+ 100,
[
'login_error' => 102,
'error_string' => 'Fatal Error: '
@@ -371,7 +373,7 @@ final class CoreLibsACLLoginTest extends TestCase
'login_password' => 'abc',
],
[],
- 3000,
+ 100,
[
'login_error' => 1010,
'error_string' => 'Fatal Error: '
@@ -395,7 +397,7 @@ final class CoreLibsACLLoginTest extends TestCase
'login_password' => 'abc',
],
[],
- 3000,
+ 100,
[
// default password is plain text
'login_error' => 1012,
@@ -421,7 +423,7 @@ final class CoreLibsACLLoginTest extends TestCase
'login_password' => 'admin',
],
[],
- 3000,
+ 100,
[
'login_error' => 106,
'error_string' => 'Fatal Error: '
@@ -446,7 +448,7 @@ final class CoreLibsACLLoginTest extends TestCase
'login_password' => 'admin',
],
[],
- 3000,
+ 100,
[
'login_error' => 104,
'error_string' => 'Fatal Error: '
@@ -471,7 +473,7 @@ final class CoreLibsACLLoginTest extends TestCase
'login_password' => 'admin',
],
[],
- 3000,
+ 100,
[
'login_error' => 105,
'error_string' => 'Fatal Error: '
@@ -520,7 +522,7 @@ final class CoreLibsACLLoginTest extends TestCase
'login_password' => 'admin',
],
[],
- 3000,
+ 100,
[
'login_error' => 107,
'error_string' => 'Fatal Error: '
@@ -574,7 +576,7 @@ final class CoreLibsACLLoginTest extends TestCase
'login_password' => 'admin',
],
[],
- 3000,
+ 100,
[
'login_error' => 107,
'error_string' => 'Fatal Error: '
@@ -600,7 +602,7 @@ final class CoreLibsACLLoginTest extends TestCase
'login_password' => 'admin',
],
[],
- 3000,
+ 100,
[
'login_error' => 107,
'error_string' => 'Fatal Error: '
@@ -625,7 +627,7 @@ final class CoreLibsACLLoginTest extends TestCase
'login_password' => 'admin',
],
[],
- 3000,
+ 100,
[
'login_error' => 108,
'error_string' => 'Fatal Error: '
@@ -761,7 +763,7 @@ final class CoreLibsACLLoginTest extends TestCase
],
[],
[],
- 3000,
+ 100,
[
'login_error' => 1010,
'error_string' => 'Fatal Error: '
@@ -853,7 +855,7 @@ final class CoreLibsACLLoginTest extends TestCase
],
[],
[],
- 3000,
+ 100,
[
'login_error' => 1101,
'error_string' => 'Fatal Error: '
@@ -909,7 +911,7 @@ final class CoreLibsACLLoginTest extends TestCase
],
[],
[],
- 3000,
+ 100,
[
'login_error' => 1102,
'error_string' => 'Fatal Error: '
@@ -965,7 +967,7 @@ final class CoreLibsACLLoginTest extends TestCase
],
[],
[],
- 3000,
+ 100,
[
'login_error' => 1102,
'error_string' => 'Fatal Error: '
@@ -992,7 +994,7 @@ final class CoreLibsACLLoginTest extends TestCase
],
[],
[],
- 3000,
+ 100,
[
'login_error' => 1102,
'error_string' => 'Fatal Error: '
@@ -1133,7 +1135,7 @@ final class CoreLibsACLLoginTest extends TestCase
$login_mock->expects($this->any())
->method('loginTerminate')
->will(
- $this->returnCallback(function ($code) {
+ $this->returnCallback(function ($message, $code) {
throw new \Exception('', $code);
})
);
@@ -1227,7 +1229,11 @@ final class CoreLibsACLLoginTest extends TestCase
$login_mock->loginSetMaxLoginErrorCount($mock_settings['max_login_error_count']);
// temporary wrong password
$_POST['login_password'] = 'wrong';
- for ($run = 1, $max_run = $login_mock->loginGetMaxLoginErrorCount(); $run <= $max_run; $run++) {
+ for (
+ $run = 1, $max_run = $login_mock->loginGetMaxLoginErrorCount();
+ $run <= $max_run;
+ $run++
+ ) {
try {
$login_mock->loginMainCall();
} catch (\Exception $e) {
@@ -1475,10 +1481,10 @@ final class CoreLibsACLLoginTest extends TestCase
// print "AJAX: " . $login_mock->loginGetAjaxFlag() . "\n";
// print "AJAX GLOBAL: " . ($GLOBALS['AJAX_PAGE'] ?? '{f}') . "\n";
// print "Login error expext: " . ($expected['login_error'] ?? '{0}') . "\n";
- // if this is 3000, then we do further error checks
+ // if this is 100, then we do further error checks
if (
- $e->getCode() == 3000 ||
- !empty($_POST['login_exit']) && $_POST['login_exit'] == 3000
+ $e->getCode() == 100 ||
+ !empty($_POST['login_exit']) && $_POST['login_exit'] == 100
) {
$this->assertEquals(
$expected['login_error'],
@@ -1816,7 +1822,7 @@ final class CoreLibsACLLoginTest extends TestCase
$login_mock->expects($this->any())
->method('loginTerminate')
->will(
- $this->returnCallback(function ($code) {
+ $this->returnCallback(function ($message, $code) {
throw new \Exception('', $code);
})
);
@@ -1930,7 +1936,7 @@ final class CoreLibsACLLoginTest extends TestCase
$login_mock->expects($this->any())
->method('loginTerminate')
->will(
- $this->returnCallback(function ($code) {
+ $this->returnCallback(function ($message, $code) {
throw new \Exception('', $code);
})
);
@@ -2018,7 +2024,7 @@ final class CoreLibsACLLoginTest extends TestCase
$login_mock->expects($this->any())
->method('loginTerminate')
->will(
- $this->returnCallback(function ($code) {
+ $this->returnCallback(function ($message, $code) {
throw new \Exception('', $code);
})
);
@@ -2114,7 +2120,7 @@ final class CoreLibsACLLoginTest extends TestCase
$login_mock->expects($this->any())
->method('loginTerminate')
->will(
- $this->returnCallback(function ($code) {
+ $this->returnCallback(function ($message, $code) {
throw new \Exception('', $code);
})
);
diff --git a/test/phpunit/Check/CoreLibsCheckColorsTest.php b/test/phpunit/Check/CoreLibsCheckColorsTest.php
index 7386bf7..3eeb59c 100644
--- a/test/phpunit/Check/CoreLibsCheckColorsTest.php
+++ b/test/phpunit/Check/CoreLibsCheckColorsTest.php
@@ -13,6 +13,11 @@ use PHPUnit\Framework\TestCase;
*/
final class CoreLibsCheckColorsTest extends TestCase
{
+ /**
+ * Undocumented function
+ *
+ * @return array
+ */
public function validateColorProvider(): array
{
/*
@@ -321,7 +326,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/test/phpunit/Combined/CoreLibsCombinedArrayHandlerTest.php b/test/phpunit/Combined/CoreLibsCombinedArrayHandlerTest.php
index 2965010..25ade3a 100644
--- a/test/phpunit/Combined/CoreLibsCombinedArrayHandlerTest.php
+++ b/test/phpunit/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/test/phpunit/Combined/CoreLibsCombinedDateTimeTest.php b/test/phpunit/Combined/CoreLibsCombinedDateTimeTest.php
index ddc03ca..7bd68d6 100644
--- a/test/phpunit/Combined/CoreLibsCombinedDateTimeTest.php
+++ b/test/phpunit/Combined/CoreLibsCombinedDateTimeTest.php
@@ -309,45 +309,73 @@ final class CoreLibsCombinedDateTimeTest extends TestCase
'2020-12-12',
'2021-12-12',
-1,
+ null,
+ null,
],
'dates equal' => [
'2020-12-12',
'2020-12-12',
0,
+ null,
+ null,
],
'second date smaller' => [
'2021-12-12',
'2020-12-12',
- 1
+ 1,
+ null,
+ null,
],
'dates equal with different time' => [
'2020-12-12 12:12:12',
'2020-12-12 13:13:13',
0,
+ null,
+ null,
],
'invalid dates --' => [
'--',
'--',
- false
+ false,
+ 'UnexpectedValueException',
+ 1,
],
'empty dates' => [
'',
'',
- false
+ false,
+ 'UnexpectedValueException',
+ 1
],
'invalid dates' => [
'not a date',
'not a date either',
false,
+ 'UnexpectedValueException',
+ 2
+ ],
+ 'invalid end date' => [
+ '1990-01-01',
+ 'not a date either',
+ false,
+ 'UnexpectedValueException',
+ 3
],
'out of bound dates' => [
'1900-1-1',
'9999-12-31',
- -1
+ -1,
+ null,
+ null,
]
];
}
+ /**
+ * Undocumented function
+ *
+ * @return array
+ */
public function dateTimeCompareProvider(): array
{
return [
@@ -355,51 +383,85 @@ final class CoreLibsCombinedDateTimeTest extends TestCase
'2020-12-12',
'2021-12-12',
-1,
+ null,
+ null,
],
'dates equal no timestamp' => [
'2020-12-12',
'2020-12-12',
0,
+ null,
+ null,
],
'second date smaller no timestamp' => [
'2021-12-12',
'2020-12-12',
- 1
+ 1,
+ null,
+ null,
],
'date equal first time smaller' => [
'2020-12-12 12:12:12',
'2020-12-12 13:13:13',
-1,
+ null,
+ null,
],
'date equal time equal' => [
'2020-12-12 12:12:12',
'2020-12-12 12:12:12',
0,
+ null,
+ null,
],
'date equal second time smaller' => [
'2020-12-12 13:13:13',
'2020-12-12 12:12:12',
1,
+ null,
+ null,
],
'valid date invalid time' => [
'2020-12-12 13:99:13',
'2020-12-12 12:12:99',
false,
+ 'UnexpectedValueException',
+ 2
+ ],
+ 'valid date invalid end time' => [
+ '2020-12-12 13:12:13',
+ '2020-12-12 12:12:99',
+ false,
+ 'UnexpectedValueException',
+ 3
],
'invalid datetimes --' => [
'--',
'--',
false,
+ 'UnexpectedValueException',
+ 1
],
'empty datetimess' => [
'',
'',
false,
+ 'UnexpectedValueException',
+ 1
],
- 'invalid datetimes' => [
+ 'invalid date times' => [
'not a date',
'not a date either',
false,
+ 'UnexpectedValueException',
+ 2
+ ],
+ 'invalid end date time' => [
+ '1990-01-01 12:12:12',
+ 'not a date either',
+ false,
+ 'UnexpectedValueException',
+ 3
],
];
}
@@ -614,10 +676,21 @@ final class CoreLibsCombinedDateTimeTest extends TestCase
* @param string $input_a
* @param string $input_b
* @param int|bool $expected
+ * @param string|null $exception
+ * @param int|null $exception_code
* @return void
*/
- public function testCompareDate(string $input_a, string $input_b, $expected): void
- {
+ public function testCompareDate(
+ string $input_a,
+ string $input_b,
+ int|bool $expected,
+ ?string $exception,
+ ?int $exception_code
+ ): void {
+ if ($expected === false) {
+ $this->expectException($exception);
+ $this->expectExceptionCode($exception_code);
+ }
$this->assertEquals(
$expected,
\CoreLibs\Combined\DateTime::compareDate($input_a, $input_b)
@@ -634,10 +707,21 @@ final class CoreLibsCombinedDateTimeTest extends TestCase
* @param string $input_a
* @param string $input_b
* @param int|bool $expected
+ * @param string|null $exception
+ * @param int|null $exception_code
* @return void
*/
- public function testCompareDateTime(string $input_a, string $input_b, $expected): void
- {
+ public function testCompareDateTime(
+ string $input_a,
+ string $input_b,
+ int|bool $expected,
+ ?string $exception,
+ ?int $exception_code
+ ): void {
+ if ($expected === false) {
+ $this->expectException($exception);
+ $this->expectExceptionCode($exception_code);
+ }
$this->assertEquals(
$expected,
\CoreLibs\Combined\DateTime::compareDateTime($input_a, $input_b)
diff --git a/test/phpunit/Convert/CoreLibsConvertColorsTest.php b/test/phpunit/Convert/CoreLibsConvertColorsTest.php
index 7b288f0..aecd3f0 100644
--- a/test/phpunit/Convert/CoreLibsConvertColorsTest.php
+++ b/test/phpunit/Convert/CoreLibsConvertColorsTest.php
@@ -59,6 +59,27 @@ final class CoreLibsConvertColorsTest extends TestCase
3 => false,
4 => false
],
+ 'invalid color red ' => [
+ 0 => -12,
+ 1 => 12,
+ 2 => 12,
+ 3 => false,
+ 4 => false
+ ],
+ 'invalid color green ' => [
+ 0 => 12,
+ 1 => -12,
+ 2 => 12,
+ 3 => false,
+ 4 => false
+ ],
+ 'invalid color blue ' => [
+ 0 => 12,
+ 1 => 12,
+ 2 => -12,
+ 3 => false,
+ 4 => false
+ ],
];
}
@@ -150,10 +171,40 @@ final class CoreLibsConvertColorsTest extends TestCase
'valid' => true,
],
// invalid values
- 'invalid color' => [
- 'rgb' => [-12, 300, 12],
- 'hsb' => [-12, 300, 12],
- 'hsl' => [-12, 300, 12],
+ 'invalid color r/h/h low' => [
+ 'rgb' => [-1, 12, 12],
+ 'hsb' => [-1, 50, 50],
+ 'hsl' => [-1, 50, 50],
+ 'valid' => false,
+ ],
+ 'invalid color r/h/h high' => [
+ 'rgb' => [256, 12, 12],
+ 'hsb' => [361, 50, 50],
+ 'hsl' => [361, 50, 50],
+ 'valid' => false,
+ ],
+ 'invalid color g/s/s low' => [
+ 'rgb' => [12, -1, 12],
+ 'hsb' => [1, -1, 50],
+ 'hsl' => [1, -1, 50],
+ 'valid' => false,
+ ],
+ 'invalid color g/s/s high' => [
+ 'rgb' => [12, 256, 12],
+ 'hsb' => [1, 101, 50],
+ 'hsl' => [1, 101, 50],
+ 'valid' => false,
+ ],
+ 'invalid color b/b/l low' => [
+ 'rgb' => [12, 12, -1],
+ 'hsb' => [1, 50, -1],
+ 'hsl' => [1, 50, -1],
+ 'valid' => false,
+ ],
+ 'invalid color b/b/l high' => [
+ 'rgb' => [12, 12, 256],
+ 'hsb' => [1, 50, 101],
+ 'hsl' => [1, 50, 101],
'valid' => false,
],
];
@@ -246,11 +297,22 @@ final class CoreLibsConvertColorsTest extends TestCase
* @param int $input_r
* @param int $input_g
* @param int $input_b
+ * @param string|bool $expected_hash
* @param string|bool $expected
* @return void
*/
- public function testRgb2hex(int $input_r, int $input_g, int $input_b, $expected_hash, $expected)
- {
+ public function testRgb2hex(
+ int $input_r,
+ int $input_g,
+ int $input_b,
+ string|bool $expected_hash,
+ string|bool $expected
+ ) {
+ // if expected hash is or expected is false, we need to check for
+ // LengthException
+ if ($expected_hash === false || $expected === false) {
+ $this->expectException(\LengthException::class);
+ }
// with #
$this->assertEquals(
$expected_hash,
@@ -292,11 +354,19 @@ final class CoreLibsConvertColorsTest extends TestCase
*/
public function testHex2rgb(
string $input,
- $expected,
- $expected_str,
+ array|bool $expected,
+ string|bool $expected_str,
string $separator,
- $expected_str_sep
+ string|bool $expected_str_sep
): void {
+ if ($expected === false || $expected_str === false || $expected_str_sep === false) {
+ $hex_string = preg_replace("/[^0-9A-Fa-f]/", '', $input);
+ if (!is_string($hex_string)) {
+ $this->expectException(\InvalidArgumentException::class);
+ } else {
+ $this->expectException(\UnexpectedValueException::class);
+ }
+ }
$this->assertEquals(
$expected,
\CoreLibs\Convert\Colors::hex2rgb($input)
@@ -324,8 +394,11 @@ final class CoreLibsConvertColorsTest extends TestCase
* @param array|bool $expected
* @return void
*/
- public function testRgb2hsb(int $input_r, int $input_g, int $input_b, $expected): void
+ public function testRgb2hsb(int $input_r, int $input_g, int $input_b, array|bool $expected): void
{
+ if ($expected === false) {
+ $this->expectException(\LengthException::class);
+ }
$this->assertEquals(
$expected,
\CoreLibs\Convert\Colors::rgb2hsb($input_r, $input_g, $input_b)
@@ -345,8 +418,12 @@ final class CoreLibsConvertColorsTest extends TestCase
* @param array|bool $expected
* @return void
*/
- public function testHsb2rgb(float $input_h, float $input_s, float $input_b, $expected): void
+ public function testHsb2rgb(float $input_h, float $input_s, float $input_b, array|bool $expected): void
{
+ if ($expected === false) {
+ $this->expectException(\LengthException::class);
+ $expected = [];
+ }
$this->assertEquals(
$expected,
\CoreLibs\Convert\Colors::hsb2rgb($input_h, $input_s, $input_b)
@@ -366,8 +443,11 @@ final class CoreLibsConvertColorsTest extends TestCase
* @param array|bool $expected
* @return void
*/
- public function testRgb2hsl(int $input_r, int $input_g, int $input_b, $expected): void
+ public function testRgb2hsl(int $input_r, int $input_g, int $input_b, array|bool $expected): void
{
+ if ($expected === false) {
+ $this->expectException(\LengthException::class);
+ }
$this->assertEquals(
$expected,
\CoreLibs\Convert\Colors::rgb2hsl($input_r, $input_g, $input_b)
@@ -387,8 +467,11 @@ final class CoreLibsConvertColorsTest extends TestCase
* @param array|bool $expected
* @return void
*/
- public function testHsl2rgb($input_h, float $input_s, float $input_l, $expected): void
+ public function testHsl2rgb(int|float $input_h, float $input_s, float $input_l, array|bool $expected): void
{
+ if ($expected === false) {
+ $this->expectException(\LengthException::class);
+ }
$this->assertEquals(
$expected,
\CoreLibs\Convert\Colors::hsl2rgb($input_h, $input_s, $input_l)
@@ -406,11 +489,11 @@ final class CoreLibsConvertColorsTest extends TestCase
*/
public function testHslHsb360hue(): void
{
- $this->assertNotFalse(
+ $this->assertIsArray(
\CoreLibs\Convert\Colors::hsl2rgb(360.0, 90.5, 41.2),
'HSL to RGB with 360 hue'
);
- $this->assertNotFalse(
+ $this->assertIsArray(
\CoreLibs\Convert\Colors::hsb2rgb(360, 95, 78.0),
'HSB to RGB with 360 hue'
);
diff --git a/test/phpunit/Create/CoreLibsCreateSessionTest.php b/test/phpunit/Create/CoreLibsCreateSessionTest.php
index ba97d1a..f9c8910 100644
--- a/test/phpunit/Create/CoreLibsCreateSessionTest.php
+++ b/test/phpunit/Create/CoreLibsCreateSessionTest.php
@@ -30,8 +30,10 @@ final class CoreLibsCreateSessionTest extends TestCase
// setSessionName: true/false,
// checkActiveSession: true/false, [1st call, 2nd call]
// getSessionId: string or false
- // 3: exepcted name (session)
- // 4: expected error string
+ // 3: exepcted name (session)]
+ // 4: Exception thrown on error
+ // 5: exception code, null for none
+ // 6: expected error string
return [
'session parameter' => [
'sessionNameParameter',
@@ -44,7 +46,9 @@ final class CoreLibsCreateSessionTest extends TestCase
'getSessionId' => '1234abcd4567'
],
'sessionNameParameter',
- ''
+ null,
+ null,
+ '',
],
'session globals' => [
'sessionNameGlobals',
@@ -57,7 +61,9 @@ final class CoreLibsCreateSessionTest extends TestCase
'getSessionId' => '1234abcd4567'
],
'sessionNameGlobals',
- ''
+ null,
+ null,
+ '',
],
'session name default' => [
'',
@@ -70,7 +76,9 @@ final class CoreLibsCreateSessionTest extends TestCase
'getSessionId' => '1234abcd4567'
],
'',
- ''
+ null,
+ null,
+ '',
],
// error checks
// 1: we are in cli
@@ -85,6 +93,8 @@ final class CoreLibsCreateSessionTest extends TestCase
'getSessionId' => '1234abcd4567'
],
'',
+ 'RuntimeException',
+ 1,
'[SESSION] No sessions in php cli'
],
// 2: session disabled
@@ -99,6 +109,8 @@ final class CoreLibsCreateSessionTest extends TestCase
'getSessionId' => '1234abcd4567'
],
'',
+ 'RuntimeException',
+ 2,
'[SESSION] Sessions are disabled'
],
// 3: invalid session name: string
@@ -113,6 +125,8 @@ final class CoreLibsCreateSessionTest extends TestCase
'getSessionId' => '1234abcd4567'
],
'',
+ 'UnexpectedValueException',
+ 3,
'[SESSION] Invalid session name: 1invalid$session#;'
],
// 3: invalid session name: only numbers
@@ -127,6 +141,8 @@ final class CoreLibsCreateSessionTest extends TestCase
'getSessionId' => '1234abcd4567'
],
'',
+ 'UnexpectedValueException',
+ 3,
'[SESSION] Invalid session name: 123'
],
// 3: invalid session name: invalid name short
@@ -143,6 +159,8 @@ final class CoreLibsCreateSessionTest extends TestCase
'getSessionId' => '1234abcd4567'
],
'',
+ 'RuntimeException',
+ 4,
'[SESSION] Failed to activate session'
],
// 5: get session id return false
@@ -157,6 +175,8 @@ final class CoreLibsCreateSessionTest extends TestCase
'getSessionId' => false
],
'',
+ 'UnexpectedValueException',
+ 5,
'[SESSION] getSessionId did not return a session id'
],
];
@@ -173,6 +193,7 @@ final class CoreLibsCreateSessionTest extends TestCase
* @param string $type
* @param array $mock_data
* @param string $expected
+ * @param string|null $exception
* @param string $expected_error
* @return void
*/
@@ -181,6 +202,8 @@ final class CoreLibsCreateSessionTest extends TestCase
string $type,
array $mock_data,
string $expected,
+ ?string $exception,
+ ?int $exception_code,
string $expected_error
): void {
// override expected
@@ -224,6 +247,11 @@ final class CoreLibsCreateSessionTest extends TestCase
// regex for session id
$ression_id_regex = "/^\w+$/";
+ if ($exception !== null) {
+ $this->expectException($exception);
+ $this->expectExceptionCode($exception_code);
+ }
+
unset($GLOBALS['SET_SESSION_NAME']);
$session_id = '';
switch ($type) {
@@ -253,13 +281,6 @@ final class CoreLibsCreateSessionTest extends TestCase
$expected,
$session_mock->getSessionName()
);
- } else {
- // false checks
- $this->assertEquals(
- $expected_error,
- $session_mock->getErrorStr(),
- 'error assert'
- );
}
}
diff --git a/test/phpunit/DB/CoreLibsDBIOTest.php b/test/phpunit/DB/CoreLibsDBIOTest.php
index bb24f27..40479e1 100644
--- a/test/phpunit/DB/CoreLibsDBIOTest.php
+++ b/test/phpunit/DB/CoreLibsDBIOTest.php
@@ -445,12 +445,14 @@ final class CoreLibsDBIOTest extends TestCase
{
// 0: connection array
// 1: status after connection
+ // 2: exception name
// 2: info string
// 3: ???
return [
'invalid connection' => [
self::$db_config['invalid'],
false,
+ 'RuntimeException',
"-DB-info-> Connected to db '' with schema 'public' as user "
. "'' at host '' on port '5432' with ssl mode 'allow' **** "
. "-DB-info-> DB IO Class debug output: Yes **** ",
@@ -459,6 +461,7 @@ final class CoreLibsDBIOTest extends TestCase
'valid connection' => [
self::$db_config['valid'],
true,
+ '',
"-DB-info-> Connected to db 'corelibs_db_io_test' with "
. "schema 'public' as user 'corelibs_db_io_test' at host "
. "'localhost' on port '5432' with ssl mode 'allow' **** "
@@ -475,13 +478,21 @@ final class CoreLibsDBIOTest extends TestCase
* @dataProvider connectionProvider
* @testdox Connection will be $expected [$_dataName]
*
+ * @param array $connection
+ * @param bool $expected_status
+ * @param string $exception
+ * @param string $expected_string
* @return void
*/
public function testConnection(
array $connection,
bool $expected_status,
+ string $exception,
string $expected_string
): void {
+ if ($expected_status === false) {
+ $this->expectException($exception);
+ }
$db = new \CoreLibs\DB\IO(
$connection,
self::$log
@@ -722,6 +733,10 @@ final class CoreLibsDBIOTest extends TestCase
*/
public function testGetSetting(string $connection, array $settings): void
{
+ // if settings are all empty -> assume exception
+ if (empty($settings['db_name']) && empty($settings['db_user'])) {
+ $this->expectException('RuntimeException');
+ }
$db = new \CoreLibs\DB\IO(
self::$db_config[$connection],
self::$log