2626use PHPUnit \Runner \Extension \Facade ;
2727use PHPUnit \Runner \Extension \ParameterCollection ;
2828use PHPUnit \TextUI \Configuration \Configuration ;
29+ use Symfony \Bridge \PhpUnit \Attribute \DnsSensitive ;
30+ use Symfony \Bridge \PhpUnit \Attribute \TimeSensitive ;
2931use Symfony \Bridge \PhpUnit \Extension \EnableClockMockSubscriber ;
3032use Symfony \Bridge \PhpUnit \Extension \RegisterClockMockSubscriber ;
3133use Symfony \Bridge \PhpUnit \Extension \RegisterDnsMockSubscriber ;
@@ -50,35 +52,51 @@ public function bootstrap(Configuration $configuration, Facade $facade, Paramete
5052
5153$ facade ->registerSubscriber (new RegisterClockMockSubscriber ($ reader ));
5254$ facade ->registerSubscriber (new EnableClockMockSubscriber ($ reader ));
53- $ facade ->registerSubscriber (new class implements ErroredSubscriber {
55+ $ facade ->registerSubscriber (new class ($ reader )implements ErroredSubscriber {
56+ public function __construct (private AttributeReader $ reader )
57+ {
58+ }
59+
5460public function notify (Errored $ event ):void
5561 {
56- SymfonyExtension::disableClockMock ($ event ->test ());
57- SymfonyExtension::disableDnsMock ($ event ->test ());
62+ SymfonyExtension::disableClockMock ($ event ->test (), $ this -> reader );
63+ SymfonyExtension::disableDnsMock ($ event ->test (), $ this -> reader );
5864 }
5965 });
60- $ facade ->registerSubscriber (new class implements FinishedSubscriber {
66+ $ facade ->registerSubscriber (new class ($ reader )implements FinishedSubscriber {
67+ public function __construct (private AttributeReader $ reader )
68+ {
69+ }
70+
6171public function notify (Finished $ event ):void
6272 {
63- SymfonyExtension::disableClockMock ($ event ->test ());
64- SymfonyExtension::disableDnsMock ($ event ->test ());
73+ SymfonyExtension::disableClockMock ($ event ->test (), $ this -> reader );
74+ SymfonyExtension::disableDnsMock ($ event ->test (), $ this -> reader );
6575 }
6676 });
67- $ facade ->registerSubscriber (new class implements SkippedSubscriber {
77+ $ facade ->registerSubscriber (new class ($ reader )implements SkippedSubscriber {
78+ public function __construct (private AttributeReader $ reader )
79+ {
80+ }
81+
6882public function notify (Skipped $ event ):void
6983 {
70- SymfonyExtension::disableClockMock ($ event ->test ());
71- SymfonyExtension::disableDnsMock ($ event ->test ());
84+ SymfonyExtension::disableClockMock ($ event ->test (), $ this -> reader );
85+ SymfonyExtension::disableDnsMock ($ event ->test (), $ this -> reader );
7286 }
7387 });
7488
7589if (interface_exists (BeforeTestMethodErroredSubscriber::class)) {
76- $ facade ->registerSubscriber (new class implements BeforeTestMethodErroredSubscriber {
90+ $ facade ->registerSubscriber (new class ($ reader )implements BeforeTestMethodErroredSubscriber {
91+ public function __construct (private AttributeReader $ reader )
92+ {
93+ }
94+
7795public function notify (BeforeTestMethodErrored $ event ):void
7896 {
7997if (method_exists ($ event ,'test ' )) {
80- SymfonyExtension::disableClockMock ($ event ->test ());
81- SymfonyExtension::disableDnsMock ($ event ->test ());
98+ SymfonyExtension::disableClockMock ($ event ->test (), $ this -> reader );
99+ SymfonyExtension::disableDnsMock ($ event ->test (), $ this -> reader );
82100 }else {
83101 ClockMock::withClockMock (false );
84102 DnsMock::withMockedHosts ([]);
@@ -99,27 +117,27 @@ public function notify(BeforeTestMethodErrored $event): void
99117/**
100118 * @internal
101119 */
102- public static function disableClockMock (Test $ test ):void
120+ public static function disableClockMock (Test $ test, AttributeReader $ reader ):void
103121 {
104- if (self ::hasGroup ($ test ,'time-sensitive ' )) {
122+ if (self ::hasGroup ($ test ,'time-sensitive ' , $ reader , TimeSensitive::class )) {
105123 ClockMock::withClockMock (false );
106124 }
107125 }
108126
109127/**
110128 * @internal
111129 */
112- public static function disableDnsMock (Test $ test ):void
130+ public static function disableDnsMock (Test $ test, AttributeReader $ reader ):void
113131 {
114- if (self ::hasGroup ($ test ,'dns-sensitive ' )) {
132+ if (self ::hasGroup ($ test ,'dns-sensitive ' , $ reader , DnsSensitive::class )) {
115133 DnsMock::withMockedHosts ([]);
116134 }
117135 }
118136
119137/**
120138 * @internal
121139 */
122- public static function hasGroup (Test $ test ,string $ groupName ):bool
140+ public static function hasGroup (Test $ test ,string $ groupName, AttributeReader $ reader , string $ attribute ):bool
123141 {
124142if (!$ testinstanceof TestMethod) {
125143return false ;
@@ -131,6 +149,6 @@ public static function hasGroup(Test $test, string $groupName): bool
131149 }
132150 }
133151
134- return false ;
152+ return [] !== $ reader -> forClassAndMethod ( $ test -> className (), $ test -> methodName (), $ attribute ) ;
135153 }
136154}