| <html> |
| <link rel="import" href="../resources/chai.html" /> |
| <link rel="import" href="../resources/mocha.html" /> |
| <script> |
| describe('MutationObserver.takeRecords', function() { |
| it('should allow taking records synchronously or getting a notification', function(done) { |
| var mutations; |
| var div; |
| var subDiv; |
| var observer; |
| |
| // Testing takeRecords. |
| mutations = null; |
| 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!'; |
| div.removeChild(subDiv); |
| |
| mutations = observer.takeRecords(); |
| |
| // ...records are taken synchronously. |
| |
| 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); |
| |
| subDiv.setAttribute('foo', 'baz'); |
| |
| setTimeout(function() { |
| // ...takeRecord took records, but did not clear transient observers. |
| |
| 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(); |
| }, 0); |
| }); |
| }); |
| </script> |
| </html> |