/*
 * 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.
 */
/**
 * @assertionElement querySelector(String selectors)
 * Finds the first descendant element of this document that matches the specified
 * group of selectors.
 * selectors should be a string using CSS selector syntax.
 * @description Checks various selectors (not exhaustive)
 */
import "dart:html";
import "../../../Utils/expect.dart";
import "../testcommon.dart";

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

  document.body?.append(e);

  Expect.isTrue(
      document.querySelector('*') is HtmlElement, 'Universal selector');

  Expect.isTrue(document.querySelector('pre') is PreElement, 'Type selector');

  Expect.isNull(document.querySelector('table'), 'Type selector, negative');

  Expect.isTrue(document.querySelector('span pre') is PreElement,
      'Descendant selector, direct');

  Expect.isTrue(document.querySelector('div pre') is PreElement,
      'Descendant selector, indirect');

  Expect.isTrue(document.querySelector('* pre') is PreElement,
      'Descendant selector, any');

  Expect.isTrue(
      document.querySelector('span > pre') is PreElement, 'Child selector');

  Expect.isNull(
      document.querySelector('div > pre'), 'Child selector, negative');

  Expect.isNull(document.querySelector('pre:first-child'),
      'The :first-child pseudo-class');

  Expect.isTrue(document.querySelector('pre:lang(en)') is PreElement,
      'The :lang() pseudo-class');

  Expect.isNull(
      document.querySelector('pre:lang(fr)'), 'The :lang() pseudo-class');

  Expect.isTrue(
      document.querySelector('hr + pre') is PreElement, 'Adjacent selector');

  Expect.isNull(
      document.querySelector('div + pre'), 'Adjacent selector, negative');

  Expect.isTrue(
      document.querySelector('pre[id]') is PreElement, 'Attribute selector 1');

  Expect.isNull(
      document.querySelector('pre[foo]'), 'Attribute selector 1, negative');

  Expect.isTrue(document.querySelector('pre[id="myid"]') is PreElement,
      'Attribute selector 2');

  Expect.isNull(document.querySelector('pre[id="myid2"]'),
      'Attribute selector 2, negative');

  Expect.isTrue(document.querySelector('pre[class~="bar"]') is PreElement,
      'Attribute selector 3');

  Expect.isNull(document.querySelector('pre[class~="baz"]'),
      'Attribute selector 3, negative');

  Expect.isTrue(document.querySelector('pre[lang|="en"]') is PreElement,
      'Attribute selector 4');

  Expect.isNull(document.querySelector('pre[lang|="fr"]'),
      'Attribute selector 4, negative');

  Expect.isTrue(
      document.querySelector('pre.foo') is PreElement, 'Class selector');

  Expect.isNull(document.querySelector('pre.baz'), 'Class selector, negative');

  Expect.isTrue(
      document.querySelector('pre#myid') is PreElement, 'Id selector');

  Expect.isNull(document.querySelector('pre#baz'), 'Id selector, negative');
}
