mirror of
https://github.com/DanielnetoDotCom/YouPHPTube
synced 2025-10-06 03:50:04 +02:00
171 lines
4 KiB
PHP
171 lines
4 KiB
PHP
<?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));
|
|
}
|
|
}
|