65 lines
2.4 KiB
HTML
65 lines
2.4 KiB
HTML
<!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>
|