// Copyright (c) 2012, 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 multiple_timer_test;

import 'dart:isolate';
import 'dart:async';
import 'package:async_helper/async_minitest.dart';

const Duration TIMEOUT = const Duration(milliseconds: 100);

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

createTimer(replyTo) {
  new Timer(TIMEOUT, () {
    replyTo.send("timer_fired");
  });
}

main() {
  test("timer in isolate", () {
    Stopwatch stopwatch = new Stopwatch();
    ReceivePort port = new ReceivePort();

    port.first.then(expectAsync((msg) {
      expect("timer_fired", msg);
      expect(stopwatch.elapsedMilliseconds + safetyMargin,
          greaterThanOrEqualTo(TIMEOUT.inMilliseconds));
    }));

    stopwatch.start();
    var remote = Isolate.spawn(createTimer, port.sendPort);
  });
}
