1<?php
2
3namespace React\Promise\PromiseTest;
4
5trait PromisePendingTestTrait
6{
7    /**
8     * @return \React\Promise\PromiseAdapter\PromiseAdapterInterface
9     */
10    abstract public function getPromiseTestAdapter(callable $canceller = null);
11
12    /** @test */
13    public function thenShouldReturnAPromiseForPendingPromise()
14    {
15        $adapter = $this->getPromiseTestAdapter();
16
17        $this->assertInstanceOf('React\\Promise\\PromiseInterface', $adapter->promise()->then());
18    }
19
20    /** @test */
21    public function thenShouldReturnAllowNullForPendingPromise()
22    {
23        $adapter = $this->getPromiseTestAdapter();
24
25        $this->assertInstanceOf('React\\Promise\\PromiseInterface', $adapter->promise()->then(null, null, null));
26    }
27
28    /** @test */
29    public function cancelShouldReturnNullForPendingPromise()
30    {
31        $adapter = $this->getPromiseTestAdapter();
32
33        $this->assertNull($adapter->promise()->cancel());
34    }
35
36    /** @test */
37    public function doneShouldReturnNullForPendingPromise()
38    {
39        $adapter = $this->getPromiseTestAdapter();
40
41        $this->assertNull($adapter->promise()->done());
42    }
43
44    /** @test */
45    public function doneShouldReturnAllowNullForPendingPromise()
46    {
47        $adapter = $this->getPromiseTestAdapter();
48
49        $this->assertNull($adapter->promise()->done(null, null, null));
50    }
51
52    /** @test */
53    public function otherwiseShouldNotInvokeRejectionHandlerForPendingPromise()
54    {
55        $adapter = $this->getPromiseTestAdapter();
56
57        $adapter->settle();
58        $adapter->promise()->otherwise($this->expectCallableNever());
59    }
60
61    /** @test */
62    public function alwaysShouldReturnAPromiseForPendingPromise()
63    {
64        $adapter = $this->getPromiseTestAdapter();
65
66        $this->assertInstanceOf('React\\Promise\\PromiseInterface', $adapter->promise()->always(function () {}));
67    }
68}
69