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

library timer_cancel_test;

import 'dart:isolate';
import '../../pkg/unittest/lib/unittest.dart';

main() {
  test("simple timer", () {
    Timer cancelTimer;
    int repeatTimer;

    void unreachable(Timer timer) {
      fail("should not be reached");
    }

    void handler(Timer timer) {
      cancelTimer.cancel();
    }

    void repeatHandler(Timer timer) {
      repeatTimer++;
      timer.cancel();
      expect(repeatTimer, 1);
    }

    cancelTimer = new Timer(1000, expectAsync1(unreachable, count: 0));
    cancelTimer.cancel();
    new Timer(1000, expectAsync1(handler));
    cancelTimer = new Timer(2000, expectAsync1(unreachable, count: 0));
    repeatTimer = 0;
    new Timer.repeating(1500, expectAsync1(repeatHandler));
  });
  
  test("cancel timer with same time", () {
    var t2;
    var t1 = new Timer(0, expectAsync1((t) => t2.cancel()));
    t2 = new Timer(0, expectAsync1((t) => t1.cancel(), count: 0));
  });
}
