From 9757a694eae6bc0439a3f1311709642843586391 Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Tue, 8 Apr 2025 12:47:50 +0200 Subject: [PATCH] properly clean up mocked features after tests have run If a test has been skipped or if it errored, the mocked PHP functions must be cleaned up as well. --- .../Extension/DisableClockMockSubscriber.php | 39 ------------ .../Extension/DisableDnsMockSubscriber.php | 39 ------------ .../Bridge/PhpUnit/SymfonyExtension.php | 59 +++++++++++++++++-- 3 files changed, 55 insertions(+), 82 deletions(-) delete mode 100644 src/Symfony/Bridge/PhpUnit/Extension/DisableClockMockSubscriber.php delete mode 100644 src/Symfony/Bridge/PhpUnit/Extension/DisableDnsMockSubscriber.php diff --git a/src/Symfony/Bridge/PhpUnit/Extension/DisableClockMockSubscriber.php b/src/Symfony/Bridge/PhpUnit/Extension/DisableClockMockSubscriber.php deleted file mode 100644 index 885e6ea585e54..0000000000000 --- a/src/Symfony/Bridge/PhpUnit/Extension/DisableClockMockSubscriber.php +++ /dev/null @@ -1,39 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Bridge\PhpUnit\Extension; - -use PHPUnit\Event\Code\TestMethod; -use PHPUnit\Event\Test\Finished; -use PHPUnit\Event\Test\FinishedSubscriber; -use PHPUnit\Metadata\Group; -use Symfony\Bridge\PhpUnit\ClockMock; - -/** - * @internal - */ -class DisableClockMockSubscriber implements FinishedSubscriber -{ - public function notify(Finished $event): void - { - $test = $event->test(); - - if (!$test instanceof TestMethod) { - return; - } - - foreach ($test->metadata() as $metadata) { - if ($metadata instanceof Group && 'time-sensitive' === $metadata->groupName()) { - ClockMock::withClockMock(false); - } - } - } -} diff --git a/src/Symfony/Bridge/PhpUnit/Extension/DisableDnsMockSubscriber.php b/src/Symfony/Bridge/PhpUnit/Extension/DisableDnsMockSubscriber.php deleted file mode 100644 index fc3e754d140d5..0000000000000 --- a/src/Symfony/Bridge/PhpUnit/Extension/DisableDnsMockSubscriber.php +++ /dev/null @@ -1,39 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Bridge\PhpUnit\Extension; - -use PHPUnit\Event\Code\TestMethod; -use PHPUnit\Event\Test\Finished; -use PHPUnit\Event\Test\FinishedSubscriber; -use PHPUnit\Metadata\Group; -use Symfony\Bridge\PhpUnit\DnsMock; - -/** - * @internal - */ -class DisableDnsMockSubscriber implements FinishedSubscriber -{ - public function notify(Finished $event): void - { - $test = $event->test(); - - if (!$test instanceof TestMethod) { - return; - } - - foreach ($test->metadata() as $metadata) { - if ($metadata instanceof Group && 'dns-sensitive' === $metadata->groupName()) { - DnsMock::withMockedHosts([]); - } - } - } -} diff --git a/src/Symfony/Bridge/PhpUnit/SymfonyExtension.php b/src/Symfony/Bridge/PhpUnit/SymfonyExtension.php index 1df4f20658905..3a429c1493780 100644 --- a/src/Symfony/Bridge/PhpUnit/SymfonyExtension.php +++ b/src/Symfony/Bridge/PhpUnit/SymfonyExtension.php @@ -11,12 +11,18 @@ namespace Symfony\Bridge\PhpUnit; +use PHPUnit\Event\Test\BeforeTestMethodErrored; +use PHPUnit\Event\Test\BeforeTestMethodErroredSubscriber; +use PHPUnit\Event\Test\Errored; +use PHPUnit\Event\Test\ErroredSubscriber; +use PHPUnit\Event\Test\Finished; +use PHPUnit\Event\Test\FinishedSubscriber; +use PHPUnit\Event\Test\Skipped; +use PHPUnit\Event\Test\SkippedSubscriber; use PHPUnit\Runner\Extension\Extension; use PHPUnit\Runner\Extension\Facade; use PHPUnit\Runner\Extension\ParameterCollection; use PHPUnit\TextUI\Configuration\Configuration; -use Symfony\Bridge\PhpUnit\Extension\DisableClockMockSubscriber; -use Symfony\Bridge\PhpUnit\Extension\DisableDnsMockSubscriber; use Symfony\Bridge\PhpUnit\Extension\EnableClockMockSubscriber; use Symfony\Bridge\PhpUnit\Extension\RegisterClockMockSubscriber; use Symfony\Bridge\PhpUnit\Extension\RegisterDnsMockSubscriber; @@ -38,7 +44,37 @@ public function bootstrap(Configuration $configuration, Facade $facade, Paramete $facade->registerSubscriber(new RegisterClockMockSubscriber()); $facade->registerSubscriber(new EnableClockMockSubscriber()); - $facade->registerSubscriber(new DisableClockMockSubscriber()); + $facade->registerSubscriber(new class implements ErroredSubscriber { + public function notify(Errored $event): void + { + SymfonyExtension::disableClockMock(); + SymfonyExtension::disableDnsMock(); + } + }); + $facade->registerSubscriber(new class implements FinishedSubscriber { + public function notify(Finished $event): void + { + SymfonyExtension::disableClockMock(); + SymfonyExtension::disableDnsMock(); + } + }); + $facade->registerSubscriber(new class implements SkippedSubscriber { + public function notify(Skipped $event): void + { + SymfonyExtension::disableClockMock(); + SymfonyExtension::disableDnsMock(); + } + }); + + if (interface_exists(BeforeTestMethodErroredSubscriber::class)) { + $facade->registerSubscriber(new class implements BeforeTestMethodErroredSubscriber { + public function notify(BeforeTestMethodErrored $event): void + { + SymfonyExtension::disableClockMock(); + SymfonyExtension::disableDnsMock(); + } + }); + } if ($parameters->has('dns-mock-namespaces')) { foreach (explode(',', $parameters->get('dns-mock-namespaces')) as $namespace) { @@ -47,6 +83,21 @@ public function bootstrap(Configuration $configuration, Facade $facade, Paramete } $facade->registerSubscriber(new RegisterDnsMockSubscriber()); - $facade->registerSubscriber(new DisableDnsMockSubscriber()); + } + + /** + * @internal + */ + public static function disableClockMock(): void + { + ClockMock::withClockMock(false); + } + + /** + * @internal + */ + public static function disableDnsMock(): void + { + DnsMock::withMockedHosts([]); } }