// Copyright (c) 2014, 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.

/// @assertion void removeEventListener(String type, EventListener listener,
/// [bool useCapture])
/// Removes an event listener from the EventTarget.
/// @description Checks that that correct listener is removed with useCapture

import "dart:html";
import "../../../Utils/expect.dart";

void check(Node x) {
  var type = 'click';

  EventListener handler1 = (e) {
    Expect.equals(type, e.type);
    asyncEnd();
  };

  var seen = false;
  EventListener? handler2;
  handler2 = (e) {
    if (seen) Expect.fail('should be run once');
    Expect.equals(type, e.type);
    x.removeEventListener(type, handler2, true); // remove itself when triggered
    seen = true;
    asyncEnd();
  };

  x.addEventListener(type, handler1, true);
  x.addEventListener(type, handler2, true);

  var event = new Event(type);
  x.dispatchEvent(event);
  event = new Event(type);
  x.dispatchEvent(event);
}

main() {
  List<Node> targets = [
    new Text("Text1"),
    new Comment("Comment"),
    new DocumentFragment(),
  ];
  asyncMultiStart(
      targets.length * 3); // first time two handlers, second time one handler
  for (Node x in targets) {
    check(x);
  }
}
