|
6 | 6 | use React\EventLoop\Loop;
|
7 | 7 | use React\Promise\Deferred;
|
8 | 8 | use React\Promise\Promise;
|
| 9 | +use function React\Async\async; |
9 | 10 |
|
10 | 11 | class AwaitTest extends TestCase
|
11 | 12 | {
|
@@ -68,6 +69,34 @@ public function testAwaitThrowsExceptionImmediatelyWhenPromiseIsRejected(callabl
|
68 | 69 | }
|
69 | 70 | }
|
70 | 71 |
|
| 72 | + /** |
| 73 | + * @dataProvider provideAwaiters |
| 74 | + */ |
| 75 | + public function testAwaitAsyncThrowsExceptionImmediatelyWhenPromiseIsRejected(callable $await) |
| 76 | + { |
| 77 | + $deferred = new Deferred(); |
| 78 | + |
| 79 | + $ticks = 0; |
| 80 | + Loop::futureTick(function () use (&$ticks) { |
| 81 | + ++$ticks; |
| 82 | + Loop::futureTick(function () use (&$ticks) { |
| 83 | + ++$ticks; |
| 84 | + }); |
| 85 | + }); |
| 86 | + |
| 87 | + Loop::futureTick(fn() => $deferred->reject(new \RuntimeException())); |
| 88 | + |
| 89 | + $promise = async(function () use ($deferred, $await) { |
| 90 | + return $await($deferred->promise()); |
| 91 | + })(); |
| 92 | + |
| 93 | + try { |
| 94 | + $await($promise); |
| 95 | + } catch (\RuntimeException $e) { |
| 96 | + $this->assertEquals(1, $ticks); |
| 97 | + } |
| 98 | + } |
| 99 | + |
71 | 100 | /**
|
72 | 101 | * @dataProvider provideAwaiters
|
73 | 102 | */
|
@@ -176,6 +205,31 @@ public function testAwaitReturnsValueImmediatelyWhenPromiseIsFulfilled(callable
|
176 | 205 | $this->assertEquals(1, $ticks);
|
177 | 206 | }
|
178 | 207 |
|
| 208 | + /** |
| 209 | + * @dataProvider provideAwaiters |
| 210 | + */ |
| 211 | + public function testAwaitAsyncReturnsValueImmediatelyWhenPromiseIsFulfilled(callable $await) |
| 212 | + { |
| 213 | + $deferred = new Deferred(); |
| 214 | + |
| 215 | + $ticks = 0; |
| 216 | + Loop::futureTick(function () use (&$ticks) { |
| 217 | + ++$ticks; |
| 218 | + Loop::futureTick(function () use (&$ticks) { |
| 219 | + ++$ticks; |
| 220 | + }); |
| 221 | + }); |
| 222 | + |
| 223 | + Loop::futureTick(fn() => $deferred->resolve(42)); |
| 224 | + |
| 225 | + $promise = async(function () use ($deferred, $await) { |
| 226 | + return $await($deferred->promise()); |
| 227 | + })(); |
| 228 | + |
| 229 | + $this->assertEquals(42, $await($promise)); |
| 230 | + $this->assertEquals(1, $ticks); |
| 231 | + } |
| 232 | + |
179 | 233 | /**
|
180 | 234 | * @dataProvider provideAwaiters
|
181 | 235 | */
|
|
0 commit comments