TestCase.php 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. <?php
  2. namespace React\Promise;
  3. use PHPUnit\Framework\MockObject\MockBuilder;
  4. use PHPUnit\Framework\MockObject\MockObject;
  5. use PHPUnit\Framework\TestCase as BaseTestCase;
  6. class TestCase extends BaseTestCase
  7. {
  8. public function expectCallableExactly(int $amount): callable
  9. {
  10. $mock = $this->createCallableMock();
  11. $mock->expects(self::exactly($amount))->method('__invoke');
  12. assert(is_callable($mock));
  13. return $mock;
  14. }
  15. public function expectCallableOnce(): callable
  16. {
  17. $mock = $this->createCallableMock();
  18. $mock->expects(self::once())->method('__invoke');
  19. assert(is_callable($mock));
  20. return $mock;
  21. }
  22. public function expectCallableNever(): callable
  23. {
  24. $mock = $this->createCallableMock();
  25. $mock->expects(self::never())->method('__invoke');
  26. assert(is_callable($mock));
  27. return $mock;
  28. }
  29. /** @return MockObject&callable */
  30. protected function createCallableMock(): MockObject
  31. {
  32. $builder = $this->getMockBuilder(\stdClass::class);
  33. if (method_exists($builder, 'addMethods')) {
  34. // PHPUnit 9+
  35. $mock = $builder->addMethods(['__invoke'])->getMock();
  36. } else {
  37. // legacy PHPUnit 4 - PHPUnit 9
  38. $mock = $builder->setMethods(['__invoke'])->getMock();
  39. }
  40. assert($mock instanceof MockObject && is_callable($mock));
  41. return $mock;
  42. }
  43. }