// Copyright (c) 2011, 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 timer_test;

import 'dart:async';

import 'package:expect/legacy/async_minitest.dart'; // ignore: deprecated_member_use

const int STARTTIMEOUT = 1050;
const int DECREASE = 200;
const int ITERATIONS = 5;

Stopwatch stopwatch = new Stopwatch();
int timeout = STARTTIMEOUT;
int iteration = 0;

// 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() {
  expect(
    stopwatch.elapsedMilliseconds + safetyMargin,
    greaterThanOrEqualTo(timeout),
  );
  if (iteration < ITERATIONS) {
    iteration++;
    timeout = timeout - DECREASE;
    Duration duration = new Duration(milliseconds: timeout);
    stopwatch.reset();
    new Timer(duration, expectAsync(timeoutHandler));
  }
}

main() {
  test("timeout test", () {
    Duration duration = new Duration(milliseconds: timeout);
    stopwatch.start();
    new Timer(duration, expectAsync(timeoutHandler));
  });
}
