blob: f2d1f49b28814a63cbd6ad82241307af9b0cdf33 [file] [log] [blame]
<html>
<import src="../resources/chai.sky" />
<import src="../resources/mocha.sky" />
<div id="range"></div>
<script>
describe('MutationObservers', function() {
it('should handle shadow dom', function() {
function mutate(element) {
element.setAttribute('data-foo', 'bar');
element.insertBefore(document.createTextNode('hello'), element.firstChild);
element.firstChild.textContent = 'goodbye';
element.removeChild(element.firstChild);
}
var range = document.getElementById('range');
var shadowRoot = range.ensureShadowRoot();
shadowRoot.appendChild(document.createElement('div'));
var observer = new MutationObserver(function() { });
observer.observe(shadowRoot.firstChild, {attributes: true, childList: true, characterData: true, subtree: true});
mutate(shadowRoot.firstChild);
var mutations = observer.takeRecords();
// Mutations in shadow DOM should have been observed:
assert.equal(mutations.length, 4);
assert.equal(mutations[0].type, "attributes");
assert.equal(mutations[1].type, "childList");
assert.equal(mutations[2].type, "characterData");
assert.equal(mutations[3].type, "childList");
observer.disconnect();
mutations = observer.takeRecords();
observer.observe(document, {attributes: true, childList: true, characterData: true, subtree: true});
mutate(shadowRoot.firstChild);
// Observing from outside shadow DOM should not see mutations in the shadow:
assert.equal(mutations.length, 0);
});
});
</script>
</html>