withManualClock<T> function
Run callback with overriding the top level clock field with a manual clock.
This function is useful for testing clock.now() and Timer related code.
Implementation
T withManualClock<T>(
T Function(ManualClock clock) callback, {
DateTime? initialTime,
}) {
final clock = ManualClock(initialTime: initialTime);
return withClock(
clock,
() => runZoned(
() => callback(clock),
zoneSpecification: ZoneSpecification(
createTimer: (_, __, ___, duration, callback) {
final timer = ManualTimer(duration, (timer) => callback());
clock.addTimer(timer);
return timer;
},
createPeriodicTimer: (_, __, ___, period, callback) {
final timer = ManualTimer.periodic(period, callback);
clock.addTimer(timer);
return timer;
},
),
),
);
}