// 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 matchesWithAncestors(String selectors)
 * Checks if this element or any of its parents match 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><pre
                                           id="myid"
                                           class="foo bar"
                                           lang="en">'''
      '<child></child>'
      '</pre>'
      '</span>'
      '</div>',
      treeSanitizer: new NullTreeSanitizer());

  var x = e.querySelector('child');
  if (x != null) {
    Expect.isTrue(x.matchesWithAncestors('*'), 'Universal selector');

    Expect.isTrue(x.matchesWithAncestors('pre'), 'Type selector');

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

    Expect.isTrue(
        x.matchesWithAncestors('span pre'), 'Descendant selector, direct');

    Expect.isTrue(
        x.matchesWithAncestors('div pre'), 'Descendant selector, indirect');

    Expect.isTrue(x.matchesWithAncestors('* pre'), 'Descendant selector, any');

    Expect.isTrue(x.matchesWithAncestors('span > pre'), 'Child selector');

    Expect.isFalse(
        x.matchesWithAncestors('div > pre'), 'Child selector, negative');

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

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

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

    Expect.isTrue(x.matchesWithAncestors('hr + pre'), 'Adjacent selector');

    Expect.isFalse(
        x.matchesWithAncestors('div + pre'), 'Adjacent selector, negative');

    Expect.isTrue(x.matchesWithAncestors('pre[id]'), 'Attribute selector 1');

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

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

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

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

    Expect.isFalse(x.matchesWithAncestors('pre[class~="baz"]'),
        'Attribute selector 3, negative');
  } else {
    Expect.fail("Element was not found");
  }
}
