// 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 addEventListener(String type, EventListener listener,
/// [bool useCapture])
/// Register an event handler of a specific event type on the EventTarget.
/// @description Checks that useCapture can be used to intercept events on
/// capturing stage.

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

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

  asyncMultiStart(2);

  // intercept on capture
  document.body?.addEventListener(type, (e) {
    Expect.equals(type, e.type);
    Expect.equals(Event.CAPTURING_PHASE, e.eventPhase);
    asyncEnd();
  }, true);

  // intercept on target
  x.onFocus.listen((e) {
    Expect.equals(type, e.type);
    Expect.equals(Event.AT_TARGET, e.eventPhase);
    asyncEnd();
  });

  // click on button
  var event = new Event(type, canBubble: false);
  x.dispatchEvent(event);
}
