|
11 | 11 |
|
12 | 12 | namespace Symfony\Bridge\PhpUnit;
|
13 | 13 |
|
| 14 | +use PHPUnit\Event\Code\Test; |
| 15 | +use PHPUnit\Event\Code\TestMethod; |
14 | 16 | use PHPUnit\Event\Test\BeforeTestMethodErrored;
|
15 | 17 | use PHPUnit\Event\Test\BeforeTestMethodErroredSubscriber;
|
16 | 18 | use PHPUnit\Event\Test\Errored;
|
|
19 | 21 | use PHPUnit\Event\Test\FinishedSubscriber;
|
20 | 22 | use PHPUnit\Event\Test\Skipped;
|
21 | 23 | use PHPUnit\Event\Test\SkippedSubscriber;
|
| 24 | +use PHPUnit\Metadata\Group; |
22 | 25 | use PHPUnit\Runner\Extension\Extension;
|
23 | 26 | use PHPUnit\Runner\Extension\Facade;
|
24 | 27 | use PHPUnit\Runner\Extension\ParameterCollection;
|
@@ -47,31 +50,60 @@ public function bootstrap(Configuration $configuration, Facade $facade, Paramete
|
47 | 50 | $facade->registerSubscriber(new class implements ErroredSubscriber {
|
48 | 51 | public function notify(Errored $event): void
|
49 | 52 | {
|
50 |
| - SymfonyExtension::disableClockMock(); |
51 |
| - SymfonyExtension::disableDnsMock(); |
| 53 | + $test = $event->test(); |
| 54 | + |
| 55 | + if (SymfonyExtension::hasGroup($test, 'time-sensitive')) { |
| 56 | + SymfonyExtension::disableClockMock(); |
| 57 | + } |
| 58 | + if (SymfonyExtension::hasGroup($test, 'dns-sensitive')) { |
| 59 | + SymfonyExtension::disableDnsMock(); |
| 60 | + } |
52 | 61 | }
|
53 | 62 | });
|
54 | 63 | $facade->registerSubscriber(new class implements FinishedSubscriber {
|
55 | 64 | public function notify(Finished $event): void
|
56 | 65 | {
|
57 |
| - SymfonyExtension::disableClockMock(); |
58 |
| - SymfonyExtension::disableDnsMock(); |
| 66 | + $test = $event->test(); |
| 67 | + |
| 68 | + if (SymfonyExtension::hasGroup($test, 'time-sensitive')) { |
| 69 | + SymfonyExtension::disableClockMock(); |
| 70 | + } |
| 71 | + if (SymfonyExtension::hasGroup($test, 'dns-sensitive')) { |
| 72 | + SymfonyExtension::disableDnsMock(); |
| 73 | + } |
59 | 74 | }
|
60 | 75 | });
|
61 | 76 | $facade->registerSubscriber(new class implements SkippedSubscriber {
|
62 | 77 | public function notify(Skipped $event): void
|
63 | 78 | {
|
64 |
| - SymfonyExtension::disableClockMock(); |
65 |
| - SymfonyExtension::disableDnsMock(); |
| 79 | + $test = $event->test(); |
| 80 | + |
| 81 | + if (SymfonyExtension::hasGroup($test, 'time-sensitive')) { |
| 82 | + SymfonyExtension::disableClockMock(); |
| 83 | + } |
| 84 | + if (SymfonyExtension::hasGroup($test, 'dns-sensitive')) { |
| 85 | + SymfonyExtension::disableDnsMock(); |
| 86 | + } |
66 | 87 | }
|
67 | 88 | });
|
68 | 89 |
|
69 | 90 | if (interface_exists(BeforeTestMethodErroredSubscriber::class)) {
|
70 | 91 | $facade->registerSubscriber(new class implements BeforeTestMethodErroredSubscriber {
|
71 | 92 | public function notify(BeforeTestMethodErrored $event): void
|
72 | 93 | {
|
73 |
| - SymfonyExtension::disableClockMock(); |
74 |
| - SymfonyExtension::disableDnsMock(); |
| 94 | + if (method_exists($event, 'test')) { |
| 95 | + $test = $event->test(); |
| 96 | + |
| 97 | + if (SymfonyExtension::hasGroup($test, 'time-sensitive')) { |
| 98 | + SymfonyExtension::disableClockMock(); |
| 99 | + } |
| 100 | + if (SymfonyExtension::hasGroup($test, 'dns-sensitive')) { |
| 101 | + SymfonyExtension::disableDnsMock(); |
| 102 | + } |
| 103 | + } else { |
| 104 | + SymfonyExtension::disableClockMock(); |
| 105 | + SymfonyExtension::disableDnsMock(); |
| 106 | + } |
75 | 107 | }
|
76 | 108 | });
|
77 | 109 | }
|
@@ -100,4 +132,22 @@ public static function disableDnsMock(): void
|
100 | 132 | {
|
101 | 133 | DnsMock::withMockedHosts([]);
|
102 | 134 | }
|
| 135 | + |
| 136 | + /** |
| 137 | + * @internal |
| 138 | + */ |
| 139 | + public static function hasGroup(Test $test, string $groupName): bool |
| 140 | + { |
| 141 | + if (!$test instanceof TestMethod) { |
| 142 | + return false; |
| 143 | + } |
| 144 | + |
| 145 | + foreach ($test->metadata() as $metadata) { |
| 146 | + if ($metadata instanceof Group && $groupName === $metadata->groupName()) { |
| 147 | + return true; |
| 148 | + } |
| 149 | + } |
| 150 | + |
| 151 | + return false; |
| 152 | + } |
103 | 153 | }
|
0 commit comments