@@ -182,4 +182,59 @@ function abortSignalAnyTests(signalInterface, controllerInterface) {
182
182
controller . abort ( ) ;
183
183
assert_equals ( result , "01234" ) ;
184
184
} , `Abort events for ${ desc } signals fire in the right order ${ suffix } ` ) ;
185
+
186
+ test ( t => {
187
+ const controller = new controllerInterface ( ) ;
188
+ const signal1 = signalInterface . any ( [ controller . signal ] ) ;
189
+ const signal2 = signalInterface . any ( [ signal1 ] ) ;
190
+ let eventFired = false ;
191
+
192
+ controller . signal . addEventListener ( 'abort' , ( ) => {
193
+ const signal3 = signalInterface . any ( [ signal2 ] ) ;
194
+ assert_true ( controller . signal . aborted ) ;
195
+ assert_true ( signal1 . aborted ) ;
196
+ assert_true ( signal2 . aborted ) ;
197
+ assert_true ( signal3 . aborted ) ;
198
+ eventFired = true ;
199
+ } ) ;
200
+
201
+ controller . abort ( ) ;
202
+ assert_true ( eventFired , "event fired" ) ;
203
+ } , `Dependent signals for ${ desc } are marked aborted before abort events fire ${ suffix } ` ) ;
204
+
205
+ test ( t => {
206
+ const controller1 = new controllerInterface ( ) ;
207
+ const controller2 = new controllerInterface ( ) ;
208
+ const signal = signalInterface . any ( [ controller1 . signal , controller2 . signal ] ) ;
209
+ let count = 0 ;
210
+
211
+ controller1 . signal . addEventListener ( 'abort' , ( ) => {
212
+ controller2 . abort ( "reason 2" ) ;
213
+ } ) ;
214
+
215
+ signal . addEventListener ( 'abort' , ( ) => {
216
+ count ++ ;
217
+ } ) ;
218
+
219
+ controller1 . abort ( "reason 1" ) ;
220
+ assert_equals ( count , 1 ) ;
221
+ assert_true ( signal . aborted ) ;
222
+ assert_equals ( signal . reason , "reason 1" ) ;
223
+ } , `Dependent signals for ${ desc } are aborted correctly for reentrant aborts ${ suffix } ` ) ;
224
+
225
+ test ( t => {
226
+ const source = signalInterface . abort ( ) ;
227
+ const dependent = signalInterface . any ( [ source ] ) ;
228
+ assert_true ( source . reason instanceof DOMException ) ;
229
+ assert_equals ( source . reason , dependent . reason ) ;
230
+ } , `Dependent signals for ${ desc } should use the same DOMException instance from the already aborted source signal ${ suffix } ` ) ;
231
+
232
+ test ( t => {
233
+ const controller = new controllerInterface ( ) ;
234
+ const source = controller . signal ;
235
+ const dependent = signalInterface . any ( [ source ] ) ;
236
+ controller . abort ( ) ;
237
+ assert_true ( source . reason instanceof DOMException ) ;
238
+ assert_equals ( source . reason , dependent . reason ) ;
239
+ } , `Dependent signals for ${ desc } should use the same DOMException instance from the source signal being aborted later ${ suffix } ` ) ;
185
240
}
0 commit comments