| // Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| // ignore_for_file: comment_references | |
| /// Interface describing clocks used by the [MemoryFileSystem]. | |
| /// | |
| /// The [MemoryFileSystem] uses a clock to determine the modification times of | |
| /// files that are created in that file system. | |
| abstract class Clock { | |
| /// Abstract const constructor. This constructor enables subclasses to provide | |
| /// const constructors so that they can be used in const expressions. | |
| const Clock(); | |
| /// A real-time clock. | |
| /// | |
| /// Uses [DateTime.now] to reflect the actual time reported by the operating | |
| /// system. | |
| const factory Clock.realTime() = _RealtimeClock; | |
| /// A monotonically-increasing test clock. | |
| /// | |
| /// Each time [now] is called, the time increases by one minute. | |
| /// | |
| /// The `start` argument can be used to set the seed time for the clock. | |
| /// The first value will be that time plus one minute. | |
| /// By default, `start` is midnight on the first of January, 2000. | |
| factory Clock.monotonicTest() = _MonotonicTestClock; | |
| /// Returns the value of the clock. | |
| DateTime get now; | |
| } | |
| class _RealtimeClock extends Clock { | |
| const _RealtimeClock(); | |
| @override | |
| DateTime get now => DateTime.now(); | |
| } | |
| class _MonotonicTestClock extends Clock { | |
| _MonotonicTestClock({ | |
| DateTime? start, | |
| }) : _current = start ?? DateTime(2000); | |
| DateTime _current; | |
| @override | |
| DateTime get now { | |
| _current = _current.add(const Duration(minutes: 1)); | |
| return _current; | |
| } | |
| } |