<html>
<div id="tests">
  <div id="id1">
    <div class="class2"></div>
  </div>
  <tag-name-3 class="class7" id="tag1"></tag-name-3>
  <tag-name-3 class="class7" id="tag2"></tag-name-3>
  <span class="class2">
    <span class="class5" id="id5" testAttr></span>
  </span>
  <div id="id5"></div>
  <tag-name-6 class="class6" id="id6" testAttr="the value">
    <tag-name-3 class="class7" id="tag2"></tag-name-3>
  </tag-name-6>
</div>
<script>
import "../resources/third_party/unittest/unittest.dart";
import "../resources/unit.dart";

import "dart:sky";

query(selector) => document.querySelector(selector);
queryAll(selector) => document.querySelectorAll(selector);

main() {
  initUnit();

  test("should find elements by class name", () {
    expect(query(".class2"), isNotNull);
    expect(query(".class2").classList.toString(), equals("class2"));
    expect(queryAll(".class2").length, 2);
    expect(queryAll(".class2")[0].classList.toString(), equals("class2"));
    expect(queryAll(".class2")[1].classList.toString(), equals("class2"));
    expect(queryAll(".class2")[0], isNot(equals(queryAll(".class2")[1])));
  });

  test("should find elements by id", () {
    expect(query("#id5"), isNotNull);
    expect(query("#id5").getAttribute("id"), equals("id5"));
    expect(query("#id5").classList.toString(), equals("class5"));
    // FIXME(sky): Do we still want to allow multiple id stuff like this?
    expect(queryAll("#id5").length, equals(2));
    expect(queryAll("#id5")[0], equals(query("#id5")));
    expect(queryAll("#id5")[1], isNot(equals(query("#id5"))));
    expect(queryAll("#id5")[1].getAttribute("id"), equals("id5"));
  });

  test("should find elements by tag name", () {
    expect(query("tag-name-6"), isNotNull);
    expect(query("tag-name-6").tagName, equals("tag-name-6"));
    expect(query("tag-name-6").classList.toString(), equals("class6"));
    var context = query("#tests");
    expect(context.querySelectorAll("span").length, equals(2));
  });

  test("should find an element by compound selector", () {
    expect(query("tag-name-6.class6#id6"), isNotNull);
    expect(query("tag-name-6.class6#id6").getAttribute("id"), equals("id6"));
    expect(query("tag-name-6.class6#id6").classList.toString(), equals("class6"));
    expect(query("tag-name-6.class6#id6").tagName, equals("tag-name-6"));
  });

  test("should find all elements by compound selector", () {
    expect(queryAll("tag-name-3.class7"), isNotNull);
    expect(queryAll("tag-name-3.class7").length, equals(3));
    expect(queryAll("tag-name-3.class7")[0].getAttribute("id"), equals("tag1"));
    expect(queryAll("tag-name-3.class7")[1].getAttribute("id"), equals("tag2"));
  });

  test("should find all elements by attribute presence selector", () {
    expect(queryAll("[testAttr]"), isNotNull);
    expect(queryAll("[testAttr]").length, equals(2));
    expect(queryAll("[testAttr]")[0].getAttribute("id"), equals("id5"));
    expect(queryAll("[testAttr]")[1].getAttribute("id"), equals("id6"));
  });

  test("should find all elements by attribute value selector", () {
    expect(queryAll("[testAttr='the value']"), isNotNull);
    expect(queryAll("[testAttr='the value']").length, equals(1));
    expect(queryAll("[testAttr='the value']")[0].getAttribute("id"), equals("id6"));
  });
}
</script>
</html>
