mirror of
https://github.com/servo/servo.git
synced 2025-06-24 00:54:32 +01:00
167 lines
6 KiB
HTML
167 lines
6 KiB
HTML
<!DOCTYPE HTML>
|
|
<meta charset=utf-8>
|
|
<title>MutationObservers: takeRecords</title>
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<script src="mutationobservers.js"></script>
|
|
<h1>MutationObservers: document mutations</h1>
|
|
<div id="log"></div>
|
|
|
|
<script id='s001'>
|
|
var setupTest = async_test("setup test");
|
|
var insertionTest = async_test("parser insertion mutations");
|
|
var insertionTest2 = async_test("parser script insertion mutation");
|
|
var testCounter = 0;
|
|
|
|
function masterMO(sequence, obs) {
|
|
testCounter++;
|
|
if (testCounter == 1) {
|
|
insertionTest.step(
|
|
function () {
|
|
checkRecords(document, sequence,
|
|
[{type: "childList",
|
|
addedNodes: function () {
|
|
return [ document.getElementById("n00") ];
|
|
},
|
|
previousSibling: function () {
|
|
return document.getElementById("s001");
|
|
},
|
|
target: document.body},
|
|
{type: "childList",
|
|
addedNodes: function () {
|
|
return [ document.getElementById("s002") ];
|
|
},
|
|
previousSibling: function () {
|
|
return document.getElementById("n00");
|
|
},
|
|
target: document.body},
|
|
{type: "childList",
|
|
addedNodes: function () {
|
|
return [ document.getElementById("s002").firstChild ];
|
|
},
|
|
target: function () {
|
|
return document.getElementById("s002");
|
|
}}]);
|
|
});
|
|
} else if (testCounter == 2) {
|
|
insertionTest2.step(
|
|
function () {
|
|
checkRecords(document, sequence,
|
|
[{type: "childList",
|
|
addedNodes: function () {
|
|
return [ document.getElementById("inserted_script") ];
|
|
},
|
|
target: function () {
|
|
return document.getElementById("n00");
|
|
}},
|
|
{type: "childList",
|
|
addedNodes: function () {
|
|
return [ document.getElementById("inserted_element") ];
|
|
},
|
|
previousSibling: function () {
|
|
return document.getElementById("s002");
|
|
},
|
|
target: document.body}
|
|
]);
|
|
});
|
|
}
|
|
}
|
|
var document_observer;
|
|
var newElement;
|
|
setupTest.step(function() {
|
|
document_observer = new MutationObserver(masterMO);
|
|
newElement = document.createElement("span");
|
|
document_observer.observe(document, {subtree:true,childList:true});
|
|
newElement.id = "inserted_element";
|
|
newElement.setAttribute("style", "display: none");
|
|
newElement.textContent = "my new span for n00";
|
|
});
|
|
</script><p id='n00'></p><script id='s002'>
|
|
var newScript = document.createElement("script");
|
|
setupTest.step(function() {
|
|
newScript.textContent = "document.body.appendChild(newElement);";
|
|
newScript.id = "inserted_script";
|
|
document.getElementById("n00").appendChild(newScript);
|
|
});
|
|
if (testCounter < 1) {
|
|
insertionTest.step(
|
|
function () {
|
|
assert_unreached("document observer did not trigger");
|
|
});
|
|
}
|
|
</script><script id='s003'>
|
|
setupTest.step(function() {
|
|
document_observer.disconnect();
|
|
});
|
|
if (testCounter < 2) {
|
|
insertionTest2.step(
|
|
function () {
|
|
assert_unreached("document observer did not trigger");
|
|
});
|
|
}
|
|
insertionTest.done();
|
|
insertionTest2.done();
|
|
</script>
|
|
|
|
<p id='n012'></p><div id='d01'>
|
|
<script id='s011'>
|
|
var removalTest = async_test("removal of parent during parsing");
|
|
var d01 = document.getElementById("d01");
|
|
testCounter = 0;
|
|
|
|
function removalMO(sequence, obs) {
|
|
testCounter++;
|
|
if (testCounter == 1) {
|
|
removalTest.step(
|
|
function () {
|
|
checkRecords(document, sequence,
|
|
[{type: "childList",
|
|
removedNodes: function () {
|
|
return [ d01 ];
|
|
},
|
|
previousSibling: function () {
|
|
return document.getElementById("n012");
|
|
},
|
|
target: document.body}]);
|
|
});
|
|
} else if (testCounter == 2) {
|
|
removalTest.step(
|
|
function () {
|
|
checkRecords(document, sequence,
|
|
[{type: "childList",
|
|
addedNodes: function () {
|
|
return [ document.getElementById("s012") ];
|
|
},
|
|
previousSibling: function () {
|
|
return document.getElementById("n012");
|
|
},
|
|
target: document.body},
|
|
{type: "childList",
|
|
addedNodes: function () {
|
|
return [ document.getElementById("s012").firstChild ];
|
|
},
|
|
target: function () {
|
|
return document.getElementById("s012");
|
|
}}]);
|
|
});
|
|
}
|
|
}
|
|
var document2_observer;
|
|
setupTest.step(function() {
|
|
document2_observer = new MutationObserver(removalMO);
|
|
document2_observer.observe(document, {subtree:true,childList:true});
|
|
d01.parentNode.removeChild(d01);
|
|
});
|
|
</script><p id='n01'></p></div><script id='s012'>
|
|
setupTest.step(function() {
|
|
document2_observer.disconnect();
|
|
});
|
|
if (testCounter < 2) {
|
|
removalTest.step(
|
|
function () {
|
|
assert_unreached("document observer did not trigger");
|
|
});
|
|
}
|
|
removalTest.done();
|
|
setupTest.done();
|
|
</script>
|