Skip to content

Commit 5d58c47

Browse files
committed
Add tests for missing follower cancellation propagation
1 parent 177fe31 commit 5d58c47

1 file changed

Lines changed: 68 additions & 0 deletions

File tree

tests/PromiseTest/CancelTestTrait.php

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

205205
$adapter->promise()->cancel();
206206
}
207+
208+
/** @test */
209+
public function cancelShouldTriggerCancellerWhenFollowerCancels()
210+
{
211+
$adapter1 = $this->getPromiseTestAdapter($this->expectCallableOnce());
212+
213+
$root = $adapter1->promise();
214+
215+
$adapter2 = $this->getPromiseTestAdapter($this->expectCallableOnce());
216+
217+
$follower = $adapter2->promise();
218+
$adapter2->resolve($root);
219+
220+
$follower->cancel();
221+
}
222+
223+
/** @test */
224+
public function cancelShouldNotTriggerCancellerWhenCancellingOnlyOneFollower()
225+
{
226+
$adapter1 = $this->getPromiseTestAdapter($this->expectCallableNever());
227+
228+
$root = $adapter1->promise();
229+
230+
$adapter2 = $this->getPromiseTestAdapter($this->expectCallableOnce());
231+
232+
$follower1 = $adapter2->promise();
233+
$adapter2->resolve($root);
234+
235+
$adapter3 = $this->getPromiseTestAdapter($this->expectCallableNever());
236+
$adapter3->resolve($root);
237+
238+
$follower1->cancel();
239+
}
240+
241+
/** @test */
242+
public function cancelCalledOnFollowerShouldOnlyCancelWhenAllChildrenAndFollowerCancelled()
243+
{
244+
$adapter1 = $this->getPromiseTestAdapter($this->expectCallableOnce());
245+
246+
$root = $adapter1->promise();
247+
248+
$child = $root->then();
249+
250+
$adapter2 = $this->getPromiseTestAdapter($this->expectCallableOnce());
251+
252+
$follower = $adapter2->promise();
253+
$adapter2->resolve($root);
254+
255+
$follower->cancel();
256+
$child->cancel();
257+
}
258+
259+
/** @test */
260+
public function cancelShouldNotTriggerCancellerWhenCancellingFollowerButNotChildren()
261+
{
262+
$adapter1 = $this->getPromiseTestAdapter($this->expectCallableNever());
263+
264+
$root = $adapter1->promise();
265+
266+
$root->then();
267+
268+
$adapter2 = $this->getPromiseTestAdapter($this->expectCallableOnce());
269+
270+
$follower = $adapter2->promise();
271+
$adapter2->resolve($root);
272+
273+
$follower->cancel();
274+
}
207275
}

0 commit comments

Comments
 (0)