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

library run_async_test;

import 'dart:async';
import 'package:async_helper/async_helper.dart';
import 'package:expect/expect.dart';

main() {
  // Check that Timers don't run before the async callbacks.
  bool timerCallbackExecuted = false;

  asyncStart();
  Timer.run(() {
    timerCallbackExecuted = true;
    asyncEnd();
  });

  scheduleMicrotask(() {
    Expect.isFalse(timerCallbackExecuted);
  });

  scheduleMicrotask(() {
    // Busy loop.
    var sum = 1;
    var sw = new Stopwatch()..start();
    while (sw.elapsedMilliseconds < 5) {
      sum++;
    }
    if (sum == 0) throw "bad"; // Just to use the result.
    scheduleMicrotask(() {
      Expect.isFalse(timerCallbackExecuted);
    });
  });

  scheduleMicrotask(() {
    Expect.isFalse(timerCallbackExecuted);
  });
}
