@@ -228,4 +228,72 @@ public function cancelShouldAlwaysTriggerCancellerWhenCalledOnRootPromise()
228
228
229
229
$ adapter ->promise ()->cancel ();
230
230
}
231
+
232
+ /** @test */
233
+ public function cancelShouldTriggerCancellerWhenFollowerCancels ()
234
+ {
235
+ $ adapter1 = $ this ->getPromiseTestAdapter ($ this ->expectCallableOnce ());
236
+
237
+ $ root = $ adapter1 ->promise ();
238
+
239
+ $ adapter2 = $ this ->getPromiseTestAdapter ($ this ->expectCallableOnce ());
240
+
241
+ $ follower = $ adapter2 ->promise ();
242
+ $ adapter2 ->resolve ($ root );
243
+
244
+ $ follower ->cancel ();
245
+ }
246
+
247
+ /** @test */
248
+ public function cancelShouldNotTriggerCancellerWhenCancellingOnlyOneFollower ()
249
+ {
250
+ $ adapter1 = $ this ->getPromiseTestAdapter ($ this ->expectCallableNever ());
251
+
252
+ $ root = $ adapter1 ->promise ();
253
+
254
+ $ adapter2 = $ this ->getPromiseTestAdapter ($ this ->expectCallableOnce ());
255
+
256
+ $ follower1 = $ adapter2 ->promise ();
257
+ $ adapter2 ->resolve ($ root );
258
+
259
+ $ adapter3 = $ this ->getPromiseTestAdapter ($ this ->expectCallableNever ());
260
+ $ adapter3 ->resolve ($ root );
261
+
262
+ $ follower1 ->cancel ();
263
+ }
264
+
265
+ /** @test */
266
+ public function cancelCalledOnFollowerShouldOnlyCancelWhenAllChildrenAndFollowerCancelled ()
267
+ {
268
+ $ adapter1 = $ this ->getPromiseTestAdapter ($ this ->expectCallableOnce ());
269
+
270
+ $ root = $ adapter1 ->promise ();
271
+
272
+ $ child = $ root ->then ();
273
+
274
+ $ adapter2 = $ this ->getPromiseTestAdapter ($ this ->expectCallableOnce ());
275
+
276
+ $ follower = $ adapter2 ->promise ();
277
+ $ adapter2 ->resolve ($ root );
278
+
279
+ $ follower ->cancel ();
280
+ $ child ->cancel ();
281
+ }
282
+
283
+ /** @test */
284
+ public function cancelShouldNotTriggerCancellerWhenCancellingFollowerButNotChildren ()
285
+ {
286
+ $ adapter1 = $ this ->getPromiseTestAdapter ($ this ->expectCallableNever ());
287
+
288
+ $ root = $ adapter1 ->promise ();
289
+
290
+ $ root ->then ();
291
+
292
+ $ adapter2 = $ this ->getPromiseTestAdapter ($ this ->expectCallableOnce ());
293
+
294
+ $ follower = $ adapter2 ->promise ();
295
+ $ adapter2 ->resolve ($ root );
296
+
297
+ $ follower ->cancel ();
298
+ }
231
299
}
0 commit comments