blob: 66a759ea892b76fae2f43493a1661a639d134046 [file] [log] [blame]
<!DOCTYPE html>
<html>
<body>
<script src="../../resources/js-test-pre.js"></script>
<script>
description('Tests for replacing exactly one Text node. The optimization to update its data should not be observable.');
function createElementWithText(text)
{
var iframe = document.createElement('iframe');
document.body.appendChild(iframe);
var doc = iframe.contentDocument;
var container = doc.createElement("div");
container.textContent = text;
doc.body.appendChild(container);
return container;
}
function eventCounter() { eventCount++; }
function countEvent(element, name) {
eventCount = 0;
element.addEventListener(name, eventCounter);
}
debug('Keeping a reference');
evalAndLog('container = createElementWithText("old"); textNode = container.firstChild');
shouldNotBe('container.innerHTML = "new"; container.firstChild', 'textNode');
debug('\nMutation observer');
var mutationObserver = new MutationObserver(function () {});
evalAndLog('container = createElementWithText("old"); mutationObserver.observe(container, {childList: true});');
shouldBe('container.innerHTML = "new"; records = mutationObserver.takeRecords(); records.length', '1');
shouldBe('records[0].type', '"childList"');
shouldBe('records[0].removedNodes.length', '1');
shouldBe('records[0].removedNodes[0].data', '"old"');
shouldBe('records[0].addedNodes.length', '1');
shouldBe('records[0].addedNodes[0].data', '"new"');
debug('\nDOMSubtreeModified event');
shouldBe('container = createElementWithText("old"); countEvent(container, "DOMSubtreeModified"); eventCount', '0');
shouldBeTrue('container.innerHTML = "new"; eventCount > 0');
debug('\nDOMNodeInserted event');
shouldBe('container = createElementWithText("old"); countEvent(container, "DOMNodeInserted"); eventCount', '0');
shouldBe('container.innerHTML = "new"; eventCount', '1');
debug('\nDOMNodeRemoved event');
shouldBe('container = createElementWithText("old"); countEvent(container, "DOMNodeRemoved"); eventCount', '0');
shouldBe('container.innerHTML = "new"; eventCount', '1');
debug('\nDOMCharacterDataModified event');
shouldBe('container = createElementWithText("old"); countEvent(container, "DOMCharacterDataModified"); eventCount', '0');
shouldBe('container.innerHTML = "new"; eventCount', '0');
// FIXME: Add a test for DOMNodeRemovedFromDocument event.
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>