// 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 stopImmediatePropagation()
/// For this particular event, no other listener will be called.
/// Neither those attached on the same element, nor those attached on elements
/// which will be traversed later (in capture phase, for instance)
/// @description Checks that no other listener attached to the same element is
/// called.

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

main() {
  var type = 'click';
  ButtonElement x = new ButtonElement();
  document.body?.append(x);

  var n = 10;
  var numCalled = 0;

  asyncStart();

  EventListener genHandler() => (e) {
        Expect.equals(0, numCalled++);
        e.stopImmediatePropagation();
        asyncEnd();
      };

  for (var i = 0; i < n; ++i) x.addEventListener(type, genHandler());

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