| Index: packages/quiver/lib/testing/src/async/fake_async.dart
|
| diff --git a/packages/quiver/lib/testing/src/async/fake_async.dart b/packages/quiver/lib/testing/src/async/fake_async.dart
|
| index eb14769718481cd38685405ce21f0468640ea5bb..376847c326dd1e13fbb54e2f88caa10eb406b7ac 100644
|
| --- a/packages/quiver/lib/testing/src/async/fake_async.dart
|
| +++ b/packages/quiver/lib/testing/src/async/fake_async.dart
|
| @@ -39,8 +39,6 @@ part of quiver.testing.async;
|
| abstract class FakeAsync {
|
| factory FakeAsync() = _FakeAsync;
|
|
|
| - FakeAsync._();
|
| -
|
| /// Returns a fake [Clock] whose time can is elapsed by calls to [elapse] and
|
| /// [elapseBlocking].
|
| ///
|
| @@ -89,8 +87,9 @@ abstract class FakeAsync {
|
| /// and [ZoneSpecification.scheduleMicrotask] to store callbacks for later
|
| /// execution within the zone via calls to [elapse].
|
| ///
|
| - /// [callback] is called with `this` as argument.
|
| - run(callback(FakeAsync self));
|
| + /// Calls [callback] with `this` as argument and returns the result returned
|
| + /// by [callback].
|
| + dynamic run(callback(FakeAsync self));
|
|
|
| /// Runs all remaining microtasks, including those scheduled as a result of
|
| /// running them, until there are no more microtasks scheduled.
|
| @@ -104,7 +103,8 @@ abstract class FakeAsync {
|
| /// [timeout] lets you set the maximum amount of time the flushing will take.
|
| /// Throws a [StateError] if the [timeout] is exceeded. The default timeout
|
| /// is 1 hour. [timeout] is relative to the elapsed time.
|
| - void flushTimers({Duration timeout: const Duration(hours: 1),
|
| + void flushTimers(
|
| + {Duration timeout: const Duration(hours: 1),
|
| bool flushPeriodicTimers: true});
|
|
|
| /// The number of created periodic timers that have not been canceled.
|
| @@ -117,16 +117,12 @@ abstract class FakeAsync {
|
| int get microtaskCount;
|
| }
|
|
|
| -class _FakeAsync extends FakeAsync {
|
| +class _FakeAsync implements FakeAsync {
|
| Duration _elapsed = Duration.ZERO;
|
| Duration _elapsingTo;
|
| Queue<Function> _microtasks = new Queue();
|
| Set<_FakeTimer> _timers = new Set<_FakeTimer>();
|
|
|
| - _FakeAsync() : super._() {
|
| - _elapsed;
|
| - }
|
| -
|
| @override
|
| Clock getClock(DateTime initialTime) =>
|
| new Clock(() => initialTime.add(_elapsed));
|
| @@ -162,7 +158,8 @@ class _FakeAsync extends FakeAsync {
|
| }
|
|
|
| @override
|
| - void flushTimers({Duration timeout: const Duration(hours: 1),
|
| + void flushTimers(
|
| + {Duration timeout: const Duration(hours: 1),
|
| bool flushPeriodicTimers: true}) {
|
| final absoluteTimeout = _elapsed + timeout;
|
| _drainTimersWhile((_FakeTimer timer) {
|
| @@ -186,6 +183,7 @@ class _FakeAsync extends FakeAsync {
|
| }
|
| return _zone.runGuarded(() => callback(this));
|
| }
|
| +
|
| Zone _zone;
|
|
|
| @override
|
| @@ -200,13 +198,14 @@ class _FakeAsync extends FakeAsync {
|
| int get microtaskCount => _microtasks.length;
|
|
|
| ZoneSpecification get _zoneSpec => new ZoneSpecification(
|
| - createTimer: (_, __, ___, Duration duration, Function callback) {
|
| - return _createTimer(duration, callback, false);
|
| - }, createPeriodicTimer: (_, __, ___, Duration duration, Function callback) {
|
| - return _createTimer(duration, callback, true);
|
| - }, scheduleMicrotask: (_, __, ___, Function microtask) {
|
| - _microtasks.add(microtask);
|
| - });
|
| + createTimer: (_, __, ___, Duration duration, Function callback) {
|
| + return _createTimer(duration, callback, false);
|
| + }, createPeriodicTimer:
|
| + (_, __, ___, Duration duration, Function callback) {
|
| + return _createTimer(duration, callback, true);
|
| + }, scheduleMicrotask: (_, __, ___, Function microtask) {
|
| + _microtasks.add(microtask);
|
| + });
|
|
|
| _drainTimersWhile(bool predicate(_FakeTimer)) {
|
| _drainMicrotasks();
|
| @@ -241,8 +240,8 @@ class _FakeAsync extends FakeAsync {
|
| timer._callback(timer);
|
| timer._nextCall += timer._duration;
|
| } else {
|
| - timer._callback();
|
| _timers.remove(timer);
|
| + timer._callback();
|
| }
|
| }
|
|
|
|
|