blob: 8e12f4e4a5e689dea7d2304d497de5fccd3aae95 [file] [log] [blame]
// Copyright (c) 2013, 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.
import 'package:async_helper/async_helper.dart';
import "package:expect/expect.dart";
import 'dart:async';
Future testOneScheduleMicrotask() {
var completer = new Completer();
Timer.run(() {
scheduleMicrotask(completer.complete);
});
return completer.future;
}
Future testMultipleScheduleMicrotask() {
var completer = new Completer();
Timer.run(() {
const TOTAL = 10;
int done = 0;
for (int i = 0; i < TOTAL; i++) {
scheduleMicrotask(() {
done++;
if (done == TOTAL) completer.complete();
;
});
}
});
return completer.future;
}
Future testScheduleMicrotaskThenTimer() {
var completer = new Completer();
Timer.run(() {
bool scheduleMicrotaskDone = false;
scheduleMicrotask(() {
Expect.isFalse(scheduleMicrotaskDone);
scheduleMicrotaskDone = true;
});
Timer.run(() {
Expect.isTrue(scheduleMicrotaskDone);
completer.complete();
});
});
return completer.future;
}
Future testTimerThenScheduleMicrotask() {
var completer = new Completer();
Timer.run(() {
bool scheduleMicrotaskDone = false;
Timer.run(() {
Expect.isTrue(scheduleMicrotaskDone);
completer.complete();
});
scheduleMicrotask(() {
Expect.isFalse(scheduleMicrotaskDone);
scheduleMicrotaskDone = true;
});
});
return completer.future;
}
Future testTimerThenScheduleMicrotaskChain() {
var completer = new Completer();
Timer.run(() {
const TOTAL = 10;
int scheduleMicrotaskDone = 0;
Timer.run(() {
Expect.equals(TOTAL, scheduleMicrotaskDone);
completer.complete();
});
Future scheduleMicrotaskCallback() {
scheduleMicrotaskDone++;
if (scheduleMicrotaskDone != TOTAL) {
scheduleMicrotask(scheduleMicrotaskCallback);
}
}
scheduleMicrotask(scheduleMicrotaskCallback);
});
return completer.future;
}
main() {
asyncStart();
testOneScheduleMicrotask()
.then((_) => testMultipleScheduleMicrotask())
.then((_) => testScheduleMicrotaskThenTimer())
.then((_) => testTimerThenScheduleMicrotask())
.then((_) => testTimerThenScheduleMicrotaskChain())
.then((_) => asyncEnd());
}