PHP 8.5 fixes and updates
All tested with PHP 8.4 and PHP 8.3 too Major changes: - cube root Math (cbrt) now throws InvalidArgumentException if NAN is returned instead of returning NAN - Byte convert from string to int will throw errors if value is too large (\LengthException) - new flag for returning string type but for this bcmath must be installed (\RuntimeException if no bcmath) - Updated curl class and remove close handler as not needed and deprecated as of PHP 8.5 - Curl phpunit tests: convert string to JSON convert flow for return content check (to avoid per PHP version check) - image close handler for ImageMagick removed as not needed and deprecated as of PHP 8.5 - updated all check calls too use phive tools if possible (except phpunit) and all scripts can have dynamic php version set
This commit is contained in:
@@ -123,47 +123,6 @@ final class CoreLibsConvertByteTest extends TestCase
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function byteStringProvider(): array
|
||||
{
|
||||
return [
|
||||
'negative number' => [
|
||||
0 => '-117.42 MB',
|
||||
1 => -123123794,
|
||||
2 => -117420000,
|
||||
],
|
||||
'megabyte' => [
|
||||
0 => '242.98 MB',
|
||||
1 => 254782996,
|
||||
2 => 242980000
|
||||
],
|
||||
'megabyte si' => [
|
||||
0 => '254.78 MiB',
|
||||
1 => 267156193,
|
||||
2 => 254780000
|
||||
],
|
||||
'petabyte' => [
|
||||
0 => '1 EiB',
|
||||
1 => 1152921504606846976,
|
||||
2 => 1000000000000000000,
|
||||
],
|
||||
'max int' => [
|
||||
0 => '8 EB',
|
||||
1 => -9223372036854775807 - 1,
|
||||
2 => 8000000000000000000,
|
||||
],
|
||||
'exabyte, overflow' => [
|
||||
0 => '867.36EB',
|
||||
1 => 3873816255479021568,
|
||||
2 => 363028535651074048,
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
@@ -180,7 +139,7 @@ final class CoreLibsConvertByteTest extends TestCase
|
||||
* @return void
|
||||
*/
|
||||
public function testHumanReadableByteFormat(
|
||||
$input,
|
||||
string|int|float $input,
|
||||
string $expected,
|
||||
string $expected_si,
|
||||
string $expected_no_space,
|
||||
@@ -217,6 +176,73 @@ final class CoreLibsConvertByteTest extends TestCase
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function byteStringProvider(): array
|
||||
{
|
||||
return [
|
||||
'negative number' => [
|
||||
0 => '-117.42 MB',
|
||||
1 => -123123794,
|
||||
2 => -117420000,
|
||||
3 => "-123123793",
|
||||
4 => "-117420000",
|
||||
5 => null,
|
||||
],
|
||||
'megabyte' => [
|
||||
0 => '242.98 MB',
|
||||
1 => 254782996,
|
||||
2 => 242980000,
|
||||
3 => "254782996",
|
||||
4 => "242980000",
|
||||
5 => null,
|
||||
],
|
||||
'megabyte si' => [
|
||||
0 => '254.78 MiB',
|
||||
1 => 267156193,
|
||||
2 => 254780000,
|
||||
3 => "267156193",
|
||||
4 => "254780000",
|
||||
5 => null,
|
||||
],
|
||||
'petabyte' => [
|
||||
0 => '1 EiB',
|
||||
1 => 1152921504606846976,
|
||||
2 => 1000000000000000000,
|
||||
3 => "1152921504606846976",
|
||||
4 => "1000000000000000000",
|
||||
5 => null,
|
||||
],
|
||||
'max int' => [
|
||||
0 => '8 EB',
|
||||
1 => 0,
|
||||
2 => 0,
|
||||
3 => "9223372036854775808",
|
||||
4 => "8000000000000000000",
|
||||
5 => \LengthException::class,
|
||||
],
|
||||
'exabyte, overflow' => [
|
||||
0 => '867.36EB',
|
||||
1 => 0,
|
||||
2 => 0,
|
||||
3 => "999997996235794808832",
|
||||
4 => "867360000000000000000",
|
||||
5 => \LengthException::class,
|
||||
],
|
||||
'huge exabyte, overflow' => [
|
||||
0 => '1000EB',
|
||||
1 => 0,
|
||||
2 => 0,
|
||||
3 => "1152921504606846976000",
|
||||
4 => "1000000000000000000000",
|
||||
5 => \LengthException::class,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
@@ -227,10 +253,22 @@ final class CoreLibsConvertByteTest extends TestCase
|
||||
* @param string|int|float $input
|
||||
* @param string|int|float $expected
|
||||
* @param string|int|float $expected_si
|
||||
* @param string|int|float $expected_string
|
||||
* @param string|int|float $expected_string_si
|
||||
* @param ?string $exception
|
||||
* @return void
|
||||
*/
|
||||
public function testStringByteFormat($input, $expected, $expected_si): void
|
||||
{
|
||||
public function testStringByteFormat(
|
||||
string|int|float $input,
|
||||
string|int|float $expected,
|
||||
string|int|float $expected_si,
|
||||
string|int|float $expected_string,
|
||||
string|int|float $expected_string_si,
|
||||
?string $exception
|
||||
): void {
|
||||
if ($exception !== null) {
|
||||
$this->expectException($exception);
|
||||
}
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Convert\Byte::stringByteFormat($input)
|
||||
@@ -239,6 +277,17 @@ final class CoreLibsConvertByteTest extends TestCase
|
||||
$expected_si,
|
||||
\CoreLibs\Convert\Byte::stringByteFormat($input, \CoreLibs\Convert\Byte::BYTE_FORMAT_SI)
|
||||
);
|
||||
$this->assertEquals(
|
||||
$expected_string,
|
||||
\CoreLibs\Convert\Byte::stringByteFormat($input, \CoreLibs\Convert\Byte::RETURN_AS_STRING)
|
||||
);
|
||||
$this->assertEquals(
|
||||
$expected_string_si,
|
||||
\CoreLibs\Convert\Byte::stringByteFormat(
|
||||
$input,
|
||||
\CoreLibs\Convert\Byte::BYTE_FORMAT_SI | \CoreLibs\Convert\Byte::RETURN_AS_STRING
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -122,9 +122,9 @@ final class CoreLibsConvertMathTest extends TestCase
|
||||
public function providerCbrt(): array
|
||||
{
|
||||
return [
|
||||
'cube root of 2' => [2, 1.25992, 5],
|
||||
'cube root of 3' => [3, 1.44225, 5],
|
||||
'cube root of -1' => [-1, 'NAN', 0],
|
||||
'cube root of 2' => [2, 1.25992, 5, null],
|
||||
'cube root of 3' => [3, 1.44225, 5, null],
|
||||
'cube root of -1' => [-1, 'NAN', 0, \InvalidArgumentException::class],
|
||||
];
|
||||
}
|
||||
|
||||
@@ -138,10 +138,14 @@ final class CoreLibsConvertMathTest extends TestCase
|
||||
* @param float|int $number
|
||||
* @param float $expected
|
||||
* @param int $round_to
|
||||
* @param ?string $exception
|
||||
* @return void
|
||||
*/
|
||||
public function testCbrt(float|int $number, float|string $expected, int $round_to): void
|
||||
public function testCbrt(float|int $number, float|string $expected, int $round_to, ?string $exception): void
|
||||
{
|
||||
if ($exception !== null) {
|
||||
$this->expectException($exception);
|
||||
}
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
round(\CoreLibs\Convert\Math::cbrt($number), $round_to)
|
||||
|
||||
@@ -59,8 +59,6 @@ final class CoreLibsUrlRequestsCurlTest extends TestCase
|
||||
continue;
|
||||
}
|
||||
$this->url_basic = $url;
|
||||
// split out the last / part for url set test
|
||||
curl_close($handle);
|
||||
// print "Open: $url\n";
|
||||
break;
|
||||
}
|
||||
@@ -969,76 +967,77 @@ final class CoreLibsUrlRequestsCurlTest extends TestCase
|
||||
"query" => ["foo-get" => "bar"]
|
||||
]);
|
||||
$this->assertEquals("200", $response["code"], "multi call: get response code not matching");
|
||||
if (PHP_VERSION_ID >= 80400) {
|
||||
$this->assertEquals(
|
||||
'{"HEADERS":{"HTTP_HOST":"soba.egplusww.jp",'
|
||||
. '"HTTP_USER_AGENT":"CoreLibsUrlRequestCurl\/1","HTTP_FIRST_CALL":"get",'
|
||||
. '"HTTP_ACCEPT":"*\/*"},"REQUEST_TYPE":"GET","PARAMS":{"foo-get":"bar"},"BODY":null}',
|
||||
$response['content'],
|
||||
'multi call: get content not matching'
|
||||
);
|
||||
} else {
|
||||
$this->assertEquals(
|
||||
'{"HEADERS":{"HTTP_USER_AGENT":"CoreLibsUrlRequestCurl\/1",'
|
||||
. '"HTTP_FIRST_CALL":"get","HTTP_ACCEPT":"*\/*",'
|
||||
. '"HTTP_HOST":"soba.egplusww.jp"},'
|
||||
. '"REQUEST_TYPE":"GET",'
|
||||
. '"PARAMS":{"foo-get":"bar"},"BODY":null}',
|
||||
$response['content'],
|
||||
'multi call: get content not matching'
|
||||
);
|
||||
}
|
||||
$request_expected = json_decode(
|
||||
<<<JSON
|
||||
{
|
||||
"HEADERS":{
|
||||
"HTTP_USER_AGENT":"CoreLibsUrlRequestCurl\/1",
|
||||
"HTTP_FIRST_CALL":"get","HTTP_ACCEPT":"*\/*",
|
||||
"HTTP_HOST":"soba.egplusww.jp"
|
||||
},
|
||||
"REQUEST_TYPE":"GET",
|
||||
"PARAMS":{"foo-get":"bar"},"BODY":null
|
||||
}
|
||||
JSON,
|
||||
true
|
||||
);
|
||||
$this->assertEquals(
|
||||
$request_expected,
|
||||
json_decode($response['content'], true),
|
||||
'multi call: get content not matching'
|
||||
);
|
||||
// post
|
||||
$response = $curl->post($this->url_basic, [
|
||||
"headers" => ["second-call" => "post"],
|
||||
"body" => ["foo-post" => "baz"]
|
||||
]);
|
||||
$this->assertEquals("200", $response["code"], "multi call: post response code not matching");
|
||||
if (PHP_VERSION_ID >= 80400) {
|
||||
$this->assertEquals(
|
||||
'{"HEADERS":{"HTTP_HOST":"soba.egplusww.jp",'
|
||||
. '"HTTP_USER_AGENT":"CoreLibsUrlRequestCurl\/1",'
|
||||
. '"HTTP_SECOND_CALL":"post","HTTP_ACCEPT":"*\/*"},'
|
||||
. '"REQUEST_TYPE":"POST","PARAMS":[],"BODY":{"foo-post":"baz"}}',
|
||||
$response['content'],
|
||||
'multi call: post content not matching'
|
||||
);
|
||||
} else {
|
||||
$this->assertEquals(
|
||||
'{"HEADERS":{"HTTP_USER_AGENT":"CoreLibsUrlRequestCurl\/1",'
|
||||
. '"HTTP_SECOND_CALL":"post","HTTP_ACCEPT":"*\/*",'
|
||||
. '"HTTP_HOST":"soba.egplusww.jp"},'
|
||||
. '"REQUEST_TYPE":"POST",'
|
||||
. '"PARAMS":[],"BODY":{"foo-post":"baz"}}',
|
||||
$response['content'],
|
||||
'multi call: post content not matching'
|
||||
);
|
||||
}
|
||||
$request_expected = json_decode(
|
||||
<<<JSON
|
||||
{
|
||||
"HEADERS":{
|
||||
"HTTP_HOST":"soba.egplusww.jp",
|
||||
"HTTP_USER_AGENT":"CoreLibsUrlRequestCurl\/1",
|
||||
"HTTP_SECOND_CALL":"post",
|
||||
"HTTP_ACCEPT":"*\/*"
|
||||
},
|
||||
"REQUEST_TYPE":"POST",
|
||||
"PARAMS":[],
|
||||
"BODY":{"foo-post":"baz"}
|
||||
}
|
||||
JSON,
|
||||
true
|
||||
);
|
||||
$this->assertEquals(
|
||||
$request_expected,
|
||||
json_decode($response['content'], true),
|
||||
'multi call: post content not matching'
|
||||
);
|
||||
// delete
|
||||
$response = $curl->delete($this->url_basic, [
|
||||
"headers" => ["third-call" => "delete"],
|
||||
]);
|
||||
$this->assertEquals("200", $response["code"], "multi call: delete response code not matching");
|
||||
if (PHP_VERSION_ID >= 80400) {
|
||||
$this->assertEquals(
|
||||
'{"HEADERS":{"HTTP_HOST":"soba.egplusww.jp",'
|
||||
. '"HTTP_USER_AGENT":"CoreLibsUrlRequestCurl\/1",'
|
||||
. '"HTTP_THIRD_CALL":"delete","HTTP_ACCEPT":"*\/*"},'
|
||||
. '"REQUEST_TYPE":"DELETE","PARAMS":[],"BODY":[]}',
|
||||
$response['content'],
|
||||
'multi call: delete content not matching'
|
||||
);
|
||||
} else {
|
||||
$this->assertEquals(
|
||||
'{"HEADERS":{"HTTP_USER_AGENT":"CoreLibsUrlRequestCurl\/1",'
|
||||
. '"HTTP_THIRD_CALL":"delete","HTTP_ACCEPT":"*\/*",'
|
||||
. '"HTTP_HOST":"soba.egplusww.jp"},'
|
||||
. '"REQUEST_TYPE":"DELETE",'
|
||||
. '"PARAMS":[],"BODY":[]}',
|
||||
$response['content'],
|
||||
'multi call: delete content not matching'
|
||||
);
|
||||
}
|
||||
$request_expected = json_decode(
|
||||
<<<JSON
|
||||
{
|
||||
"HEADERS":{
|
||||
"HTTP_HOST":"soba.egplusww.jp",
|
||||
"HTTP_USER_AGENT":"CoreLibsUrlRequestCurl\/1",
|
||||
"HTTP_THIRD_CALL":"delete","HTTP_ACCEPT":"*\/*"
|
||||
},
|
||||
"REQUEST_TYPE":"DELETE",
|
||||
"PARAMS":[],
|
||||
"BODY":[]
|
||||
}
|
||||
JSON,
|
||||
true
|
||||
);
|
||||
$this->assertEquals(
|
||||
$request_expected,
|
||||
json_decode($response['content'], true),
|
||||
'multi call: delete content not matching'
|
||||
);
|
||||
}
|
||||
|
||||
// MARK: auth header set via config
|
||||
|
||||
Reference in New Issue
Block a user