| [](https://github.com/dart-lang/tools/actions/workflows/clock.yaml) | |
| [](https://pub.dev/packages/clock) | |
| [](https://pub.dev/packages/clock/publisher) | |
| This package provides a [`Clock`][] class which encapsulates the notion of the | |
| "current time" and provides easy access to points relative to the current time. | |
| Different `Clock`s can have a different notion of the current time, and the | |
| default top-level [`clock`][]'s notion can be swapped out to reliably test | |
| timing-dependent code. | |
| [`Clock`]: https://pub.dev/documentation/clock/latest/clock/Clock-class.html | |
| [`clock`]: https://pub.dev/documentation/clock/latest/clock/clock.html | |
| For example, you can use `clock` in your libraries like this: | |
| ```dart | |
| // run_with_timing.dart | |
| import 'package:clock/clock.dart'; | |
| /// Runs [callback] and prints how long it took. | |
| T runWithTiming<T>(T Function() callback) { | |
| var stopwatch = clock.stopwatch()..start(); | |
| var result = callback(); | |
| print('It took ${stopwatch.elapsed}!'); | |
| return result; | |
| } | |
| ``` | |
| ...and then test your code using the [`fake_async`][] package, which | |
| automatically overrides the current clock: | |
| [`fake_async`]: https://pub.dartlang.org/packages/fake_async | |
| ```dart | |
| // run_with_timing_test.dart | |
| import 'run_with_timing.dart'; | |
| import 'package:fake_async/fake_async.dart'; | |
| import 'package:test/test.dart'; | |
| void main() { | |
| test('runWithTiming() prints the elapsed time', () { | |
| FakeAsync().run((async) { | |
| expect(() { | |
| runWithTiming(() { | |
| async.elapse(Duration(seconds: 10)); | |
| }); | |
| }, prints('It took 0:00:10.000000!')); | |
| }); | |
| }); | |
| } | |
| ``` |