Test WebKitMutationObserver.observe on attributes. On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". Testing basic aspects of childList observation. ...can childList changes be observed at all PASS mutations.length is 1 PASS mutations[0].type is "childList" PASS mutations[0].addedNodes.length is 1 PASS mutations[0].addedNodes[0] is removedDiv1 ...observer.disconnect() should prevent further delivery of mutations. PASS mutations is null ...re-observing after disconnect works with the same observer. PASS mutations.length is 2 PASS mutations[0].type is "childList" PASS mutations[0].removedNodes.length is 1 PASS mutations[0].removedNodes[0] is removedDiv1 PASS mutations[1].type is "childList" PASS mutations[1].removedNodes.length is 1 PASS mutations[1].removedNodes[0] is removedDiv2 Testing that observing without specifying "childList" does not result in hearing about childList changes. PASS mutations is null Testing that re-observing the same node with the same observer has the effect of resetting the options. PASS calls is 1 PASS mutations.length is 1 PASS mutations[0].type is "childList" PASS mutations is null Testing that multiple observers can be registered to a given node and both receive mutations. PASS mutations.length is 1 PASS mutations[0].type is "childList" PASS mutations2.length is 1 PASS mutations2[0].type is "childList" Testing that innerText and innerHTML always result in a single childList mutation. ...innerHTML PASS mutations.length is 1 PASS mutations[0].type is "childList" PASS mutations[0].addedNodes.length is 3 PASS mutations[0].addedNodes[0] is addedDiv1 PASS mutations[0].addedNodes[1] is addedDiv2 PASS mutations[0].addedNodes[2] is addedDiv3 PASS mutations[0].removedNodes.length is 2 PASS mutations[0].removedNodes[0] is removedDiv1 PASS mutations[0].removedNodes[1] is removedDiv2 ...innerText PASS mutations.length is 1 PASS mutations[0].type is "childList" PASS mutations[0].addedNodes.length is 1 PASS mutations[0].removedNodes.length is 3 Testing that replaceChild results in minimal childList mutations. ...simple replace child PASS mutations.length is 1 PASS mutations[0].type is "childList" PASS mutations[0].addedNodes.length is 1 PASS mutations[0].addedNodes[0] is addedDiv1 PASS mutations[0].removedNodes.length is 1 PASS mutations[0].removedNodes[0] is removedDiv1 ...replace with DocumentFragment PASS mutations.length is 1 PASS mutations[0].type is "childList" PASS mutations[0].addedNodes.length is 2 PASS mutations[0].addedNodes[0] is addedDiv1 PASS mutations[0].addedNodes[1] is addedDiv2 PASS mutations[0].removedNodes.length is 1 PASS mutations[0].removedNodes[0] is removedDiv1 Testing that insertBefore results in minimal childList mutations. PASS mutations.length is 1 PASS mutations[0].type is "childList" PASS mutations[0].addedNodes.length is 2 PASS mutations[0].addedNodes[0] is addedDiv1 PASS mutations[0].addedNodes[1] is addedDiv2 PASS mutations[0].removedNodes.length is 0 Testing that appendChild results in minimal childList mutations. PASS mutations.length is 1 PASS mutations[0].type is "childList" PASS mutations[0].addedNodes.length is 2 PASS mutations[0].addedNodes[0] is addedDiv1 PASS mutations[0].addedNodes[1] is addedDiv2 PASS mutations[0].removedNodes.length is 0 Setting an empty childlist to the empty string with innerHTML should not assert. PASS mutations is null PASS successfullyParsed is true TEST COMPLETE