From db92d97628d3c6635ce3c00a314a85b1ea9568a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20L=C3=BCck?= Date: Sun, 11 Jan 2026 23:07:51 +0100 Subject: [PATCH] Run tests on PHP 8.5 and update test environment --- .github/workflows/ci.yml | 7 +-- composer.json | 6 +-- tests/FactoryTest.php | 32 +++++++++--- tests/FunctionalDatabaseTest.php | 84 ++++++++++++++++++++++-------- tests/FunctionalFactoryTest.php | 4 +- tests/Io/ProcessIoDatabaseTest.php | 32 +++++++++--- 6 files changed, 121 insertions(+), 44 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ed065d2..ca70af8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,8 +12,9 @@ jobs: matrix: os: - ubuntu-24.04 - - windows-2022 + - windows-2025 php: + - 8.5 - 8.4 - 8.3 - 8.2 @@ -28,7 +29,7 @@ jobs: - 5.5 - 5.4 exclude: # ignore flaky results for legacy PHP on Windows - - os: windows-2022 + - os: windows-2025 php: 5.4 steps: - uses: actions/checkout@v3 @@ -46,7 +47,7 @@ jobs: - run: vendor/bin/phpunit --coverage-text --coverage-clover=clover.xml -c phpunit.xml.legacy if: ${{ matrix.php < 7.3 }} - name: Check 100% code coverage - if: ${{ matrix.os != 'windows-2022' }} + if: ${{ matrix.os != 'windows-2025' }} shell: php {0} run: | =5.4", "ext-sqlite3": "*", "clue/ndjson-react": "^1.0", - "react/child-process": "^0.6.6", - "react/event-loop": "^1.2", - "react/promise": "^3.2 || ^2.7 || ^1.2.1" + "react/child-process": "^0.6.7", + "react/event-loop": "^1.6", + "react/promise": "^3.3 || ^2.7 || ^1.2.1" }, "require-dev": { "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" diff --git a/tests/FactoryTest.php b/tests/FactoryTest.php index bf71c80..570ba67 100644 --- a/tests/FactoryTest.php +++ b/tests/FactoryTest.php @@ -12,7 +12,9 @@ public function testConstructWithoutLoopAssignsLoopAutomatically() $factory = new Factory(); $ref = new \ReflectionProperty($factory, 'loop'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $loop = $ref->getValue($factory); $this->assertInstanceOf('React\EventLoop\LoopInterface', $loop); @@ -24,11 +26,15 @@ public function testConstructWitLoopAndBinaryAssignsBothVariables() $factory = new Factory($loop, 'php6.0'); $ref = new \ReflectionProperty($factory, 'loop'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $this->assertSame($loop, $ref->getValue($factory)); $ref = new \ReflectionProperty($factory, 'bin'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $this->assertSame('php6.0', $ref->getValue($factory)); } @@ -64,7 +70,9 @@ public function testLoadLazyWithIdleOptionsReturnsDatabaseWithIdleTimeApplied() $db = $factory->openLazy(':memory:', null, ['idle' => 10.0]); $ref = new \ReflectionProperty($db, 'idlePeriod'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $value = $ref->getValue($db); $this->assertEquals(10.0, $value); @@ -78,7 +86,9 @@ public function testLoadLazyWithAbsolutePathWillBeUsedAsIs() $db = $factory->openLazy(__DIR__ . '/users.db'); $ref = new \ReflectionProperty($db, 'filename'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $value = $ref->getValue($db); $this->assertEquals(__DIR__ . '/users.db', $value); @@ -92,7 +102,9 @@ public function testLoadLazyWithMemoryPathWillBeUsedAsIs() $db = $factory->openLazy(':memory:'); $ref = new \ReflectionProperty($db, 'filename'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $value = $ref->getValue($db); $this->assertEquals(':memory:', $value); @@ -106,7 +118,9 @@ public function testLoadLazyWithEmptyPathWillBeUsedAsIs() $db = $factory->openLazy(''); $ref = new \ReflectionProperty($db, 'filename'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $value = $ref->getValue($db); $this->assertEquals('', $value); @@ -127,7 +141,9 @@ public function testLoadLazyWithRelativePathWillBeResolvedWhenConstructingAndWil chdir('../'); $ref = new \ReflectionProperty($db, 'filename'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $value = $ref->getValue($db); chdir($original); diff --git a/tests/FunctionalDatabaseTest.php b/tests/FunctionalDatabaseTest.php index 09e48fe..fa44e01 100644 --- a/tests/FunctionalDatabaseTest.php +++ b/tests/FunctionalDatabaseTest.php @@ -53,7 +53,9 @@ public function testOpenMemoryDatabaseResolvesWithDatabaseAndRunsUntilClose($php if ($useSocket !== null) { $ref = new \ReflectionProperty($factory, 'useSocket'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($factory, $useSocket); } @@ -81,7 +83,9 @@ public function testOpenMemoryDatabaseResolvesWithDatabaseAndRunsUntilQuit($php, if ($useSocket !== null) { $ref = new \ReflectionProperty($factory, 'useSocket'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($factory, $useSocket); } @@ -149,7 +153,9 @@ public function testOpenInvalidPathRejects($php, $useSocket) if ($useSocket !== null) { $ref = new \ReflectionProperty($factory, 'useSocket'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($factory, $useSocket); } @@ -174,7 +180,9 @@ public function testOpenInvalidPathWithNullByteRejects($php, $useSocket) if ($useSocket !== null) { $ref = new \ReflectionProperty($factory, 'useSocket'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($factory, $useSocket); } @@ -199,7 +207,9 @@ public function testOpenInvalidFlagsRejects($php, $useSocket) if ($useSocket !== null) { $ref = new \ReflectionProperty($factory, 'useSocket'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($factory, $useSocket); } @@ -224,7 +234,9 @@ public function testQuitResolvesAndRunsUntilQuit($php, $useSocket) if ($useSocket !== null) { $ref = new \ReflectionProperty($factory, 'useSocket'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($factory, $useSocket); } @@ -254,7 +266,9 @@ public function testQuitResolvesAndRunsUntilQuitWhenParentHasManyFileDescriptors if ($useSocket !== null) { $ref = new \ReflectionProperty($factory, 'useSocket'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($factory, $useSocket); } @@ -283,7 +297,9 @@ public function testQuitTwiceWillRejectSecondCall($php, $useSocket) if ($useSocket !== null) { $ref = new \ReflectionProperty($factory, 'useSocket'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($factory, $useSocket); } @@ -309,7 +325,9 @@ public function testQueryIntegerResolvesWithResultWithTypeIntegerAndRunsUntilQui if ($useSocket !== null) { $ref = new \ReflectionProperty($factory, 'useSocket'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($factory, $useSocket); } @@ -340,7 +358,9 @@ public function testQueryStringResolvesWithResultWithTypeStringAndRunsUntilQuit( if ($useSocket !== null) { $ref = new \ReflectionProperty($factory, 'useSocket'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($factory, $useSocket); } @@ -371,7 +391,9 @@ public function testQueryInvalidTableRejectsWithExceptionAndRunsUntilQuit($php, if ($useSocket !== null) { $ref = new \ReflectionProperty($factory, 'useSocket'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($factory, $useSocket); } @@ -402,7 +424,9 @@ public function testQueryInvalidTableWithPlaceholderRejectsWithExceptionAndRunsU if ($useSocket !== null) { $ref = new \ReflectionProperty($factory, 'useSocket'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($factory, $useSocket); } @@ -604,7 +628,9 @@ public function testQueryRejectsWhenQueryIsInvalid($php, $useSocket) if ($useSocket !== null) { $ref = new \ReflectionProperty($factory, 'useSocket'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($factory, $useSocket); } @@ -629,7 +655,9 @@ public function testQueryRejectsWhenClosedImmediately($useSocket) $factory = new Factory(); $ref = new \ReflectionProperty($factory, 'useSocket'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($factory, $useSocket); $promise = $factory->open(':memory:'); @@ -655,7 +683,9 @@ public function testExecCreateTableResolvesWithResultWithoutRows($php, $useSocke if ($useSocket !== null) { $ref = new \ReflectionProperty($factory, 'useSocket'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($factory, $useSocket); } @@ -686,7 +716,9 @@ public function testExecRejectsWhenClosedImmediately($php, $useSocket) if ($useSocket !== null) { $ref = new \ReflectionProperty($factory, 'useSocket'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($factory, $useSocket); } @@ -713,7 +745,9 @@ public function testExecRejectsWhenAlreadyClosed($php, $useSocket) if ($useSocket !== null) { $ref = new \ReflectionProperty($factory, 'useSocket'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($factory, $useSocket); } @@ -739,7 +773,9 @@ public function testQueryInsertResolvesWithEmptyResultSetWithLastInsertIdAndRuns if ($useSocket !== null) { $ref = new \ReflectionProperty($factory, 'useSocket'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($factory, $useSocket); } @@ -774,7 +810,9 @@ public function testQuerySelectEmptyResolvesWithEmptyResultSetWithColumnsAndNoRo if ($useSocket !== null) { $ref = new \ReflectionProperty($factory, 'useSocket'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($factory, $useSocket); } @@ -802,7 +840,9 @@ public function testCancelOpenWithSocketRejectsPromise() $factory = new Factory(); $ref = new \ReflectionProperty($factory, 'useSocket'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($factory, true); $promise = $factory->open(':memory:'); @@ -830,7 +870,9 @@ public function testOpenWithSocketWillRejectWhenSocketConnectionTimesOut() $factory = new Factory($loop); $ref = new \ReflectionProperty($factory, 'useSocket'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($factory, true); $promise = $factory->open(':memory:'); diff --git a/tests/FunctionalFactoryTest.php b/tests/FunctionalFactoryTest.php index d754fb5..75abf0b 100644 --- a/tests/FunctionalFactoryTest.php +++ b/tests/FunctionalFactoryTest.php @@ -72,7 +72,9 @@ public function testOpenReturnsPromiseWhichRejectsWithExceptionWhenExplicitPhpBi $factory = new Factory(null, 'echo'); $ref = new \ReflectionProperty($factory, 'useSocket'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($factory, true); $promise = $factory->open(':memory:'); diff --git a/tests/Io/ProcessIoDatabaseTest.php b/tests/Io/ProcessIoDatabaseTest.php index c5a57e9..117d210 100644 --- a/tests/Io/ProcessIoDatabaseTest.php +++ b/tests/Io/ProcessIoDatabaseTest.php @@ -22,7 +22,9 @@ public function testDatabaseWillEmitErrorWhenStdoutReportsNonNdjsonStream() $database = $ref->newInstanceWithoutConstructor(); $ref = new ReflectionMethod($database, '__construct'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->invoke($database, $process); $database->on('error', $this->expectCallableOnceWith($this->isInstanceOf('RuntimeException'))); @@ -47,7 +49,9 @@ public function testDatabaseWillEmitErrorWhenStdoutReportsNdjsonButNotJsonRpcStr $database = $ref->newInstanceWithoutConstructor(); $ref = new ReflectionMethod($database, '__construct'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->invoke($database, $process); $database->on('error', $this->expectCallableOnceWith($this->isInstanceOf('RuntimeException'))); @@ -70,7 +74,9 @@ public function testExecWillWriteExecMessageToProcessAndReturnPromise() $database = $ref->newInstanceWithoutConstructor(); $ref = new ReflectionProperty($database, 'process'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($database, $process); $promise = $database->exec('USE a'); @@ -92,7 +98,9 @@ public function testQueryWillWriteQueryMessageToProcessAndReturnPromise() $database = $ref->newInstanceWithoutConstructor(); $ref = new ReflectionProperty($database, 'process'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($database, $process); $promise = $database->query('SELECT 1'); @@ -115,7 +123,9 @@ public function testQuitWillWriteCloseMessageToProcessAndEndInputAndReturnPromis $database = $ref->newInstanceWithoutConstructor(); $ref = new ReflectionProperty($database, 'process'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($database, $process); $promise = $database->quit(); @@ -137,7 +147,9 @@ public function testQuitWillRejectPromiseWhenStdinAlreadyClosed() $database = $ref->newInstanceWithoutConstructor(); $ref = new ReflectionProperty($database, 'process'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($database, $process); $promise = $database->quit(); @@ -162,7 +174,9 @@ public function testCloseWillCloseStreamsAndTerminateProcess() $database = $ref->newInstanceWithoutConstructor(); $ref = new ReflectionProperty($database, 'process'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($database, $process); $database->on('close', $this->expectCallableOnce()); @@ -186,7 +200,9 @@ public function testCloseTwiceWillCloseStreamsAndTerminateProcessOnce() $database = $ref->newInstanceWithoutConstructor(); $ref = new ReflectionProperty($database, 'process'); - $ref->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $ref->setAccessible(true); + } $ref->setValue($database, $process); $database->on('close', $this->expectCallableOnce());