| Index: tests/lib/async/timer_repeat_test.dart
|
| diff --git a/tests/lib/async/timer_repeat_test.dart b/tests/lib/async/timer_repeat_test.dart
|
| index e963c5aef01f09c320b935844bfae9689cb7aa50..1ed5139652f8213462268cead79ba64f9306cc95 100644
|
| --- a/tests/lib/async/timer_repeat_test.dart
|
| +++ b/tests/lib/async/timer_repeat_test.dart
|
| @@ -11,16 +11,24 @@ const Duration TIMEOUT = const Duration(milliseconds: 500);
|
| const int ITERATIONS = 5;
|
|
|
| Timer timer;
|
| -int startTime;
|
| +Stopwatch stopwatch = new Stopwatch();
|
| int iteration;
|
|
|
| +// Some browsers (Firefox and IE so far) can trigger too early. Add a safety
|
| +// margin. We use identical(1, 1.0) as an easy way to know if the test is
|
| +// compiled by dart2js.
|
| +int get safetyMargin => identical(1, 1.0) ? 100 : 0;
|
| +
|
| void timeoutHandler(Timer timer) {
|
| - int endTime = (new DateTime.now()).millisecondsSinceEpoch;
|
| iteration++;
|
| - if (iteration < ITERATIONS) {
|
| - startTime = (new DateTime.now()).millisecondsSinceEpoch;
|
| - } else {
|
| - expect(iteration, ITERATIONS);
|
| + expect(iteration, lessThanOrEqualTo(ITERATIONS));
|
| + if (iteration == ITERATIONS) {
|
| + // When we are done with all of the iterations, we expect a
|
| + // certain amount of time to have passed. Checking the time on
|
| + // each iteration doesn't work because the timeoutHandler runs
|
| + // concurrently with the periodic timer.
|
| + expect(stopwatch.elapsedMilliseconds + safetyMargin,
|
| + greaterThanOrEqualTo(ITERATIONS * TIMEOUT.inMilliseconds));
|
| timer.cancel();
|
| }
|
| }
|
| @@ -28,7 +36,7 @@ void timeoutHandler(Timer timer) {
|
| main() {
|
| test("timer_repeat", () {
|
| iteration = 0;
|
| - startTime = new DateTime.now().millisecondsSinceEpoch;
|
| + stopwatch.start();
|
| timer = new Timer.periodic(TIMEOUT,
|
| expectAsync(timeoutHandler, count: ITERATIONS));
|
| });
|
|
|