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

// @dart = 2.9

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;

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

  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);
  });
}
