3
namespace React\Promise;
5
use React\Promise\PromiseAdapter\CallbackPromiseAdapter;
7
class DeferredTest extends TestCase
9
use PromiseTest\FullTestTrait;
11
public function getPromiseTestAdapter(callable $canceller = null)
13
$d = new Deferred($canceller);
15
return new CallbackPromiseAdapter([
16
'promise' => [$d, 'promise'],
17
'resolve' => [$d, 'resolve'],
18
'reject' => [$d, 'reject'],
19
'notify' => [$d, 'progress'],
20
'settle' => [$d, 'resolve'],
25
public function progressIsAnAliasForNotify()
27
$deferred = new Deferred();
29
$sentinel = new \stdClass();
31
$mock = $this->createCallableMock();
33
->expects($this->once())
38
->then($this->expectCallableNever(), $this->expectCallableNever(), $mock);
40
$deferred->progress($sentinel);
44
public function shouldRejectWithoutCreatingGarbageCyclesIfCancellerRejectsWithException()
47
$deferred = new Deferred(function ($resolve, $reject) {
48
$reject(new \Exception('foo'));
50
$deferred->promise()->cancel();
53
$this->assertSame(0, gc_collect_cycles());
57
public function shouldRejectWithoutCreatingGarbageCyclesIfParentCancellerRejectsWithException()
60
$deferred = new Deferred(function ($resolve, $reject) {
61
$reject(new \Exception('foo'));
63
$deferred->promise()->then()->cancel();
66
$this->assertSame(0, gc_collect_cycles());
70
public function shouldRejectWithoutCreatingGarbageCyclesIfCancellerHoldsReferenceAndExplicitlyRejectWithException()
73
$deferred = new Deferred(function () use (&$deferred) { });
74
$deferred->reject(new \Exception('foo'));
77
$this->assertSame(0, gc_collect_cycles());
81
public function shouldNotLeaveGarbageCyclesWhenRemovingLastReferenceToPendingDeferred()
84
$deferred = new Deferred();
88
$this->assertSame(0, gc_collect_cycles());
92
public function shouldNotLeaveGarbageCyclesWhenRemovingLastReferenceToPendingDeferredWithUnusedCanceller()
95
$deferred = new Deferred(function () { });
99
$this->assertSame(0, gc_collect_cycles());
103
public function shouldNotLeaveGarbageCyclesWhenRemovingLastReferenceToPendingDeferredWithNoopCanceller()
106
$deferred = new Deferred(function () { });
107
$deferred->promise()->cancel();
110
$this->assertSame(0, gc_collect_cycles());