// 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 HtmlCollection getElementsByTagName(String localName)
/// Returns a list of elements with the given tag name.
/// @description Checks that a list of elements with the given tag name is returned.
/// @needsreview dart issue #18240 Document.getElementsByTagName returns NodeList, not HtmlCollection

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

const myTag = "div";

main() {
  List<Node> lst = document.getElementsByTagName(myTag);
  int l0 = lst.length;

  var x1 = new Element.tag(myTag);
  var y = new Element.tag(myTag);
  y.append(x1);
  document.body?.append(y);
  lst = document.getElementsByTagName(myTag);
  Expect.equals(l0 + 2, lst.length);

  var x2 = new Element.tag(myTag);
  document.body?.append(x2);
  lst = document.getElementsByTagName(myTag);
  Expect.equals(l0 + 3, lst.length);
  // order is not guarateed, so cannot compare lists directly
  Expect.isTrue(lst.contains(x1));
  Expect.isTrue(lst.contains(y));
  Expect.isTrue(lst.contains(x2));
// print("lst is ${lst.runtimeType}; ${lst is HtmlCollection}; ${lst is NodeList}; ${lst is List};");
  Expect.isTrue(lst is HtmlCollection, "is HtmlCollection");
}
