Skip to content

Commit

Permalink
add support for PHPUnit 10
Browse files Browse the repository at this point in the history
  • Loading branch information
dmaicher committed Feb 3, 2023
1 parent b60538a commit 4d78964
Show file tree
Hide file tree
Showing 10 changed files with 156 additions and 68 deletions.
9 changes: 8 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,24 @@ jobs:
matrix:
include:
- php: 7.3
test_make_target: test_phpunit_legacy
- php: 7.4
composer_flags: --prefer-lowest
test_make_target: test_phpunit_legacy
- php: 7.4
symfony_require: 5.4.*
test_make_target: test_phpunit_legacy
- php: 8.0
test_make_target: test_phpunit_legacy
- php: 8.1
symfony_require: 6.0.*
test_make_target: test
- php: 8.1
symfony_require: 6.1.*
test_make_target: test
- php: 8.2
symfony_require: 6.2.*
test_make_target: test

steps:
- uses: actions/checkout@v2
Expand All @@ -53,7 +60,7 @@ jobs:
run: composer update ${{ matrix.composer_flags }} --prefer-dist

- name: Phpunit
run: make test
run: make ${{ matrix.test_make_target }}

- name: Behat
run: make behat
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,5 @@ vendor
.php-cs-fixer.cache
php-cs-fixer.phar
.phpunit.result.cache
tests/.phpunit.cache/
.idea
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
"behat/behat": "^3.0",
"doctrine/cache": "^1.12",
"phpstan/phpstan": "^1.2",
"phpunit/phpunit": "^8.0 || ^9.0",
"phpunit/phpunit": "^8.0 || ^9.0 || ^10.0",
"symfony/phpunit-bridge": "^6.0",
"symfony/process": "^5.4 || ^6.0",
"symfony/yaml": "^5.4 || ^6.0"
Expand Down
3 changes: 3 additions & 0 deletions makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ tests/Functional/app/parameters.yml:
test: tests/Functional/app/parameters.yml
vendor/bin/phpunit -c tests/ tests/

test_phpunit_legacy: tests/Functional/app/parameters.yml
vendor/bin/phpunit -c tests/phpunit.9.xml tests/

phpstan:
vendor/bin/phpstan analyse -c phpstan.neon -a vendor/autoload.php -l 5 src tests

Expand Down
84 changes: 69 additions & 15 deletions src/DAMA/DoctrineTestBundle/PHPUnit/PHPUnitExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,30 +3,84 @@
namespace DAMA\DoctrineTestBundle\PHPUnit;

use DAMA\DoctrineTestBundle\Doctrine\DBAL\StaticDriver;
use PHPUnit\Event\Test\Finished as TestFinishedEvent;
use PHPUnit\Event\Test\FinishedSubscriber as TestFinishedSubscriber;
use PHPUnit\Event\Test\PreparationStarted as TestStartedEvent;
use PHPUnit\Event\Test\PreparationStartedSubscriber as TestStartedSubscriber;
use PHPUnit\Event\TestSuite\Finished as TestSuiteFinishedEvent;
use PHPUnit\Event\TestSuite\FinishedSubscriber as TestSuiteFinishedSubscriber;
use PHPUnit\Event\TestSuite\Started as TestSuiteStartedEvent;
use PHPUnit\Event\TestSuite\StartedSubscriber as TestSuiteStartedSubscriber;
use PHPUnit\Runner\AfterLastTestHook;
use PHPUnit\Runner\AfterTestHook;
use PHPUnit\Runner\BeforeFirstTestHook;
use PHPUnit\Runner\BeforeTestHook;
use PHPUnit\Runner\Extension\Extension;
use PHPUnit\Runner\Extension\Facade;
use PHPUnit\Runner\Extension\ParameterCollection;
use PHPUnit\TextUI\Configuration\Configuration;

class PHPUnitExtension implements BeforeFirstTestHook, AfterLastTestHook, BeforeTestHook, AfterTestHook
{
public function executeBeforeFirstTest(): void
if (class_exists(TestSuiteStartedEvent::class)) {
/**
* PHPUnit >= 10.
*/
class PHPUnitExtension implements Extension
{
StaticDriver::setKeepStaticConnections(true);
}
public function bootstrap(Configuration $configuration, Facade $facade, ParameterCollection $parameters): void
{
$facade->registerSubscriber(new class() implements TestSuiteStartedSubscriber {
public function notify(TestSuiteStartedEvent $event): void
{
StaticDriver::setKeepStaticConnections(true);
}
});

public function executeBeforeTest(string $test): void
{
StaticDriver::beginTransaction();
}
$facade->registerSubscriber(new class() implements TestStartedSubscriber {
public function notify(TestStartedEvent $event): void
{
StaticDriver::beginTransaction();
}
});

public function executeAfterTest(string $test, float $time): void
{
StaticDriver::rollBack();
}
$facade->registerSubscriber(new class() implements TestFinishedSubscriber {
public function notify(TestFinishedEvent $event): void
{
StaticDriver::rollBack();
}
});

public function executeAfterLastTest(): void
$facade->registerSubscriber(new class() implements TestSuiteFinishedSubscriber {
public function notify(TestSuiteFinishedEvent $event): void
{
StaticDriver::setKeepStaticConnections(false);
}
});
}
}
} else {
/**
* PHPUnit < 10.
*/
class PHPUnitExtension implements BeforeFirstTestHook, AfterLastTestHook, BeforeTestHook, AfterTestHook
{
StaticDriver::setKeepStaticConnections(false);
public function executeBeforeFirstTest(): void
{
StaticDriver::setKeepStaticConnections(true);
}

public function executeBeforeTest(string $test): void
{
StaticDriver::beginTransaction();
}

public function executeAfterTest(string $test, float $time): void
{
StaticDriver::rollBack();
}

public function executeAfterLastTest(): void
{
StaticDriver::setKeepStaticConnections(false);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public function testLoad(array $configs, array $expectedParameters): void
}
}

public function loadDataProvider(): array
public static function loadDataProvider(): array
{
return [
[[], [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ public function testProcess(array $config, callable $assertCallback, callable $e
$assertCallback($containerBuilder);
}

public function processDataProvider(): \Generator
public static function processDataProvider(): \Generator
{
$defaultConfig = [
'enable_static_connection' => true,
Expand All @@ -81,23 +81,23 @@ public function processDataProvider(): \Generator
yield 'default config' => [
$defaultConfig,
function (ContainerBuilder $containerBuilder): void {
$this->assertTrue($containerBuilder->hasDefinition('dama.doctrine.dbal.connection_factory'));
$this->assertSame(
self::assertTrue($containerBuilder->hasDefinition('dama.doctrine.dbal.connection_factory'));
self::assertSame(
'doctrine.dbal.connection_factory',
$containerBuilder->getDefinition('dama.doctrine.dbal.connection_factory')->getDecoratedService()[0]
);

foreach (self::CACHE_SERVICE_IDS as $id) {
$this->assertFalse($containerBuilder->hasAlias($id));
$this->assertFalse($containerBuilder->hasDefinition($id));
self::assertFalse($containerBuilder->hasAlias($id));
self::assertFalse($containerBuilder->hasDefinition($id));
}

$this->assertSame([
self::assertSame([
'dama.keep_static' => true,
'dama.connection_name' => 'a',
], $containerBuilder->getDefinition('doctrine.dbal.a_connection')->getArgument(0));

$this->assertEquals(
self::assertEquals(
[
[
'setMiddlewares',
Expand All @@ -112,7 +112,7 @@ function (ContainerBuilder $containerBuilder): void {
$containerBuilder->getDefinition('doctrine.dbal.a_connection.configuration')->getMethodCalls()
);

$this->assertEquals(
self::assertEquals(
[
[
'setMiddlewares',
Expand All @@ -135,10 +135,10 @@ function (ContainerBuilder $containerBuilder): void {
'enable_static_query_cache' => false,
],
function (ContainerBuilder $containerBuilder): void {
$this->assertFalse($containerBuilder->hasDefinition('dama.doctrine.dbal.connection_factory'));
$this->assertFalse($containerBuilder->hasDefinition('doctrine.orm.a_metadata_cache'));
self::assertFalse($containerBuilder->hasDefinition('dama.doctrine.dbal.connection_factory'));
self::assertFalse($containerBuilder->hasDefinition('doctrine.orm.a_metadata_cache'));

$this->assertEquals(
self::assertEquals(
[
[
'setMiddlewares',
Expand All @@ -164,16 +164,16 @@ function (ContainerBuilder $containerBuilder): void {
'enable_static_query_cache' => true,
],
function (ContainerBuilder $containerBuilder): void {
$this->assertTrue($containerBuilder->hasDefinition('dama.doctrine.dbal.connection_factory'));
self::assertTrue($containerBuilder->hasDefinition('dama.doctrine.dbal.connection_factory'));

$this->assertSame([
self::assertSame([
'dama.keep_static' => true,
'dama.connection_name' => 'a',
], $containerBuilder->getDefinition('doctrine.dbal.a_connection')->getArgument(0));

$this->assertSame([], $containerBuilder->getDefinition('doctrine.dbal.b_connection')->getArgument(0));
self::assertSame([], $containerBuilder->getDefinition('doctrine.dbal.b_connection')->getArgument(0));

$this->assertSame([
self::assertSame([
'dama.keep_static' => true,
'dama.connection_name' => 'c',
], $containerBuilder->getDefinition('doctrine.dbal.c_connection')->getArgument(0));
Expand Down Expand Up @@ -201,8 +201,8 @@ function (TestCase $testCase): void {
$defaultConfig,
function (ContainerBuilder $containerBuilder): void {
foreach (self::CACHE_SERVICE_IDS as $id) {
$this->assertFalse($containerBuilder->hasAlias($id));
$this->assertEquals(
self::assertFalse($containerBuilder->hasAlias($id));
self::assertEquals(
(new Definition(StaticArrayCache::class))->addMethodCall('setNamespace', [sha1($id)]),
$containerBuilder->getDefinition($id)
);
Expand All @@ -219,8 +219,8 @@ function (self $testCase, ContainerBuilder $containerBuilder): void {
$defaultConfig,
function (ContainerBuilder $containerBuilder): void {
foreach (self::CACHE_SERVICE_IDS as $id) {
$this->assertFalse($containerBuilder->hasAlias($id));
$this->assertEquals(
self::assertFalse($containerBuilder->hasAlias($id));
self::assertEquals(
(new Definition(Psr6StaticArrayCache::class))->setArgument(0, sha1($id)),
$containerBuilder->getDefinition($id)
);
Expand All @@ -237,8 +237,8 @@ function (self $testCase, ContainerBuilder $containerBuilder): void {
$defaultConfig,
function (ContainerBuilder $containerBuilder): void {
foreach (self::CACHE_SERVICE_IDS as $id) {
$this->assertFalse($containerBuilder->hasAlias($id));
$this->assertEquals(
self::assertFalse($containerBuilder->hasAlias($id));
self::assertEquals(
(new Definition(Psr6StaticArrayCache::class))->setArgument(0, sha1($id)),
$containerBuilder->getDefinition($id)
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public function testCreateConnection(bool $keepStaticConnections, array $params,
$this->assertSame($expectedNestingWithSavepoints, $connection->getNestTransactionsWithSavepoints());
}

public function createConnectionDataProvider(): \Generator
public static function createConnectionDataProvider(): \Generator
{
yield 'disabled by static property' => [
false,
Expand Down
38 changes: 38 additions & 0 deletions tests/phpunit.9.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<phpunit
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/8.0/phpunit.xsd"
backupGlobals="false"
backupStaticAttributes="false"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stderr="true"
bootstrap="./bootstrap.php"
>
<php>
<env name="SYMFONY_DEPRECATIONS_HELPER" value="max[direct]=2" />
</php>

<extensions>
<extension class="DAMA\DoctrineTestBundle\PHPUnit\PHPUnitExtension" />
</extensions>

<testsuites>
<testsuite name="DAMADoctrineTestBundle test suite">
<directory>../tests</directory>
</testsuite>
</testsuites>

<filter>
<whitelist>
<directory suffix=".php">../src</directory>
</whitelist>
</filter>

<listeners>
<listener class="\Symfony\Bridge\PhpUnit\SymfonyTestsListener" />
</listeners>

</phpunit>
40 changes: 12 additions & 28 deletions tests/phpunit.xml
Original file line number Diff line number Diff line change
@@ -1,38 +1,22 @@
<phpunit
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/8.0/phpunit.xsd"
backupGlobals="false"
backupStaticAttributes="false"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stderr="true"
bootstrap="./bootstrap.php"
>
<?xml version="1.0"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.0/phpunit.xsd"
backupGlobals="false"
colors="true"
processIsolation="false"
stderr="true"
bootstrap="./bootstrap.php"
cacheDirectory=".phpunit.cache"
backupStaticProperties="false">
<php>
<env name="SYMFONY_DEPRECATIONS_HELPER" value="max[direct]=2" />
<env name="SYMFONY_DEPRECATIONS_HELPER" value="max[direct]=2"/>
</php>

<extensions>
<extension class="DAMA\DoctrineTestBundle\PHPUnit\PHPUnitExtension" />
<bootstrap class="DAMA\DoctrineTestBundle\PHPUnit\PHPUnitExtension" />
</extensions>

<testsuites>
<testsuite name="DAMADoctrineTestBundle test suite">
<directory>../tests</directory>
</testsuite>
</testsuites>

<filter>
<whitelist>
<directory suffix=".php">../src</directory>
</whitelist>
</filter>

<listeners>
<listener class="\Symfony\Bridge\PhpUnit\SymfonyTestsListener" />
</listeners>

</phpunit>

0 comments on commit 4d78964

Please sign in to comment.