/*
 * 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 List<Node> getElementsByName(String elementName)
 * Returns a list of elements with the given name.
 * @description Checks that a list of elements with the given name is returned.
 */
import "dart:html";
import "../../../Utils/expect.dart";

const myButton = "myButton";

main() {
  List<Node> lst = document.getElementsByName(myButton);
  Expect.equals(0, lst.length);

  var x1 = new Element.html('<button name="$myButton"></button>');
  var y = new DivElement();
  y.append(x1);
  document.body?.append(y);
  lst = document.getElementsByName(myButton);
  Expect.equals(1, lst.length);
  Expect.equals(x1, lst[0]);

  var x2 = new Element.html('<form name="$myButton"></form>');
  document.body?.append(x2);
  lst = document.getElementsByName(myButton);
  Expect.equals(2, lst.length);
  // order is not guarateed, so cannot compare lists directly
  Expect.isTrue(lst.contains(x1));
  Expect.isTrue(lst.contains(x2));
}
