123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- <?php
- namespace React\Promise;
- use React\Promise\Exception\LengthException;
- class FunctionAnyTest extends TestCase
- {
- /** @test */
- public function shouldRejectWithLengthExceptionWithEmptyInputArray()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with(
- $this->callback(function($exception){
- return $exception instanceof LengthException &&
- 'Input array must contain at least 1 item but contains only 0 items.' === $exception->getMessage();
- })
- );
- any([])
- ->then($this->expectCallableNever(), $mock);
- }
- /** @test */
- public function shouldResolveToNullWithNonArrayInput()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(null));
- any(null)
- ->then($mock);
- }
- /** @test */
- public function shouldResolveWithAnInputValue()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
- any([1, 2, 3])
- ->then($mock);
- }
- /** @test */
- public function shouldResolveWithAPromisedInputValue()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
- any([resolve(1), resolve(2), resolve(3)])
- ->then($mock);
- }
- /** @test */
- public function shouldRejectWithAllRejectedInputValuesIfAllInputsAreRejected()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo([0 => 1, 1 => 2, 2 => 3]));
- any([reject(1), reject(2), reject(3)])
- ->then($this->expectCallableNever(), $mock);
- }
- /** @test */
- public function shouldResolveWhenFirstInputPromiseResolves()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
- any([resolve(1), reject(2), reject(3)])
- ->then($mock);
- }
- /** @test */
- public function shouldAcceptAPromiseForAnArray()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
- any(resolve([1, 2, 3]))
- ->then($mock);
- }
- /** @test */
- public function shouldResolveToNullArrayWhenInputPromiseDoesNotResolveToArray()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(null));
- any(resolve(1))
- ->then($mock);
- }
- /** @test */
- public function shouldNotRelyOnArryIndexesWhenUnwrappingToASingleResolutionValue()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(2));
- $d1 = new Deferred();
- $d2 = new Deferred();
- any(['abc' => $d1->promise(), 1 => $d2->promise()])
- ->then($mock);
- $d2->resolve(2);
- $d1->resolve(1);
- }
- /** @test */
- public function shouldRejectWhenInputPromiseRejects()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(null));
- any(reject())
- ->then($this->expectCallableNever(), $mock);
- }
- /** @test */
- public function shouldCancelInputPromise()
- {
- $mock = $this
- ->getMockBuilder('React\Promise\CancellablePromiseInterface')
- ->getMock();
- $mock
- ->expects($this->once())
- ->method('cancel');
- any($mock)->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');
- any([$mock1, $mock2])->cancel();
- }
- /** @test */
- public function shouldNotCancelOtherPendingInputArrayPromisesIfOnePromiseFulfills()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->never())
- ->method('__invoke');
- $deferred = New Deferred($mock);
- $deferred->resolve();
- $mock2 = $this
- ->getMockBuilder('React\Promise\CancellablePromiseInterface')
- ->getMock();
- $mock2
- ->expects($this->never())
- ->method('cancel');
- some([$deferred->promise(), $mock2], 1)->cancel();
- }
- }
|