mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-09-03 08:35:20 +00:00
Add Promise::all
(#6152)
This commit is contained in:
@ -39,4 +39,110 @@ final class PromiseTest extends TestCase{
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
public function testAllPreResolved() : void{
|
||||
$resolver = new PromiseResolver();
|
||||
$resolver->resolve(1);
|
||||
|
||||
$allPromise = Promise::all([$resolver->getPromise()]);
|
||||
$done = false;
|
||||
$allPromise->onCompletion(
|
||||
function($value) use (&$done) : void{
|
||||
$done = true;
|
||||
self::assertEquals([1], $value);
|
||||
},
|
||||
function() use (&$done) : void{
|
||||
$done = true;
|
||||
self::fail("Promise was rejected");
|
||||
}
|
||||
);
|
||||
self::assertTrue($done);
|
||||
}
|
||||
|
||||
public function testAllPostResolved() : void{
|
||||
$resolver = new PromiseResolver();
|
||||
|
||||
$allPromise = Promise::all([$resolver->getPromise()]);
|
||||
$done = false;
|
||||
$allPromise->onCompletion(
|
||||
function($value) use (&$done) : void{
|
||||
$done = true;
|
||||
self::assertEquals([1], $value);
|
||||
},
|
||||
function() use (&$done) : void{
|
||||
$done = true;
|
||||
self::fail("Promise was rejected");
|
||||
}
|
||||
);
|
||||
self::assertFalse($done);
|
||||
$resolver->resolve(1);
|
||||
self::assertTrue($done);
|
||||
}
|
||||
|
||||
public function testAllResolve() : void{
|
||||
$resolver1 = new PromiseResolver();
|
||||
$resolver2 = new PromiseResolver();
|
||||
|
||||
$allPromise = Promise::all([$resolver1->getPromise(), $resolver2->getPromise()]);
|
||||
$done = false;
|
||||
$allPromise->onCompletion(
|
||||
function($value) use (&$done) : void{
|
||||
$done = true;
|
||||
self::assertEquals([1, 2], $value);
|
||||
},
|
||||
function() use (&$done) : void{
|
||||
$done = true;
|
||||
self::fail("Promise was rejected");
|
||||
}
|
||||
);
|
||||
self::assertFalse($done);
|
||||
$resolver1->resolve(1);
|
||||
self::assertFalse($done);
|
||||
$resolver2->resolve(2);
|
||||
self::assertTrue($done);
|
||||
}
|
||||
|
||||
public function testAllPartialReject() : void{
|
||||
$resolver1 = new PromiseResolver();
|
||||
$resolver2 = new PromiseResolver();
|
||||
|
||||
$allPromise = Promise::all([$resolver1->getPromise(), $resolver2->getPromise()]);
|
||||
$done = false;
|
||||
$allPromise->onCompletion(
|
||||
function($value) use (&$done) : void{
|
||||
$done = true;
|
||||
self::fail("Promise was unexpectedly resolved");
|
||||
},
|
||||
function() use (&$done) : void{
|
||||
$done = true;
|
||||
}
|
||||
);
|
||||
self::assertFalse($done);
|
||||
$resolver2->reject();
|
||||
self::assertTrue($done, "All promise should be rejected immediately after the first constituent rejection");
|
||||
$resolver1->resolve(1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Promise::all() should return a rejected promise if any of the input promises were rejected at the call time
|
||||
*/
|
||||
public function testAllPartialPreReject() : void{
|
||||
$resolver1 = new PromiseResolver();
|
||||
$resolver2 = new PromiseResolver();
|
||||
$resolver2->reject();
|
||||
|
||||
$allPromise = Promise::all([$resolver1->getPromise(), $resolver2->getPromise()]);
|
||||
$done = false;
|
||||
$allPromise->onCompletion(
|
||||
function($value) use (&$done) : void{
|
||||
$done = true;
|
||||
self::fail("Promise was unexpectedly resolved");
|
||||
},
|
||||
function() use (&$done) : void{
|
||||
$done = true;
|
||||
}
|
||||
);
|
||||
self::assertTrue($done, "All promise should be rejected immediately after the first constituent rejection");
|
||||
$resolver1->resolve(1);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user