RejectedPromiseTest.php 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. <?php
  2. namespace React\Promise\Internal;
  3. use Exception;
  4. use LogicException;
  5. use React\Promise\PromiseAdapter\CallbackPromiseAdapter;
  6. use React\Promise\PromiseTest\PromiseRejectedTestTrait;
  7. use React\Promise\PromiseTest\PromiseSettledTestTrait;
  8. use React\Promise\TestCase;
  9. class RejectedPromiseTest extends TestCase
  10. {
  11. use PromiseSettledTestTrait,
  12. PromiseRejectedTestTrait;
  13. /**
  14. * @return CallbackPromiseAdapter<never>
  15. */
  16. public function getPromiseTestAdapter(callable $canceller = null): CallbackPromiseAdapter
  17. {
  18. /** @var ?RejectedPromise */
  19. $promise = null;
  20. return new CallbackPromiseAdapter([
  21. 'promise' => function () use (&$promise) {
  22. if (!$promise) {
  23. throw new LogicException('RejectedPromise must be rejected before obtaining the promise');
  24. }
  25. return $promise;
  26. },
  27. 'resolve' => function () {
  28. throw new LogicException('You cannot call resolve() for React\Promise\RejectedPromise');
  29. },
  30. 'reject' => function (\Throwable $reason) use (&$promise) {
  31. if (!$promise) {
  32. $promise = new RejectedPromise($reason);
  33. }
  34. },
  35. 'settle' => function ($reason = '') use (&$promise) {
  36. if (!$promise) {
  37. if (!$reason instanceof Exception) {
  38. $reason = new Exception((string) $reason);
  39. }
  40. $promise = new RejectedPromise($reason);
  41. }
  42. },
  43. ]);
  44. }
  45. }