<sky>
<import src="/sky/tests//resources/chai.sky" />
<import src="/sky/tests/resources/mocha.sky" />
<import src="/sky/tests/resources/test-element.sky" as="TestElement" />

<div id="sandbox"></div>

<script>
describe("SkyElement templates", function() {
  var element;
  var sandbox = document.getElementById("sandbox");

  beforeEach(function() {
    element = new TestElement();
  });
  afterEach(function() {
    element.remove();
  });

  it("should stamp when the element is inserted", function() {
    assert.isNull(element.shadowRoot);
    sandbox.appendChild(element);
    assert.instanceOf(element.shadowRoot, ShadowRoot);
    assert.ok(element.shadowRoot.getElementById("inside"));
  });

  it("should connect data binding", function(done) {
    sandbox.appendChild(element);
    var inside = element.shadowRoot.getElementById("inside");
    Promise.resolve().then(function() {
      assert.equal(inside.textContent, 10);
      assert.equal(inside.attr, 10);
      element.value = 20;
    }).then(function() {
      assert.equal(inside.textContent, 20);
      assert.equal(inside.attr, 20);
      done();
    }).catch(function(e) {
      done(e);
    });
  });

  it("should connect event handlers", function() {
    sandbox.appendChild(element);
    var inside = element.shadowRoot.getElementById("inside");
    inside.dispatchEvent(new CustomEvent("wrong-event"));
    assert.isNull(element.lastEvent);
    var event = new CustomEvent("test-event");
    inside.dispatchEvent(event);
    assert.equal(element.lastEvent, event);
  });

  it("should call shadowRootReady after creating the template instance", function() {
    assert.equal(element.shadowRootReadyCount, 0);
    sandbox.appendChild(element);
    assert.equal(element.shadowRootReadyCount, 1);
    element.remove();
    sandbox.appendChild(element);
    assert.equal(element.shadowRootReadyCount, 1);
  });
});
</script>
</sky>