<!DOCTYPE html>
<html>
<import src="../resources/chai.sky" />
<import src="../resources/mocha.sky" />
<script>
describe('MutationObserver.observe on a subtree', function() {
  it('should handle basic aspects of subtree observation', function(done) {
    var observer;
    var subDiv;
    var mutations;

    function start() {
      var div = document.createElement('div');
      subDiv = div.appendChild(document.createElement('div'));
      subDiv.textContent = 'hello, world';
      observer = new MutationObserver(function(records) {
        mutations = records;
      });

      observer.observe(div, {attributes: true, characterData: true, subtree: true});
      subDiv.setAttribute('foo', 'bar');
      subDiv.firstChild.textContent = 'goodbye!';
      setTimeout(finish, 0);
    }

    function finish() {
      // ...attribute and characterData changes in subtree
      assert.equal(mutations.length, 2);
      assert.equal(mutations[0].type, "attributes");
      assert.equal(mutations[0].target, subDiv);
      assert.equal(mutations[0].attributeName, "foo");
      assert.equal(mutations[1].type, "characterData");
      assert.equal(mutations[1].target, subDiv.firstChild);
      observer.disconnect();
      done();
    }

    start();
  });

  it('should handle two observers at different depths', function(done) {
    var observer;
    var observer2;
    var mutations;
    var mutations2;
    var subDiv;

    function start() {
      var div = document.createElement('div');
      subDiv = div.appendChild(document.createElement('div'));
      observer = new MutationObserver(function(records) {
        mutations = records;
      });
      observer2 = new MutationObserver(function(records) {
        mutations2 = records;
      });

      observer.observe(div, {attributes: true, subtree: true});
      observer2.observe(subDiv, {attributes: true});
      subDiv.setAttribute('foo', 'bar');
      setTimeout(finish, 0);
    }

    function finish() {
      assert.equal(mutations.length, 1);
      assert.equal(mutations[0].type, "attributes");
      assert.equal(mutations[0].target, subDiv);
      assert.equal(mutations[0].attributeName, "foo");
      assert.equal(mutations2.length, 1);
      assert.equal(mutations2[0].type, "attributes");
      assert.equal(mutations2[0].target, subDiv);
      assert.equal(mutations2[0].attributeName, "foo");
      observer.disconnect();
      observer2.disconnect();
      done();
    }

    start();
  });

  it('should handle one observer at two different depths', function(done) {
    var observer;
    var mutations;
    var calls = 0;
    var subDiv;

    function start() {
      var div = document.createElement('div');
      subDiv = div.appendChild(document.createElement('div'));
      observer = new MutationObserver(function(records) {
        mutations = records;
        ++calls;
      });

      observer.observe(div, {attributes: true, subtree: true});
      observer.observe(subDiv, {attributes: true, subtree: true});
      subDiv.setAttribute('foo', 'bar');
      setTimeout(finish, 0);
    }

    function finish() {
      assert.equal(calls, 1);
      assert.equal(mutations.length, 1);
      assert.equal(mutations[0].type, "attributes");
      assert.equal(mutations[0].target, subDiv);
      assert.equal(mutations[0].attributeName, "foo");
      observer.disconnect();
      done();
    }

    start();
  });

  // FIXME(sky): This test is huge, it should be broken up.
  it('should handle transiently detached nodes are still observed via subtree', function(done) {
    var observer;
    var mutations;
    var div;
    var subDiv;

    function start() {
      div = document.createElement('div');
      subDiv = div.appendChild(document.createElement('div'));
      subDiv.textContent = 'hello, world';
      observer = new MutationObserver(function(records) {
        mutations = records;
      });

      observer.observe(div, {attributes: true, characterData: true, subtree: true});
      subDiv.setAttribute('foo', 'bar');
      div.removeChild(subDiv);
      subDiv.setAttribute('test', 'test');
      setTimeout(checkDeliveredAndChangeAgain, 0);
    }

    function checkDeliveredAndChangeAgain() {
      // ...both changes should be received. Change detached subDiv again.

      assert.equal(mutations.length, 2);
      assert.equal(mutations[0].type, "attributes");
      assert.equal(mutations[0].target, subDiv);
      assert.equal(mutations[0].attributeName, "foo");
      assert.equal(mutations[1].type, "attributes");
      assert.equal(mutations[1].target, subDiv);
      assert.equal(mutations[1].attributeName, "test");

      mutations = null;
      subDiv.setAttribute('foo', 'baz');

      setTimeout(checkNotDeliveredAndReattach, 0);
    }

    function checkNotDeliveredAndReattach() {
      // ...transient subtree observation was stopped after delivery, so subDiv change should not be received. Reattach and change again.

      assert.equal(mutations, null);

      mutations = null
      div.appendChild(subDiv);
      subDiv.setAttribute('foo', 'bat');

      setTimeout(checkDeliveredAndReobserve, 0);
    }

    function checkDeliveredAndReobserve() {
      //...reattached subtree should now be observable. Try detaching and re-observing.

      assert.equal(mutations.length, 1);
      assert.equal(mutations[0].type, "attributes");
      assert.equal(mutations[0].target, subDiv);
      assert.equal(mutations[0].attributeName, "foo");

      mutations = null;
      div.removeChild(subDiv);
      subDiv.firstChild.textContent = 'badbye';
      observer.observe(div, {attributes: true, characterData: true, subtree: true});
      subDiv.setAttribute('foo', 'boo');

      setTimeout(finish, 0);
    }

    function finish() {
      // ...The change made before re-observing should be received, but not the one after.

      assert.equal(mutations.length, 1);
      assert.equal(mutations[0].type, "characterData");
      assert.equal(mutations[0].target, subDiv.firstChild);

      observer.disconnect();
      done();
    }

    start();
  });

  it('should have correct behavior of transient observation with complex movement', function(done) {
    var observer;
    var text;
    var subDiv;
    var mutations;
    var subDiv2;
    var subDiv3;

    function start() {
      var div = document.createElement('div');
      subDiv = div.appendChild(document.createElement('div'));
      subDiv2 = subDiv.appendChild(document.createElement('div'));
      subDiv2.textContent = 'hello, world';
      subDiv3 = document.createElement('div');

      observer = new MutationObserver(function(records) {
        mutations = records;
      });

      observer.observe(div, {attributes: true, characterData: true, subtree: true});
      div.removeChild(subDiv);
      subDiv.removeChild(subDiv2);
      text = subDiv2.removeChild(subDiv2.firstChild);

      subDiv.setAttribute('a', 'a');
      subDiv2.setAttribute('b', 'b');
      text.textContent = 'c';
      subDiv3.appendChild(subDiv2);
      subDiv3.setAttribute('d', 'd');
      subDiv2.setAttribute('e', 'e');
      div.appendChild(subDiv3);
      subDiv3.setAttribute('f', 'f');
      subDiv2.setAttribute('g', 'g');

      setTimeout(finish, 0);
    }

    function finish() {
      // ...All changes should be received except for setting the "d" attribute on subDiv3 before it was reachable from div.

      assert.equal(mutations.length, 6);
      assert.equal(mutations[0].type, "attributes");
      assert.equal(mutations[0].target, subDiv);
      assert.equal(mutations[0].attributeName, "a");

      assert.equal(mutations[1].type, "attributes");
      assert.equal(mutations[1].target, subDiv2);
      assert.equal(mutations[1].attributeName, "b");

      assert.equal(mutations[2].type, "characterData");
      assert.equal(mutations[2].target, text);

      assert.equal(mutations[3].type, "attributes");
      assert.equal(mutations[3].target, subDiv2);
      assert.equal(mutations[3].attributeName, "e");

      assert.equal(mutations[4].type, "attributes");
      assert.equal(mutations[4].target, subDiv3);
      assert.equal(mutations[4].attributeName, "f");

      assert.equal(mutations[5].type, "attributes");
      assert.equal(mutations[5].target, subDiv2);
      assert.equal(mutations[5].attributeName, "g");

      observer.disconnect();
      done();
    }
    start();
  });
});
</script>
</html>
