MDL-80838 core: Add PSR-20/Clock support
This commit adds the PSR-20 ClockInterface to core, with a moodle-specific extension to the Interface at `\core\clock`, and a standard clock at `\core\system_clock`. Further clocks are provided as `\incrementing_clock` and `\frozen_clock` which are available to unit tests using: - `$this->mock_clock_with_incrementing(?int $starttime = null);` - `$this->mock_clock_with_frozen(?int $time = null);` For the incrementing clock, every call to fetch the time will bump the current time by one second. For the frozen clock the time will not change, but can be modified with: - `$clock->set_to(int $time);`; and - `$clock->bump(int $seconds = 1);`
This commit is contained in:
@@ -729,4 +729,38 @@ abstract class advanced_testcase extends base_testcase {
|
||||
\core\task\manager::adhoc_task_complete($task);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Mock the clock with an incrementing clock.
|
||||
*
|
||||
* @param null|int $starttime
|
||||
* @return \incrementing_clock
|
||||
*/
|
||||
public function mock_clock_with_incrementing(
|
||||
?int $starttime = null,
|
||||
): \incrementing_clock {
|
||||
require_once(dirname(__DIR__, 2) . '/testing/classes/incrementing_clock.php');
|
||||
$clock = new \incrementing_clock($starttime);
|
||||
|
||||
\core\di::set(\core\clock::class, $clock);
|
||||
|
||||
return $clock;
|
||||
}
|
||||
|
||||
/**
|
||||
* Mock the clock with a frozen clock.
|
||||
*
|
||||
* @param null|int $time
|
||||
* @return \frozen_clock
|
||||
*/
|
||||
public function mock_clock_with_frozen(
|
||||
?int $time = null,
|
||||
): \frozen_clock {
|
||||
require_once(dirname(__DIR__, 2) . '/testing/classes/frozen_clock.php');
|
||||
$clock = new \frozen_clock($time);
|
||||
|
||||
\core\di::set(\core\clock::class, $clock);
|
||||
|
||||
return $clock;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user