123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- <?php
- namespace React\Promise;
- class FunctionResolveTest extends TestCase
- {
- /** @test */
- public function shouldResolveAnImmediateValue()
- {
- $expected = 123;
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($expected));
- resolve($expected)
- ->then(
- $mock,
- $this->expectCallableNever()
- );
- }
- /** @test */
- public function shouldResolveAFulfilledPromise()
- {
- $expected = 123;
- $resolved = new FulfilledPromise($expected);
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($expected));
- resolve($resolved)
- ->then(
- $mock,
- $this->expectCallableNever()
- );
- }
- /** @test */
- public function shouldResolveAThenable()
- {
- $thenable = new SimpleFulfilledTestThenable();
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo('foo'));
- resolve($thenable)
- ->then(
- $mock,
- $this->expectCallableNever()
- );
- }
- /** @test */
- public function shouldResolveACancellableThenable()
- {
- $thenable = new SimpleTestCancellableThenable();
- $promise = resolve($thenable);
- $promise->cancel();
- $this->assertTrue($thenable->cancelCalled);
- }
- /** @test */
- public function shouldRejectARejectedPromise()
- {
- $expected = 123;
- $resolved = new RejectedPromise($expected);
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($expected));
- resolve($resolved)
- ->then(
- $this->expectCallableNever(),
- $mock
- );
- }
- /** @test */
- public function shouldSupportDeepNestingInPromiseChains()
- {
- $d = new Deferred();
- $d->resolve(false);
- $result = resolve(resolve($d->promise()->then(function ($val) {
- $d = new Deferred();
- $d->resolve($val);
- $identity = function ($val) {
- return $val;
- };
- return resolve($d->promise()->then($identity))->then(
- function ($val) {
- return !$val;
- }
- );
- })));
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(true));
- $result->then($mock);
- }
- /** @test */
- public function shouldSupportVeryDeepNestedPromises()
- {
- $deferreds = [];
- // @TODO Increase count once global-queue is merged
- for ($i = 0; $i < 10; $i++) {
- $deferreds[] = $d = new Deferred();
- $p = $d->promise();
- $last = $p;
- for ($j = 0; $j < 10; $j++) {
- $last = $last->then(function($result) {
- return $result;
- });
- }
- }
- $p = null;
- foreach ($deferreds as $d) {
- if ($p) {
- $d->resolve($p);
- }
- $p = $d->promise();
- }
- $deferreds[0]->resolve(true);
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(true));
- $deferreds[0]->promise()->then($mock);
- }
- /** @test */
- public function returnsExtendePromiseForSimplePromise()
- {
- $promise = $this
- ->getMockBuilder('React\Promise\PromiseInterface')
- ->getMock();
- $this->assertInstanceOf('React\Promise\ExtendedPromiseInterface', resolve($promise));
- }
- }
|