From 03ef74d0cfe675a6e18a91f039182ca1b248d8f5 Mon Sep 17 00:00:00 2001 From: EoleDev Date: Wed, 9 Mar 2016 16:03:46 +0100 Subject: MAJ Librarys --- .../guzzlehttp/promises/tests/EachPromiseTest.php | 48 ++++++++++++++++++++-- .../guzzlehttp/promises/tests/PromiseTest.php | 12 ++++++ 2 files changed, 57 insertions(+), 3 deletions(-) (limited to 'server/vendor/guzzlehttp/promises/tests') diff --git a/server/vendor/guzzlehttp/promises/tests/EachPromiseTest.php b/server/vendor/guzzlehttp/promises/tests/EachPromiseTest.php index 0a0a851..08af2a0 100644 --- a/server/vendor/guzzlehttp/promises/tests/EachPromiseTest.php +++ b/server/vendor/guzzlehttp/promises/tests/EachPromiseTest.php @@ -39,8 +39,8 @@ class EachPromiseTest extends \PHPUnit_Framework_TestCase public function testIsWaitable() { - $a = new Promise(function () use (&$a) { $a->resolve('a'); }); - $b = new Promise(function () use (&$b) { $b->resolve('b'); }); + $a = $this->createSelfResolvingPromise('a'); + $b = $this->createSelfResolvingPromise('b'); $called = []; $each = new EachPromise([$a, $b], [ 'fulfilled' => function ($value) use (&$called) { $called[] = $value; } @@ -54,7 +54,7 @@ class EachPromiseTest extends \PHPUnit_Framework_TestCase public function testCanResolveBeforeConsumingAll() { $called = 0; - $a = new Promise(function () use (&$a) { $a->resolve('a'); }); + $a = $this->createSelfResolvingPromise('a'); $b = new Promise(function () { $this->fail(); }); $each = new EachPromise([$a, $b], [ 'fulfilled' => function ($value, $idx, Promise $aggregate) use (&$called) { @@ -291,4 +291,46 @@ class EachPromiseTest extends \PHPUnit_Framework_TestCase } $this->assertEquals(range(0, 9), $results); } + + private function createSelfResolvingPromise($value) + { + $p = new Promise(function () use (&$p, $value) { + $p->resolve($value); + }); + + return $p; + } + + public function testMutexPreventsGeneratorRecursion() + { + $results = $promises = []; + for ($i = 0; $i < 20; $i++) { + $p = $this->createSelfResolvingPromise($i); + $pending[] = $p; + $promises[] = $p; + } + + $iter = function () use (&$promises, &$pending) { + foreach ($promises as $promise) { + // Resolve a promises, which will trigger the then() function, + // which would cause the EachPromise to try to add more + // promises to the queue. Without a lock, this would trigger + // a "Cannot resume an already running generator" fatal error. + if ($p = array_pop($pending)) { + $p->wait(); + } + yield $promise; + } + }; + + $each = new EachPromise($iter(), [ + 'concurrency' => 5, + 'fulfilled' => function ($r) use (&$results, &$pending) { + $results[] = $r; + } + ]); + + $each->promise()->wait(); + $this->assertCount(20, $results); + } } diff --git a/server/vendor/guzzlehttp/promises/tests/PromiseTest.php b/server/vendor/guzzlehttp/promises/tests/PromiseTest.php index 946c627..599d8ae 100644 --- a/server/vendor/guzzlehttp/promises/tests/PromiseTest.php +++ b/server/vendor/guzzlehttp/promises/tests/PromiseTest.php @@ -172,6 +172,18 @@ class PromiseTest extends \PHPUnit_Framework_TestCase $this->assertEquals('Whoop', $p->wait()); } + public function testWaitsOnAPromiseChainEvenWhenNotUnwrapped() + { + $p2 = new Promise(function () use (&$p2) { + $p2->reject('Fail'); + }); + $p = new Promise(function () use ($p2, &$p) { + $p->resolve($p2); + }); + $p->wait(false); + $this->assertSame(Promise::REJECTED, $p2->getState()); + } + public function testCannotCancelNonPending() { $p = new Promise(); -- cgit v1.2.3