Get the code running
4 files changed
tree: 88397c76bf9044eb67d90ded4b274ea1b8274539
  1. lib/
  2. test/
  3. .gitignore
  4. .travis.yml
  5. analysis_options.yaml
  6. AUTHORS
  7. CHANGELOG.md
  8. CONTRIBUTING.md
  9. LICENSE
  10. pubspec.yaml
  11. README.md
README.md

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 Clocks 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.

For example, you can use clock in your libraries like this:

// run_with_timing.dart
import 'package:clock/clock.dart';

/// Runs [callback] and prints how long it took.
T runWithTiming<T>(T callback()) {
  var stopwatch = clock.getStopwatch()..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:

// 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", () {
    new FakeAsync().run((async) {
      expect(() {
        runWithTiming(() {
          async.elapse(new Duration(seconds: 10));
        });
      }, prints("It took 0:00:10.000000!"));
    });
  });
}