. /** * Incrementing clock for testing purposes. * * @package core * @copyright 2024 Andrew Lyons * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @property-read int $time The current time of the clock */ class incrementing_clock implements \core\clock { /** @var int The next time of the clock */ public int $time; /** * Create a new instance of the incrementing clock. * * @param null|int $starttime The initial time to use. If not specified, the current time is used. */ public function __construct( ?int $starttime = null, ) { $this->time = $starttime ?? time(); } public function now(): \DateTimeImmutable { return new \DateTimeImmutable('@' . $this->time++); } public function time(): int { return $this->now()->getTimestamp(); } /** * Set the time of the clock. * * @param int $time */ public function set_to(int $time): void { $this->time = $time; } /** * Bump the time by a number of seconds. * * Note: The act of fetching the time will also bump the time by one second. * * @param int $seconds */ public function bump(int $seconds = 1): void { $this->time += $seconds; } }