// 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 Element get matchingTarget
/// A pointer to the element whose CSS selector matched within which an event
/// was fired.
/// If this Event was not associated with any Event delegation, accessing this
/// value will throw an UnsupportedError.
/// @description Checks expected matchingTarget if there is an event delegation

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

main() {
  var body = document.body;
  if (body != null) {
    var id1 = new DivElement()
      ..id = 'id';
    var id2 = new DivElement()
      ..id = 'id';
    var class1 = new DivElement()
      ..classes.add('class');
    var class2 = new DivElement()
      ..classes.add('class');
    body.append(id1);
    body.append(id2);
    body.append(class1);
    body.append(class2);

    body.onClick.matches('#id').listen((e) {
      Expect.identical(id1, e.matchingTarget);
      asyncEnd();
    });

    body.onClick.matches('.class').listen((e) {
      Expect.identical(class1, e.matchingTarget);
      asyncEnd();
    });

    asyncMultiStart(2);
    id1.click();
    class1.click();
  } else {
    Expect.fail("Body is null");
  }
}
