diff options
Diffstat (limited to 'dom/events/test/test_bug328885.html')
-rw-r--r-- | dom/events/test/test_bug328885.html | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/dom/events/test/test_bug328885.html b/dom/events/test/test_bug328885.html new file mode 100644 index 0000000000..2906c7e024 --- /dev/null +++ b/dom/events/test/test_bug328885.html @@ -0,0 +1,135 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=328885 +--> +<head> + <title>Test for Bug 328885</title> + <script src="/tests/SimpleTest/SimpleTest.js"></script> + <script src="/tests/SimpleTest/EventUtils.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> +</head> +<body> +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=328885">Mozilla Bug 328885</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<input type="text" id="inputelement" + style="position: absolute; left: 0px; top: 0px;"> +<pre id="test"> +<script class="testbody" type="text/javascript"> + +/** Test for Bug 328885 **/ + + var inputelement = null; + var mutationCount = 0; + + function mutationListener(evt) { + ++mutationCount; + } + + function clickTest() { + inputelement.addEventListener("DOMSubtreeModified", mutationListener); + inputelement.addEventListener("DOMNodeInserted", mutationListener); + inputelement.addEventListener("DOMNodeRemoved", mutationListener); + inputelement.addEventListener("DOMNodeRemovedFromDocument", mutationListener); + inputelement.addEventListener("DOMNodeInsertedIntoDocument", mutationListener); + inputelement.addEventListener("DOMAttrModified", mutationListener); + inputelement.addEventListener("DOMCharacterDataModified", mutationListener); + + inputelement.addEventListener('click', + function(event) { + var evt = SpecialPowers.wrap(event); + ok(SpecialPowers.wrap(HTMLDivElement).isInstance(evt.originalTarget), + "(1) Wrong originalTarget!"); + is(SpecialPowers.unwrap(evt.originalTarget.parentNode), inputelement, + "(2) Wront parent node!"); + ok(mutationCount == 0, "(3) No mutations should have happened! [" + mutationCount + "]"); + evt.originalTarget.textContent = "foo"; + ok(mutationCount == 0, "(4) Mutation listener shouldn't have been called! [" + mutationCount + "]"); + evt.originalTarget.innerHTML = "foo2"; + ok(mutationCount == 0, "(5) Mutation listener shouldn't have been called! [" + mutationCount + "]"); + evt.originalTarget.lastChild.data = "bar"; + ok(mutationCount == 0, "(6) Mutation listener shouldn't have been called! [" + mutationCount + "]"); + + var r = SpecialPowers.wrap(document.createRange()); + r.selectNodeContents(evt.originalTarget); + r.deleteContents(); + ok(mutationCount == 0, "(7) Mutation listener shouldn't have been called! [" + mutationCount + "]"); + + evt.originalTarget.textContent = "foo"; + ok(mutationCount == 0, "(8) Mutation listener shouldn't have been called! [" + mutationCount + "]"); + r = SpecialPowers.wrap(document.createRange()); + r.selectNodeContents(evt.originalTarget); + r.extractContents(); + ok(mutationCount == 0, "(9) Mutation listener shouldn't have been called! [" + mutationCount + "]"); + + evt.originalTarget.setAttribute("foo", "bar"); + ok(mutationCount == 0, "(10) Mutation listener shouldn't have been called! ["+ mutationCount + "]"); + + // We played with the internal div, now restore its initial state + evt.originalTarget.replaceChildren(new Text()); + + // Same tests with non-native-anononymous element. + // mutationCount should be increased by 2 each time, since there is + // first a mutation specific event and then DOMSubtreeModified. + inputelement.textContent = "foo"; + ok(mutationCount == 2, "(11) Mutation listener should have been called! [" + mutationCount + "]"); + inputelement.lastChild.data = "bar"; + ok(mutationCount == 4, "(12) Mutation listener should have been called! [" + mutationCount + "]"); + + r = document.createRange(); + r.selectNodeContents(inputelement); + r.deleteContents(); + ok(mutationCount == 6, "(13) Mutation listener should have been called! [" + mutationCount + "]"); + + inputelement.textContent = "foo"; + ok(mutationCount == 8, "(14) Mutation listener should have been called! [" + mutationCount + "]"); + r = document.createRange(); + r.selectNodeContents(inputelement); + r.extractContents(); + ok(mutationCount == 10, "(15) Mutation listener should have been called! [" + mutationCount + "]"); + + inputelement.setAttribute("foo", "bar"); + ok(mutationCount == 12, "(16) Mutation listener should have been called! ["+ mutationCount + "]"); + + // Then try some mixed mutations. The mutation handler of non-native-a + inputelement.addEventListener("DOMAttrModified", + function (evt2) { + evt.originalTarget.setAttribute("foo", "bar" + mutationCount); + ok(evt.originalTarget.getAttribute("foo") == "bar" + mutationCount, + "(17) Couldn't update the attribute?!?"); + }); + inputelement.setAttribute("foo", ""); + ok(mutationCount == 14, "(18) Mutation listener should have been called! ["+ mutationCount + "]"); + + inputelement.textContent = "foo"; + ok(mutationCount == 16, "(19) Mutation listener should have been called! ["+ mutationCount + "]"); + inputelement.addEventListener("DOMCharacterDataModified", + function (evt2) { + evt.originalTarget.textContent = "bar" + mutationCount; + }); + // This one deletes and inserts a new node, then DOMSubtreeModified. + inputelement.textContent = "bar"; + ok(mutationCount == 19, "(20) Mutation listener should have been called! ["+ mutationCount + "]"); + }); + synthesizeMouseAtCenter(inputelement, {}, window); + SimpleTest.finish(); + } + + function doTest() { + inputelement = document.getElementById('inputelement'); + inputelement.focus(); + setTimeout(clickTest, 100); + } + + SimpleTest.waitForExplicitFinish(); + SimpleTest.requestFlakyTimeout("untriaged"); + addLoadEvent(doTest); + +</script> +</pre> +</body> +</html> + |