Tests for replacing exactly one Text node. The optimization to update its data should not be observable. On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". Keeping a reference container = createElementWithText("old"); textNode = container.firstChild PASS container.innerHTML = "new"; container.firstChild is not textNode Mutation observer container = createElementWithText("old"); mutationObserver.observe(container, {childList: true}); PASS container.innerHTML = "new"; records = mutationObserver.takeRecords(); records.length is 1 PASS records[0].type is "childList" PASS records[0].removedNodes.length is 1 PASS records[0].removedNodes[0].data is "old" PASS records[0].addedNodes.length is 1 PASS records[0].addedNodes[0].data is "new" DOMSubtreeModified event PASS container = createElementWithText("old"); countEvent(container, "DOMSubtreeModified"); eventCount is 0 PASS container.innerHTML = "new"; eventCount > 0 is true DOMNodeInserted event PASS container = createElementWithText("old"); countEvent(container, "DOMNodeInserted"); eventCount is 0 PASS container.innerHTML = "new"; eventCount is 1 DOMNodeRemoved event PASS container = createElementWithText("old"); countEvent(container, "DOMNodeRemoved"); eventCount is 0 PASS container.innerHTML = "new"; eventCount is 1 DOMCharacterDataModified event PASS container = createElementWithText("old"); countEvent(container, "DOMCharacterDataModified"); eventCount is 0 PASS container.innerHTML = "new"; eventCount is 0 PASS successfullyParsed is true TEST COMPLETE