// 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 bool matches(String selectors)
/// Checks if this element matches the CSS selectors.
/// @description Checks various selectors

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

main() {
  var e = new Element.html(
      '<div>'
      '<span>'
      '''<hr><iframe
                                           id="myid"
                                           class="foo bar"
                                           lang="en">'''
      '</iframe>'
      '</span>'
      '</div>',
      treeSanitizer: new NullTreeSanitizer());

  var x = e.querySelector('iframe');

  Expect.isTrue(x.matches('*'), 'Universal selector');

  Expect.isTrue(x.matches('iframe'), 'Type selector');

  Expect.isFalse(x.matches('table'), 'Type selector, negative');

  Expect.isTrue(x.matches('span iframe'), 'Descendant selector, direct');

  Expect.isTrue(x.matches('div iframe'), 'Descendant selector, indirect');

  Expect.isTrue(x.matches('* iframe'), 'Descendant selector, any');

  Expect.isTrue(x.matches('span > iframe'), 'Child selector');

  Expect.isFalse(x.matches('div > iframe'), 'Child selector, negative');

  Expect.isFalse(
      x.matches('iframe:first-child'), 'The :first-child pseudo-class');

  Expect.isTrue(x.matches('iframe:lang(en)'), 'The :lang() pseudo-class');

  Expect.isFalse(x.matches('iframe:lang(fr)'), 'The :lang() pseudo-class');

  Expect.isTrue(x.matches('hr + iframe'), 'Adjacent selector');

  Expect.isFalse(x.matches('div + iframe'), 'Adjacent selector, negative');

  Expect.isTrue(x.matches('iframe[id]'), 'Attribute selector 1');

  Expect.isFalse(x.matches('iframe[foo]'), 'Attribute selector 1, negative');

  Expect.isTrue(x.matches('iframe[id="myid"]'), 'Attribute selector 2');

  Expect.isFalse(
      x.matches('iframe[id="myid2"]'), 'Attribute selector 2, negative');

  Expect.isTrue(x.matches('iframe[class~="bar"]'), 'Attribute selector 3');

  Expect.isFalse(
      x.matches('iframe[class~="baz"]'), 'Attribute selector 3, negative');

  Expect.isTrue(x.matches('iframe[lang|="en"]'), 'Attribute selector 4');

  Expect.isFalse(
      x.matches('iframe[lang|="fr"]'), 'Attribute selector 4, negative');

  Expect.isTrue(x.matches('iframe.foo'), 'Class selector');

  Expect.isFalse(x.matches('iframe.baz'), 'Class selector, negative');

  Expect.isTrue(x.matches('iframe#myid'), 'Id selector');

  Expect.isFalse(x.matches('iframe#baz'), 'Id selector, negative');
}
