// 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.
/// W3C: The classes argument is interpreted as a space-separated list of classes.
/// @description Checks that if name is a space separated list of class names,
/// nodes having all specified classes are collected.

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

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

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

  Expect.equals(3, y.length);
}
