From 095430ea1a9ad14aa3cb9826309dbaa379878d6b Mon Sep 17 00:00:00 2001 From: umbri Date: Sat, 9 Sep 2017 23:04:16 +0200 Subject: [PATCH] added: adapt + tests --- composer.json | 3 ++- src/functions.php | 20 +++++++++++++++ tests/FunctionAdapt.php | 55 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 tests/FunctionAdapt.php diff --git a/composer.json b/composer.json index cec5bf92..d57005e8 100644 --- a/composer.json +++ b/composer.json @@ -9,7 +9,8 @@ "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "~4.8" + "phpunit/phpunit": "~4.8", + "amphp/amp": "^2" }, "autoload": { "psr-4": { diff --git a/src/functions.php b/src/functions.php index 97d03e6d..f9392aec 100644 --- a/src/functions.php +++ b/src/functions.php @@ -234,3 +234,23 @@ function _checkTypehint(callable $callback, $object) return $expectedException->getClass()->isInstance($object); } + +/** + * @param \Amp\Promise $promise + * + * @return PromiseInterface + */ +function adapt(\Amp\Promise $promise): PromiseInterface +{ + $deferred = new Deferred(); + + $promise->onResolve(function ($error = null, $result = null) use ($deferred) { + if ($error) { + $deferred->reject($error); + } else { + $deferred->resolve($result); + } + }); + + return $deferred->promise(); +} diff --git a/tests/FunctionAdapt.php b/tests/FunctionAdapt.php new file mode 100644 index 00000000..e3aef19b --- /dev/null +++ b/tests/FunctionAdapt.php @@ -0,0 +1,55 @@ +promise = $promise; + } + + public function onResolve(callable $onResolved) { + $this->promise->then(function ($value = null) use ($onResolved) { + $onResolved(null, $value); + }, function ($exception) use ($onResolved) { + $onResolved($exception, null); + }); + } +} + +class FunctionAdapt extends TestCase { + + /** @test */ + public function shouldResolve() { + $value = 1; + + $promise = new AmpPromiseMock(new FulfilledPromise($value)); + + $promise = adapt($promise); + + $promise->then(function ($inValue) use (&$result) { + $result = $inValue; + }); + + $this->assertSame($value, $result); + } + + /** @test */ + public function shouldReject() { + $value = 123; + + $promise = new AmpPromiseMock(new RejectedPromise($value)); + + $promise = adapt($promise); + + $promise->then(function () { + + }, function ($inValue) use (&$result) { + $result = $inValue; + }); + + $this->assertSame($value, $result); + } +} \ No newline at end of file