9
9
use PHPUnit \Event \Facade ;
10
10
use PHPUnit \Framework \MockObject \MockObject ;
11
11
use ReflectionClass ;
12
+ use ReflectionMethod ;
12
13
use ReflectionProperty ;
13
14
use SebastianBergmann \Template \Template ;
14
15
@@ -117,8 +118,32 @@ public function registerForTearDown(Deactivatable $deactivatable)
117
118
$ property ->setAccessible (true );
118
119
$ property ->setValue ($ facade , false );
119
120
121
+ $ method = new ReflectionMethod ($ facade , 'deferredDispatcher ' );
122
+ $ method ->setAccessible (true );
123
+ $ dispatcher = $ method ->invoke ($ facade );
124
+
125
+ $ propDispatcher = new ReflectionProperty ($ dispatcher , 'dispatcher ' );
126
+ $ propDispatcher ->setAccessible (true );
127
+ $ directDispatcher = $ propDispatcher ->getValue ($ dispatcher );
128
+
129
+ $ propSubscribers = new ReflectionProperty ($ directDispatcher , 'subscribers ' );
130
+ $ propSubscribers ->setAccessible (true );
131
+
120
132
$ facade ->registerSubscriber (
121
- new MockDisabler ($ deactivatable )
133
+ new MockDisabler (
134
+ $ deactivatable ,
135
+ static function (MockDisabler $ original ) use ($ directDispatcher , $ propSubscribers ) {
136
+ $ subscribers = $ propSubscribers ->getValue ($ directDispatcher );
137
+
138
+ foreach ($ subscribers ['PHPUnit\Event\Test\Finished ' ] as $ key => $ subscriber ) {
139
+ if ($ original === $ subscriber ) {
140
+ unset($ subscribers ['PHPUnit\Event\Test\Finished ' ][$ key ]);
141
+ }
142
+ }
143
+
144
+ $ propSubscribers ->setValue ($ directDispatcher , $ subscribers );
145
+ }
146
+ )
122
147
);
123
148
124
149
$ property ->setValue ($ facade , true );
@@ -127,7 +152,9 @@ public function registerForTearDown(Deactivatable $deactivatable)
127
152
}
128
153
129
154
$ result = $ this ->getTestResultObject ();
130
- $ result ->addListener (new MockDisabler ($ deactivatable ));
155
+ $ result ->addListener (new MockDisabler ($ deactivatable , static function (MockDisabler $ listener ) use ($ result ) {
156
+ $ result ->removeListener ($ listener );
157
+ }));
131
158
}
132
159
133
160
/**
0 commit comments