/*
 * 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 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');
}
