// 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.

// @dart = 2.9

/// @assertion List<Node> getElementsByClassName(String name)
/// Returns a list of nodes with the given class name inside this element.
/// @description Checks that nodes with given class are collected. Checks that
/// only child nodes are searched, not this node itself.

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

main() {
  IFrameElement x = new IFrameElement();
  x.append(new Element.html('''<div class="foo">
           <table></table>
           <iframe class="foo"></iframe>
           <span class="bar">
             <pre class="foo"></pre>
           </span>
         </div>''', treeSanitizer: new NullTreeSanitizer()));

  var y = x.getElementsByClassName('foo');

  Expect.equals(3, y.length);

  Expect.isTrue(y[0] is DivElement, "DivElement");
  Expect.isTrue(y[1] is IFrameElement, "IFrameElement");
  Expect.isTrue(y[2] is PreElement, "PreElement");
}
