assertInstanceOf(Promise::class, $promise); $callback = function ($exception, $value) use (&$result) { $result = $value; }; $promise->when($callback); $this->assertSame($value, $result); }); } public function testFailedPromise() { Loop::run(function () { $exception = new \Exception; $promise = new Failure($exception); $promise = Amp\timeout($promise, 100); $this->assertInstanceOf(Promise::class, $promise); $callback = function ($exception, $value) use (&$reason) { $reason = $exception; }; $promise->when($callback); $this->assertSame($exception, $reason); }); } /** * @depends testSuccessfulPromise */ public function testFastPending() { $value = 1; Loop::run(function () use (&$result, $value) { $promise = new Pause(50, $value); $promise = Amp\timeout($promise, 100); $this->assertInstanceOf(Promise::class, $promise); $callback = function ($exception, $value) use (&$result) { $result = $value; }; $promise->when($callback); }); $this->assertSame($value, $result); } /** * @depends testSuccessfulPromise */ public function testSlowPending() { Loop::run(function () use (&$reason) { $promise = new Pause(200); $promise = Amp\timeout($promise, 100); $this->assertInstanceOf(Promise::class, $promise); $callback = function ($exception, $value) use (&$reason) { $reason = $exception; }; $promise->when($callback); }); $this->assertInstanceOf(Amp\TimeoutException::class, $reason); } /** * @depends testSuccessfulPromise */ public function testReactPromise() { Loop::run(function () { $value = 1; $promise = resolve($value); $promise = Amp\timeout($promise, 100); $this->assertInstanceOf(Promise::class, $promise); $callback = function ($exception, $value) use (&$result) { $result = $value; }; $promise->when($callback); $this->assertSame($value, $result); }); } public function testNonPromise() { $this->expectException(Amp\UnionTypeError::class); Amp\timeout(42, 42); } }