// 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 '../../pkg/unittest/lib/unittest.dart';

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

int startTime;
int timeout;
int iteration;

void timeoutHandler() {
  int endTime = (new DateTime.now()).millisecondsSinceEpoch;
  expect(endTime - startTime, greaterThanOrEqualTo(timeout));
  if (iteration < ITERATIONS) {
    iteration++;
    timeout = timeout - DECREASE;
    Duration duration = new Duration(milliseconds: timeout);
    startTime = (new DateTime.now()).millisecondsSinceEpoch;
    new Timer(duration, expectAsync0(timeoutHandler));
  }
}

main() {
  test("timeout test", () {
    iteration = 0;
    timeout = STARTTIMEOUT;
    Duration duration = new Duration(milliseconds: timeout);
    startTime = (new DateTime.now()).millisecondsSinceEpoch;
    new Timer(duration, expectAsync0(timeoutHandler));
  });
}
