From b3fc8eb5109120081ecfbdbdcc515489a98bb882 Mon Sep 17 00:00:00 2001 From: loks0n <22452787+loks0n@users.noreply.github.com> Date: Sun, 25 Feb 2024 16:37:31 +0000 Subject: [PATCH] feat: custom eventually assertion --- tests/extensions/Async.php | 14 +++++++ tests/extensions/Async/Eventually.php | 54 +++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 tests/extensions/Async.php create mode 100644 tests/extensions/Async/Eventually.php diff --git a/tests/extensions/Async.php b/tests/extensions/Async.php new file mode 100644 index 0000000000..0fb9c8eea6 --- /dev/null +++ b/tests/extensions/Async.php @@ -0,0 +1,14 @@ +timeoutMs = $timeoutMs; + $this->waitMs = $waitMs; + } + + public function evaluate(mixed $probe, string $description = '', bool $returnResult = false): ?bool + { + if (!is_callable($probe)) { + throw new \Exception('Probe must be a callable'); + } + + $start = microtime(true); + $lastException = null; + + do { + try { + $probe(); + return true; + } catch (\Exception $exception) { + $lastException = $exception; + } + + usleep($this->waitMs * 1000); + } while (microtime(true) - $start < $this->timeoutMs / 1000); + + if ($returnResult) { + return false; + } + + throw $lastException; + } + + protected function failureDescription(mixed $other): string + { + return 'the given probe was satisfied within the provided timeout'; + } + + public function toString(): string + { + return 'Eventually'; + } +} \ No newline at end of file