blob: 685fde277d0a55502a4f57c40323c7a840d17396 [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'context.dart';
/// The current system clock instance.
SystemClock get systemClock => context.get<SystemClock>();
/// A class for making time based operations testable.
class SystemClock {
/// A const constructor to allow subclasses to be const.
const SystemClock();
/// Create a clock with a fixed current time.
const factory SystemClock.fixed(DateTime time) = _FixedTimeClock;
/// Retrieve the current time.
DateTime now() => DateTime.now();
/// Compute the time a given duration ago.
DateTime ago(Duration duration) {
return now().subtract(duration);
}
}
class _FixedTimeClock extends SystemClock {
const _FixedTimeClock(this._fixedTime);
final DateTime _fixedTime;
@override
DateTime now() => _fixedTime;
}