mirror of
https://github.com/DanielnetoDotCom/YouPHPTube
synced 2025-10-06 03:50:04 +02:00
198 lines
4.6 KiB
PHP
198 lines
4.6 KiB
PHP
<?php
|
|
|
|
namespace React\Promise;
|
|
|
|
class FunctionMapTest extends TestCase
|
|
{
|
|
protected function mapper()
|
|
{
|
|
return function ($val) {
|
|
return $val * 2;
|
|
};
|
|
}
|
|
|
|
protected function promiseMapper()
|
|
{
|
|
return function ($val) {
|
|
return resolve($val * 2);
|
|
};
|
|
}
|
|
|
|
/** @test */
|
|
public function shouldMapInputValuesArray()
|
|
{
|
|
$mock = $this->createCallableMock();
|
|
$mock
|
|
->expects($this->once())
|
|
->method('__invoke')
|
|
->with($this->identicalTo([2, 4, 6]));
|
|
|
|
map(
|
|
[1, 2, 3],
|
|
$this->mapper()
|
|
)->then($mock);
|
|
}
|
|
|
|
/** @test */
|
|
public function shouldMapInputPromisesArray()
|
|
{
|
|
$mock = $this->createCallableMock();
|
|
$mock
|
|
->expects($this->once())
|
|
->method('__invoke')
|
|
->with($this->identicalTo([2, 4, 6]));
|
|
|
|
map(
|
|
[resolve(1), resolve(2), resolve(3)],
|
|
$this->mapper()
|
|
)->then($mock);
|
|
}
|
|
|
|
/** @test */
|
|
public function shouldMapMixedInputArray()
|
|
{
|
|
$mock = $this->createCallableMock();
|
|
$mock
|
|
->expects($this->once())
|
|
->method('__invoke')
|
|
->with($this->identicalTo([2, 4, 6]));
|
|
|
|
map(
|
|
[1, resolve(2), 3],
|
|
$this->mapper()
|
|
)->then($mock);
|
|
}
|
|
|
|
/** @test */
|
|
public function shouldMapInputWhenMapperReturnsAPromise()
|
|
{
|
|
$mock = $this->createCallableMock();
|
|
$mock
|
|
->expects($this->once())
|
|
->method('__invoke')
|
|
->with($this->identicalTo([2, 4, 6]));
|
|
|
|
map(
|
|
[1, 2, 3],
|
|
$this->promiseMapper()
|
|
)->then($mock);
|
|
}
|
|
|
|
/** @test */
|
|
public function shouldAcceptAPromiseForAnArray()
|
|
{
|
|
$mock = $this->createCallableMock();
|
|
$mock
|
|
->expects($this->once())
|
|
->method('__invoke')
|
|
->with($this->identicalTo([2, 4, 6]));
|
|
|
|
map(
|
|
resolve([1, resolve(2), 3]),
|
|
$this->mapper()
|
|
)->then($mock);
|
|
}
|
|
|
|
/** @test */
|
|
public function shouldResolveToEmptyArrayWhenInputPromiseDoesNotResolveToArray()
|
|
{
|
|
$mock = $this->createCallableMock();
|
|
$mock
|
|
->expects($this->once())
|
|
->method('__invoke')
|
|
->with($this->identicalTo([]));
|
|
|
|
map(
|
|
resolve(1),
|
|
$this->mapper()
|
|
)->then($mock);
|
|
}
|
|
|
|
/** @test */
|
|
public function shouldPreserveTheOrderOfArrayWhenResolvingAsyncPromises()
|
|
{
|
|
$mock = $this->createCallableMock();
|
|
$mock
|
|
->expects($this->once())
|
|
->method('__invoke')
|
|
->with($this->identicalTo([2, 4, 6]));
|
|
|
|
$deferred = new Deferred();
|
|
|
|
map(
|
|
[resolve(1), $deferred->promise(), resolve(3)],
|
|
$this->mapper()
|
|
)->then($mock);
|
|
|
|
$deferred->resolve(2);
|
|
}
|
|
|
|
/** @test */
|
|
public function shouldRejectWhenInputContainsRejection()
|
|
{
|
|
$mock = $this->createCallableMock();
|
|
$mock
|
|
->expects($this->once())
|
|
->method('__invoke')
|
|
->with($this->identicalTo(2));
|
|
|
|
map(
|
|
[resolve(1), reject(2), resolve(3)],
|
|
$this->mapper()
|
|
)->then($this->expectCallableNever(), $mock);
|
|
}
|
|
|
|
/** @test */
|
|
public function shouldRejectWhenInputPromiseRejects()
|
|
{
|
|
$mock = $this->createCallableMock();
|
|
$mock
|
|
->expects($this->once())
|
|
->method('__invoke')
|
|
->with($this->identicalTo(null));
|
|
|
|
map(
|
|
reject(),
|
|
$this->mapper()
|
|
)->then($this->expectCallableNever(), $mock);
|
|
}
|
|
|
|
/** @test */
|
|
public function shouldCancelInputPromise()
|
|
{
|
|
$mock = $this
|
|
->getMockBuilder('React\Promise\CancellablePromiseInterface')
|
|
->getMock();
|
|
$mock
|
|
->expects($this->once())
|
|
->method('cancel');
|
|
|
|
map(
|
|
$mock,
|
|
$this->mapper()
|
|
)->cancel();
|
|
}
|
|
|
|
/** @test */
|
|
public function shouldCancelInputArrayPromises()
|
|
{
|
|
$mock1 = $this
|
|
->getMockBuilder('React\Promise\CancellablePromiseInterface')
|
|
->getMock();
|
|
$mock1
|
|
->expects($this->once())
|
|
->method('cancel');
|
|
|
|
$mock2 = $this
|
|
->getMockBuilder('React\Promise\CancellablePromiseInterface')
|
|
->getMock();
|
|
$mock2
|
|
->expects($this->once())
|
|
->method('cancel');
|
|
|
|
map(
|
|
[$mock1, $mock2],
|
|
$this->mapper()
|
|
)->cancel();
|
|
}
|
|
}
|