From fd902b4b7cffb910edf98b7195376caaae3044d4 Mon Sep 17 00:00:00 2001 From: Zach Borboa Date: Mon, 17 Feb 2025 18:24:42 -0500 Subject: [PATCH] Fix CI (PHPUnit) (#918) * Add shims for PHPUnit * Fix PHPUnit error: undefined method returnValue() 1) CurlTest\PHPCurlClassTest::testMock Error: Call to undefined method CurlTest\PHPCurlClassTest::returnValue() * Fix PHPUnit risky test by restoring error handler before exception thrown There was 1 risky test: 1) CurlTest\PHPCurlClassTest::testRequiredOptionCurlOptReturnTransferEmitsWarningPHPUnit10Plus Test code or tested code did not remove its own error handlers * Fix psalm errors * Add attributes for version constraint * Temporarily pin psalm to fix ci --- composer.json | 2 +- src/Curl/Curl.php | 27 +++++++++++++------------ src/Curl/MultiCurl.php | 4 ++-- tests/PHPCurlClass/PHPCurlClassTest.php | 18 +++-------------- tests/psalm.xml | 1 + tests/run.sh | 2 ++ tests/run_phpunit.sh | 14 +++++++++++++ 7 files changed, 37 insertions(+), 31 deletions(-) diff --git a/composer.json b/composer.json index 0e7a8bb..bc7ef36 100644 --- a/composer.json +++ b/composer.json @@ -30,7 +30,7 @@ "phpstan/phpstan": "*", "phpunit/phpunit": "*", "squizlabs/php_codesniffer": "*", - "vimeo/psalm": ">=5.26.1" + "vimeo/psalm": ">=5.26.1,<6.7" }, "suggest": { "ext-mbstring": "*" diff --git a/src/Curl/Curl.php b/src/Curl/Curl.php index d71118f..579e998 100644 --- a/src/Curl/Curl.php +++ b/src/Curl/Curl.php @@ -328,7 +328,7 @@ class Curl extends BaseCurl // Attempt to resume download only when a temporary download file exists and is not empty. if (is_file($download_filename) && $filesize = filesize($download_filename)) { $first_byte_position = $filesize; - $range = $first_byte_position . '-'; + $range = (string)$first_byte_position . '-'; $this->setRange($range); $this->fileHandle = fopen($download_filename, 'ab'); } else { @@ -385,7 +385,7 @@ class Curl extends BaseCurl } // Divide chunk_size across the number of connections. - $chunk_size = ceil($content_length / $connections); + $chunk_size = (int)ceil($content_length / $connections); // Keep track of file name parts. $part_file_names = []; @@ -399,9 +399,9 @@ class Curl extends BaseCurl if ($part_number === $connections) { $range_end = ''; } - $range = $range_start . '-' . $range_end; + $range = (string)$range_start . '-' . (string)$range_end; - $part_file_name = $filename . '.part' . $part_number; + $part_file_name = $filename . '.part' . (string)$part_number; // Save the file name of this part. $part_file_names[] = $part_file_name; @@ -1294,13 +1294,13 @@ class Curl extends BaseCurl $response_headers_count = count($this->responseHeaders); echo - 'Request contained ' . $request_options_count . ' ' . ( + 'Request contained ' . (string)$request_options_count . ' ' . ( $request_options_count === 1 ? 'option:' : 'options:' ) . "\n"; if ($request_options_count) { $i = 1; foreach ($this->options as $option => $value) { - echo ' ' . $i . ' '; + echo ' ' . (string)$i . ' '; $this->displayCurlOptionValue($option, $value); $i += 1; } @@ -1308,13 +1308,13 @@ class Curl extends BaseCurl echo 'Sent an HTTP ' . $request_method . ' request to "' . $request_url . '".' . "\n" . - 'Request contained ' . $request_headers_count . ' ' . ( + 'Request contained ' . (string)$request_headers_count . ' ' . ( $request_headers_count === 1 ? 'header:' : 'headers:' ) . "\n"; if ($request_headers_count) { $i = 1; foreach ($this->requestHeaders as $key => $value) { - echo ' ' . $i . ' ' . $key . ': ' . $value . "\n"; + echo ' ' . (string)$i . ' ' . $key . ': ' . $value . "\n"; $i += 1; } } @@ -1346,13 +1346,13 @@ class Curl extends BaseCurl } echo - 'Response contains ' . $response_headers_count . ' ' . ( + 'Response contains ' . (string)$response_headers_count . ' ' . ( $response_headers_count === 1 ? 'header:' : 'headers:' ) . "\n"; if ($this->responseHeaders !== null) { $i = 1; foreach ($this->responseHeaders as $key => $value) { - echo ' ' . $i . ' ' . $key . ': ' . $value . "\n"; + echo ' ' . (string)$i . ' ' . $key . ': ' . $value . "\n"; $i += 1; } } @@ -1409,12 +1409,13 @@ class Curl extends BaseCurl $messages_count = count($messages); if ($messages_count) { echo - 'Found ' . $messages_count . ' ' . ($messages_count === 1 ? 'message' : 'messages') . + 'Found ' . (string)$messages_count . ' ' . + ($messages_count === 1 ? 'message' : 'messages') . ' in response:' . "\n"; $i = 1; foreach ($messages as $message) { - echo ' ' . $i . ' ' . $message . "\n"; + echo ' ' . (string)$i . ' ' . $message . "\n"; $i += 1; } } @@ -1713,7 +1714,7 @@ class Curl extends BaseCurl if (is_string($value)) { echo ' "' . $value . '"' . "\n"; } elseif (is_int($value)) { - echo ' ' . $value; + echo ' ' . (string)$value; $bit_flag_lookups = [ 'CURLOPT_HTTPAUTH' => 'CURLAUTH_', diff --git a/src/Curl/MultiCurl.php b/src/Curl/MultiCurl.php index f6c00a8..d84c09b 100644 --- a/src/Curl/MultiCurl.php +++ b/src/Curl/MultiCurl.php @@ -111,7 +111,7 @@ class MultiCurl extends BaseCurl // Attempt to resume download only when a temporary download file exists and is not empty. if (is_file($download_filename) && $filesize = filesize($download_filename)) { $first_byte_position = $filesize; - $range = $first_byte_position . '-'; + $range = (string)$first_byte_position . '-'; $curl->setRange($range); $curl->fileHandle = fopen($download_filename, 'ab'); @@ -587,7 +587,7 @@ class MultiCurl extends BaseCurl $interval_seconds = $interval * 3600; } - $this->rateLimit = $max_requests . '/' . $interval . $unit; + $this->rateLimit = (string)$max_requests . '/' . (string)$interval . $unit; $this->rateLimitEnabled = true; $this->maxRequests = $max_requests; $this->interval = $interval; diff --git a/tests/PHPCurlClass/PHPCurlClassTest.php b/tests/PHPCurlClass/PHPCurlClassTest.php index 857b019..4991d64 100644 --- a/tests/PHPCurlClass/PHPCurlClassTest.php +++ b/tests/PHPCurlClass/PHPCurlClassTest.php @@ -3186,24 +3186,14 @@ class PHPCurlClassTest extends \PHPUnit\Framework\TestCase $this->assertNotEmpty($cookies); } - /** - * @requires PHPUnit < 10 - * @expectedException \PHPUnit\Framework\Error\Warning - */ - public function testRequiredOptionCurlOptReturnTransferEmitsWarning() - { - $this->expectWarning(\PHPUnit\Framework\Error\Warning::class); - - $curl = new Curl(); - $curl->setOpt(CURLOPT_RETURNTRANSFER, false); - } - /** * @requires PHPUnit >= 10 */ + #[RequiresPhpunit('>= 10')] public function testRequiredOptionCurlOptReturnTransferEmitsWarningPHPUnit10Plus() { set_error_handler(static function (int $errno, string $errstr): never { + restore_error_handler(); throw new \Exception($errstr, $errno); }, E_USER_WARNING); @@ -3211,8 +3201,6 @@ class PHPCurlClassTest extends \PHPUnit\Framework\TestCase $curl = new Curl(); $curl->setOpt(CURLOPT_RETURNTRANSFER, false); - - restore_error_handler(); } public function testRequestMethodSuccessiveGetRequests() @@ -3966,7 +3954,7 @@ class PHPCurlClassTest extends \PHPUnit\Framework\TestCase $curl->expects($this->once()) ->method('getRawResponse') - ->will($this->returnValue('[]')); + ->willReturn('[]'); $this->assertEquals('[]', $curl->getRawResponse()); } diff --git a/tests/psalm.xml b/tests/psalm.xml index e2f098d..c1a61e7 100644 --- a/tests/psalm.xml +++ b/tests/psalm.xml @@ -1,6 +1,7 @@