From 1555c7235e45ef803dfe90d87aa214184184a8dd Mon Sep 17 00:00:00 2001 From: Cees-Jan Kiewiet Date: Thu, 13 Nov 2025 09:56:17 +0100 Subject: [PATCH 1/2] [3.x] Run CI jobs on PHP8.5 --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 22793579..274d2455 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,6 +11,7 @@ jobs: strategy: matrix: php: + - 8.5 - 8.4 - 8.3 - 8.2 From 4b4c7e4403b617a643c90cecb5001a87669a5198 Mon Sep 17 00:00:00 2001 From: Cees-Jan Kiewiet Date: Thu, 13 Nov 2025 10:03:30 +0100 Subject: [PATCH 2/2] [3.x] Fix reflection setAccessible deprecation warnings In PHP8.1 ReflectionProperty::setAccessible was made a no-op through https://wiki.php.net/rfc/make-reflection-setaccessible-no-op in PHP8.5 it is now throwing a deprecation warning by: https://wiki.php.net/rfc/deprecations_php_8_5#deprecate_reflectionsetaccessible --- tests/BrowserTest.php | 40 ++++++++++++----- tests/HttpServerTest.php | 64 +++++++++++++++++++++------- tests/Io/ClockTest.php | 4 +- tests/Io/MultipartParserTest.php | 20 ++++++--- tests/Io/RequestHeaderParserTest.php | 4 +- tests/Io/StreamingServerTest.php | 40 ++++++++++++----- tests/Io/TransactionTest.php | 12 ++++-- 7 files changed, 138 insertions(+), 46 deletions(-) diff --git a/tests/BrowserTest.php b/tests/BrowserTest.php index 8f3e10bd..34f72a3a 100644 --- a/tests/BrowserTest.php +++ b/tests/BrowserTest.php @@ -25,7 +25,9 @@ public function setUpBrowser() $this->browser = new Browser(null, $this->loop); $ref = new \ReflectionProperty($this->browser, 'transaction'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($this->browser, $this->sender); } @@ -34,11 +36,15 @@ public function testConstructWithoutLoopAssignsLoopAutomatically() $browser = new Browser(); $ref = new \ReflectionProperty($browser, 'transaction'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $transaction = $ref->getValue($browser); $ref = new \ReflectionProperty($transaction, 'loop'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $loop = $ref->getValue($transaction); $this->assertInstanceOf(LoopInterface::class, $loop); @@ -51,23 +57,33 @@ public function testConstructWithConnectorAssignsGivenConnector() $browser = new Browser($connector); $ref = new \ReflectionProperty($browser, 'transaction'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $transaction = $ref->getValue($browser); $ref = new \ReflectionProperty($transaction, 'sender'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $sender = $ref->getValue($transaction); $ref = new \ReflectionProperty($sender, 'http'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $client = $ref->getValue($sender); $ref = new \ReflectionProperty($client, 'connectionManager'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $connectionManager = $ref->getValue($client); $ref = new \ReflectionProperty($connectionManager, 'connector'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ret = $ref->getValue($connectionManager); $this->assertSame($connector, $ret); @@ -78,11 +94,15 @@ public function testConstructWithLoopAssignsGivenLoop() $browser = new Browser(null, $this->loop); $ref = new \ReflectionProperty($browser, 'transaction'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $transaction = $ref->getValue($browser); $ref = new \ReflectionProperty($transaction, 'loop'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $loop = $ref->getValue($transaction); $this->assertSame($this->loop, $loop); diff --git a/tests/HttpServerTest.php b/tests/HttpServerTest.php index a62e5fbd..adeaeae1 100644 --- a/tests/HttpServerTest.php +++ b/tests/HttpServerTest.php @@ -58,15 +58,21 @@ public function testConstructWithoutLoopAssignsLoopAutomatically() $http = new HttpServer(function () { }); $ref = new \ReflectionProperty($http, 'streamingServer'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $streamingServer = $ref->getValue($http); $ref = new \ReflectionProperty($streamingServer, 'clock'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $clock = $ref->getValue($streamingServer); $ref = new \ReflectionProperty($clock, 'loop'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $loop = $ref->getValue($clock); $this->assertInstanceOf(LoopInterface::class, $loop); @@ -331,7 +337,9 @@ public function testServerConcurrency($memory_limit, $post_max_size, $expectedCo $http = new HttpServer(function () { }); $ref = new \ReflectionMethod($http, 'getConcurrentRequestsLimit'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $value = $ref->invoke($http, $memory_limit, $post_max_size); @@ -343,7 +351,9 @@ public function testServerGetPostMaxSizeReturnsSizeFromGivenIniSetting() $http = new HttpServer(function () { }); $ref = new \ReflectionMethod($http, 'getMaxRequestSize'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $value = $ref->invoke($http, '1k'); @@ -355,7 +365,9 @@ public function testServerGetPostMaxSizeReturnsSizeCappedFromGivenIniSetting() $http = new HttpServer(function () { }); $ref = new \ReflectionMethod($http, 'getMaxRequestSize'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $value = $ref->invoke($http, '1M'); @@ -371,7 +383,9 @@ public function testServerGetPostMaxSizeFromIniIsCapped() $http = new HttpServer(function () { }); $ref = new \ReflectionMethod($http, 'getMaxRequestSize'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $value = $ref->invoke($http); @@ -388,17 +402,23 @@ public function testConstructServerWithUnlimitedMemoryLimitDoesNotLimitConcurren ini_set('memory_limit', $old); $ref = new \ReflectionProperty($http, 'streamingServer'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $streamingServer = $ref->getValue($http); $ref = new \ReflectionProperty($streamingServer, 'callback'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $middlewareRunner = $ref->getValue($streamingServer); $ref = new \ReflectionProperty($middlewareRunner, 'middleware'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $middleware = $ref->getValue($middlewareRunner); @@ -418,17 +438,23 @@ public function testConstructServerWithMemoryLimitDoesLimitConcurrency() ini_set('memory_limit', $old); $ref = new \ReflectionProperty($http, 'streamingServer'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $streamingServer = $ref->getValue($http); $ref = new \ReflectionProperty($streamingServer, 'callback'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $middlewareRunner = $ref->getValue($streamingServer); $ref = new \ReflectionProperty($middlewareRunner, 'middleware'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $middleware = $ref->getValue($middlewareRunner); @@ -441,17 +467,23 @@ public function testConstructFiltersOutConfigurationMiddlewareBefore() $http = new HttpServer(new StreamingRequestMiddleware(), function () { }); $ref = new \ReflectionProperty($http, 'streamingServer'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $streamingServer = $ref->getValue($http); $ref = new \ReflectionProperty($streamingServer, 'callback'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $middlewareRunner = $ref->getValue($streamingServer); $ref = new \ReflectionProperty($middlewareRunner, 'middleware'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $middleware = $ref->getValue($middlewareRunner); diff --git a/tests/Io/ClockTest.php b/tests/Io/ClockTest.php index 318fa7ef..1b6a2932 100644 --- a/tests/Io/ClockTest.php +++ b/tests/Io/ClockTest.php @@ -33,7 +33,9 @@ public function testNowResetsMemoizedTimestampOnFutureTick() $now = $clock->now(); $ref = new \ReflectionProperty($clock, 'now'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $this->assertEquals($now, $ref->getValue($clock)); $this->assertNotNull($tick); diff --git a/tests/Io/MultipartParserTest.php b/tests/Io/MultipartParserTest.php index ebc5972f..3cbb43bf 100644 --- a/tests/Io/MultipartParserTest.php +++ b/tests/Io/MultipartParserTest.php @@ -1049,15 +1049,25 @@ public function testWeOnlyParseTheAmountOfMultiPartChunksWeConfigured() $reflectecClass = new \ReflectionClass(MultipartParser::class); $requestProperty = $reflectecClass->getProperty('request'); - $requestProperty->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $requestProperty->setAccessible(true); + } $cursorProperty = $reflectecClass->getProperty('cursor'); - $cursorProperty->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $cursorProperty->setAccessible(true); + } $multipartBodyPartCountProperty = $reflectecClass->getProperty('multipartBodyPartCount'); - $multipartBodyPartCountProperty->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $multipartBodyPartCountProperty->setAccessible(true); + } $maxMultipartBodyPartsProperty = $reflectecClass->getProperty('maxMultipartBodyParts'); - $maxMultipartBodyPartsProperty->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $maxMultipartBodyPartsProperty->setAccessible(true); + } $parseBodyMethod = $reflectecClass->getMethod('parseBody'); - $parseBodyMethod->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $parseBodyMethod->setAccessible(true); + } $this->assertSame(0, $cursorProperty->getValue($parser)); diff --git a/tests/Io/RequestHeaderParserTest.php b/tests/Io/RequestHeaderParserTest.php index 568fc375..7bfedb21 100644 --- a/tests/Io/RequestHeaderParserTest.php +++ b/tests/Io/RequestHeaderParserTest.php @@ -851,7 +851,9 @@ public function testServerParamsWillBeRememberedUntilConnectionIsClosed() $connection->emit('data', ["GET /foo HTTP/1.0\r\nHost: example.com\r\n\r\n"]); $ref = new \ReflectionProperty($parser, 'connectionParams'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $this->assertCount(1, $ref->getValue($parser)); diff --git a/tests/Io/StreamingServerTest.php b/tests/Io/StreamingServerTest.php index 803ff45c..1a6fcad7 100644 --- a/tests/Io/StreamingServerTest.php +++ b/tests/Io/StreamingServerTest.php @@ -2251,11 +2251,15 @@ public function testResponseWithoutExplicitDateHeaderWillAddCurrentDateFromClock }); $ref = new \ReflectionProperty($server, 'clock'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $clock = $ref->getValue($server); $ref = new \ReflectionProperty($clock, 'now'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($clock, 1652972091.3958); $buffer = ''; @@ -3052,7 +3056,9 @@ public function testNewConnectionWillInvokeParserOnce() $parser->expects($this->once())->method('handle'); $ref = new \ReflectionProperty($server, 'parser'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($server, $parser); $server->listen($this->socket); @@ -3069,7 +3075,9 @@ public function testNewConnectionWillInvokeParserOnceAndInvokeRequestHandlerWhen $parser->expects($this->once())->method('handle'); $ref = new \ReflectionProperty($server, 'parser'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($server, $parser); $server->listen($this->socket); @@ -3092,7 +3100,9 @@ public function testNewConnectionWillInvokeParserOnceAndInvokeRequestHandlerWhen $parser->expects($this->once())->method('handle'); $ref = new \ReflectionProperty($server, 'parser'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($server, $parser); $server->listen($this->socket); @@ -3117,7 +3127,9 @@ public function testNewConnectionWillInvokeParserOnceAndInvokeRequestHandlerWhen $parser->expects($this->once())->method('handle'); $ref = new \ReflectionProperty($server, 'parser'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($server, $parser); $server->listen($this->socket); @@ -3142,7 +3154,9 @@ public function testNewConnectionWillInvokeParserTwiceAfterInvokingRequestHandle $parser->expects($this->exactly(2))->method('handle'); $ref = new \ReflectionProperty($server, 'parser'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($server, $parser); $server->listen($this->socket); @@ -3167,7 +3181,9 @@ public function testNewConnectionWillInvokeParserTwiceAfterInvokingRequestHandle $parser->expects($this->exactly(2))->method('handle'); $ref = new \ReflectionProperty($server, 'parser'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($server, $parser); $server->listen($this->socket); @@ -3193,7 +3209,9 @@ public function testNewConnectionWillInvokeParserOnceAfterInvokingRequestHandler $parser->expects($this->once())->method('handle'); $ref = new \ReflectionProperty($server, 'parser'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($server, $parser); $server->listen($this->socket); @@ -3219,7 +3237,9 @@ public function testNewConnectionWillInvokeParserTwiceAfterInvokingRequestHandle $parser->expects($this->exactly(2))->method('handle'); $ref = new \ReflectionProperty($server, 'parser'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($server, $parser); $server->listen($this->socket); diff --git a/tests/Io/TransactionTest.php b/tests/Io/TransactionTest.php index 3833cfd3..62c48947 100644 --- a/tests/Io/TransactionTest.php +++ b/tests/Io/TransactionTest.php @@ -38,7 +38,9 @@ public function testWithOptionsReturnsNewInstanceWithChangedOption() $this->assertNotSame($transaction, $new); $ref = new \ReflectionProperty($new, 'followRedirects'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $this->assertFalse($ref->getValue($new)); } @@ -52,7 +54,9 @@ public function testWithOptionsDoesNotChangeOriginalInstance() $transaction->withOptions(['followRedirects' => false]); $ref = new \ReflectionProperty($transaction, 'followRedirects'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $this->assertTrue($ref->getValue($transaction)); } @@ -67,7 +71,9 @@ public function testWithOptionsNullValueReturnsNewInstanceWithDefaultOption() $transaction = $transaction->withOptions(['followRedirects' => null]); $ref = new \ReflectionProperty($transaction, 'followRedirects'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $this->assertTrue($ref->getValue($transaction)); }