Skip to content

Commit f21104c

Browse files
committed
Add tests for missing follower cancellation propagation
1 parent 84afb3d commit f21104c

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed

tests/PromiseTest/CancelTestTrait.php

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,4 +228,72 @@ public function cancelShouldAlwaysTriggerCancellerWhenCalledOnRootPromise()
228228

229229
$adapter->promise()->cancel();
230230
}
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+
}
231299
}

0 commit comments

Comments
 (0)