FulfilledPromiseTest.php 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <?php
  2. namespace React\Promise\Internal;
  3. use InvalidArgumentException;
  4. use LogicException;
  5. use React\Promise\PromiseAdapter\CallbackPromiseAdapter;
  6. use React\Promise\PromiseTest\PromiseFulfilledTestTrait;
  7. use React\Promise\PromiseTest\PromiseSettledTestTrait;
  8. use React\Promise\TestCase;
  9. /**
  10. * @template T
  11. */
  12. class FulfilledPromiseTest extends TestCase
  13. {
  14. use PromiseSettledTestTrait,
  15. PromiseFulfilledTestTrait;
  16. /**
  17. * @return CallbackPromiseAdapter<T>
  18. */
  19. public function getPromiseTestAdapter(callable $canceller = null): CallbackPromiseAdapter
  20. {
  21. /** @var ?FulfilledPromise<T> */
  22. $promise = null;
  23. return new CallbackPromiseAdapter([
  24. 'promise' => function () use (&$promise) {
  25. if (!$promise) {
  26. throw new LogicException('FulfilledPromise must be resolved before obtaining the promise');
  27. }
  28. return $promise;
  29. },
  30. 'resolve' => function ($value = null) use (&$promise) {
  31. if (!$promise) {
  32. $promise = new FulfilledPromise($value);
  33. }
  34. },
  35. 'reject' => function () {
  36. throw new LogicException('You cannot call reject() for React\Promise\FulfilledPromise');
  37. },
  38. 'settle' => function ($value = null) use (&$promise) {
  39. if (!$promise) {
  40. $promise = new FulfilledPromise($value);
  41. }
  42. },
  43. ]);
  44. }
  45. /**
  46. * @test
  47. */
  48. public function shouldThrowExceptionIfConstructedWithAPromise(): void
  49. {
  50. $this->expectException(InvalidArgumentException::class);
  51. new FulfilledPromise(new FulfilledPromise());
  52. }
  53. }