<html>
<link rel="import" href="../resources/mocha.html" />
<link rel="import" href="../resources/chai.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"></span>
  </span>
  <div id="id5"></div>
  <tag-name-6 class="class6" id="id6">
    <tag-name-3 class="class7" id="tag2"></tag-name-3>
  </tag-name-6>
</div>
<script>
function query(selector) { return document.querySelector(selector); }
function queryAll(selector) { return document.querySelectorAll(selector); }

describe("querySelector", function() {
  it("should find elements by class name", function() {
    assert.ok(query(".class2"));
    assert.equal(query(".class2").classList.toString(), "class2");
    assert.equal(queryAll(".class2").length, 2);
    assert.equal(queryAll(".class2")[0].classList.toString(), "class2");
    assert.equal(queryAll(".class2")[1].classList.toString(), "class2");
    assert.notEqual(queryAll(".class2")[0], queryAll(".class2")[1]);
  });
  it("should find elements by id", function() {
    assert.ok(query("#id5"));
    assert.equal(query("#id5").id, "id5");
    assert.equal(query("#id5").classList.toString(), "class5");
    // FIXME(sky): Do we still want to allow multiple id stuff like this?
    assert.equal(queryAll("#id5").length, 2);
    assert.equal(queryAll("#id5")[0], query("#id5"));
    assert.notEqual(queryAll("#id5")[1], query("#id5"));
    assert.equal(queryAll("#id5")[1].id, "id5");
  });
  it("should find elements by tag name", function() {
    assert.ok(query("tag-name-6"));
    assert.equal(query("tag-name-6").tagName, "tag-name-6");
    assert.equal(query("tag-name-6").classList.toString(), "class6");
    var context = query("#tests");
    assert.equal(context.querySelectorAll("span").length, 2);
  });
  it("should find an element by compound selector", function() {
    assert.ok(query("tag-name-6.class6#id6"));
    assert.equal(query("tag-name-6.class6#id6").id, "id6");
    assert.equal(query("tag-name-6.class6#id6").classList.toString(), "class6");
    assert.equal(query("tag-name-6.class6#id6").tagName, "tag-name-6");
  });
  it("should find all elements by compound selector", function() {
    assert.ok(queryAll("tag-name-3.class7"));
    assert.equal(queryAll("tag-name-3.class7").length, 3);
    assert.equal(queryAll("tag-name-3.class7")[0].id, "tag1");
    assert.equal(queryAll("tag-name-3.class7")[1].id, "tag2");
  });
});
</script>
</html>
