PromiseSettledTestTrait.php 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?php
  2. namespace React\Promise\PromiseTest;
  3. use React\Promise\Internal\RejectedPromise;
  4. use React\Promise\PromiseAdapter\PromiseAdapterInterface;
  5. use React\Promise\PromiseInterface;
  6. trait PromiseSettledTestTrait
  7. {
  8. abstract public function getPromiseTestAdapter(callable $canceller = null): PromiseAdapterInterface;
  9. /** @test */
  10. public function thenShouldReturnAPromiseForSettledPromise(): void
  11. {
  12. $adapter = $this->getPromiseTestAdapter();
  13. $adapter->settle(null);
  14. self::assertInstanceOf(PromiseInterface::class, $adapter->promise()->then());
  15. if ($adapter->promise() instanceof RejectedPromise) {
  16. $adapter->promise()->then(null, $this->expectCallableOnce()); // avoid reporting unhandled rejection
  17. }
  18. }
  19. /** @test */
  20. public function thenShouldReturnAllowNullForSettledPromise(): void
  21. {
  22. $adapter = $this->getPromiseTestAdapter();
  23. $adapter->settle(null);
  24. self::assertInstanceOf(PromiseInterface::class, $adapter->promise()->then(null, null));
  25. if ($adapter->promise() instanceof RejectedPromise) {
  26. $adapter->promise()->then(null, $this->expectCallableOnce()); // avoid reporting unhandled rejection
  27. }
  28. }
  29. /** @test */
  30. public function cancelShouldHaveNoEffectForSettledPromise(): void
  31. {
  32. $adapter = $this->getPromiseTestAdapter($this->expectCallableNever());
  33. $adapter->settle(null);
  34. $adapter->promise()->cancel();
  35. }
  36. /** @test */
  37. public function finallyShouldReturnAPromiseForSettledPromise(): void
  38. {
  39. $adapter = $this->getPromiseTestAdapter();
  40. $adapter->settle(null);
  41. self::assertInstanceOf(PromiseInterface::class, $promise = $adapter->promise()->finally(function () {}));
  42. if ($promise instanceof RejectedPromise) {
  43. $promise->then(null, $this->expectCallableOnce()); // avoid reporting unhandled rejection
  44. }
  45. }
  46. /**
  47. * @test
  48. * @deprecated
  49. */
  50. public function alwaysShouldReturnAPromiseForSettledPromise(): void
  51. {
  52. $adapter = $this->getPromiseTestAdapter();
  53. $adapter->settle(null);
  54. self::assertInstanceOf(PromiseInterface::class, $promise = $adapter->promise()->always(function () {}));
  55. if ($promise instanceof RejectedPromise) {
  56. $promise->then(null, $this->expectCallableOnce()); // avoid reporting unhandled rejection
  57. }
  58. }
  59. }