<!DOCTYPE html>
<sky>
<import src="../resources/mocha.sky" />
<import src="../resources/chai.sky" />
<style>
  div { font-size: 5px; }
  .font-10 { font-size: 10px; }
  .font-12 { font-size: 12px; }
  .font-24 { font-size: 24px; }
</style>
<div id="sandbox"></div>
<script>
describe("Class list", function() {
  var sandbox = document.getElementById("sandbox");
  var target;

  beforeEach(function() {
    target = document.createElement("div");
    sandbox.appendChild(target);
  });

  afterEach(function() {
    target.remove();
  });

  it("should add multiple classes", function() {
    target.classList.add("first", "second", "third");
    assert.equal(target.classList.toString(), "first second third");
  });

  it("should add classes in order", function() {
    target.classList.add("first");
    target.classList.add("second");
    assert.equal(target.classList.toString(), "first second");
  });

  it("should remove classes", function() {
    target.classList.add("first");
    target.classList.add("second");
    target.classList.add("third");
    target.classList.remove("second");
    assert.equal(target.classList.toString(), "first third");
  });

  it("should remove multiple classes", function() {
    target.classList.add("first", "second", "third");
    target.classList.remove("first", "third");
    assert.equal(target.classList.toString(), "second");
  });

  it("should clear all classes", function() {
    target.classList.add("first");
    target.classList.add("second");
    target.classList.clear();
    assert.equal(target.classList.toString(), "");
    assert.isFalse(target.hasAttribute("class"));
  });

  it("should check for classes", function() {
    target.classList.add("first", "second", "third");
    assert.isTrue(target.classList.contains("first"));
    assert.isTrue(target.classList.contains("second"));
    assert.isTrue(target.classList.contains("third"));
    target.classList.remove("second");
    assert.isTrue(target.classList.contains("first"));
    assert.isFalse(target.classList.contains("second"));
    assert.isTrue(target.classList.contains("third"));
  });

  it("should get classes by index", function() {
    target.classList.add("first", "second", "third");
    assert.equal(target.classList[0], "first");
    assert.equal(target.classList[1], "second");
    assert.equal(target.classList[2], "third");
    assert.equal(target.classList.item(0), "first");
    assert.equal(target.classList.item(1), "second");
    assert.equal(target.classList.item(2), "third");
  });

  it("should toggle classes", function() {
    target.classList.add("first", "second");
    assert.isFalse(target.classList.toggle("first"));
    assert.equal(target.classList.toString(), "second");
    assert.isTrue(target.classList.toggle("first"));
    assert.equal(target.classList.toString(), "second first");
    assert.isTrue(target.classList.toggle("second", true));
    assert.equal(target.classList.toString(), "second first");
    assert.isTrue(target.classList.toggle("second", true));
    assert.isFalse(target.classList.toggle("second", false));
    assert.isFalse(target.classList.toggle("second", false));
    assert.equal(target.classList.toString(), "first");
  });

  it("should dynamically update style", function() {
    assert.equal(getComputedStyle(target).fontSize, "5px");
    target.classList.add("font-10");
    target.classList.add("font-12");
    assert.equal(getComputedStyle(target).fontSize, "12px");
    target.classList.add("font-24");
    assert.equal(getComputedStyle(target).fontSize, "24px");
    target.classList.remove("font-12");
    assert.equal(getComputedStyle(target).fontSize, "24px");
    target.classList.remove("font-24");
    assert.equal(getComputedStyle(target).fontSize, "10px");
    target.classList.remove("font-10");
    assert.equal(getComputedStyle(target).fontSize, "5px");
  });
});
</script>
</sky>
