1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
<html xmlns="http://www.w3.org/1999/xhtml">
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=613662
-->
<head>
<title>Test for Bug 613662</title>
<script src="/tests/SimpleTest/SimpleTest.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=613662">Mozilla Bug 613662</a>
<p id="display"></p><div id="content" style="display: none"></div><div id="content2" style="display: none"></div><pre id="test">
<script type="application/javascript"><![CDATA[
SimpleTest.expectAssertions(1);
/** Test for Bug 613662 **/
function testPositions(node) {
node.insertAdjacentHTML("beforeBegin", "\u003Cscript>ok(false, 'script should not have run');\u003C/script><i></i>");
is(node.previousSibling.localName, "i", "Should have had <i> as previous sibling");
node.insertAdjacentHTML("Afterbegin", "<b></b>\u003Cscript>ok(false, 'script should not have run');\u003C/script>");
is(node.firstChild.localName, "b", "Should have had <b> as first child");
node.insertAdjacentHTML("BeforeEnd", "\u003Cscript>ok(false, 'script should not have run');\u003C/script><u></u>");
is(node.lastChild.localName, "u", "Should have had <u> as last child");
node.insertAdjacentHTML("afterend", "<a></a>\u003Cscript>ok(false, 'script should not have run');\u003C/script>");
is(node.nextSibling.localName, "a", "Should have had <a> as next sibling");
}
var content = document.getElementById("content");
testPositions(content); // without next sibling
testPositions(content); // test again when there's next sibling
try {
content.insertAdjacentHTML("bar", "foo");
ok(false, "insertAdjacentHTML should have thrown");
} catch (e) {
is(e.name, "SyntaxError", "insertAdjacentHTML should throw SyntaxError");
is(e.code, 12, "insertAdjacentHTML should throw SYNTAX_ERR");
}
var parent = document.createElementNS("http://www.w3.org/1999/xhtml", "div");
var child = document.createElementNS("http://www.w3.org/1999/xhtml", "div");
try {
child.insertAdjacentHTML("Beforebegin", "foo");
ok(false, "insertAdjacentHTML should have thrown");
} catch (e) {
is(e.name, "NoModificationAllowedError", "insertAdjacentHTML should throw NoModificationAllowedError");
is(e.code, 7, "insertAdjacentHTML should throw NO_MODIFICATION_ALLOWED_ERR");
}
try {
child.insertAdjacentHTML("AfterEnd", "foo");
ok(false, "insertAdjacentHTML should have thrown");
} catch (e) {
is(e.name, "NoModificationAllowedError", "insertAdjacentHTML should throw NoModificationAllowedError");
is(e.code, 7, "insertAdjacentHTML should throw NO_MODIFICATION_ALLOWED_ERR");
}
child.insertAdjacentHTML("afterBegin", "foo"); // mustn't throw
child.insertAdjacentHTML("beforeend", "foo"); // mustn't throw
parent.appendChild(child);
testPositions(child); // node not in tree but has parent
content.appendChild(parent); // must not run scripts
try {
document.documentElement.insertAdjacentHTML("afterend", "<div></div>");
ok(false, "insertAdjacentHTML should have thrown");
} catch (e) {
is(e.name, "NoModificationAllowedError", "insertAdjacentHTML should throw NoModificationAllowedError");
is(e.code, 7, "insertAdjacentHTML should throw NO_MODIFICATION_ALLOWED_ERR");
}
var content2 = document.getElementById("content2");
var events = [
[ "DOMNodeInserted", document.body ],
[ "DOMNodeInserted", document.body ],
[ "DOMSubtreeModified", null ],
[ "DOMNodeInserted", content2 ],
[ "DOMNodeInserted", content2 ],
[ "DOMSubtreeModified", null ],
[ "DOMNodeInserted", content2 ],
[ "DOMNodeInserted", content2 ],
[ "DOMSubtreeModified", null ],
[ "DOMNodeInserted", document.body ],
[ "DOMNodeInserted", document.body ],
[ "DOMSubtreeModified", null ],
[ "DOMNodeInserted", document.body ],
[ "DOMNodeInserted", document.body ],
[ "DOMSubtreeModified", null ],
[ "DOMNodeInserted", content2 ],
[ "DOMNodeInserted", content2 ],
[ "DOMSubtreeModified", null ],
[ "DOMNodeInserted", content2 ],
[ "DOMNodeInserted", content2 ],
[ "DOMSubtreeModified", null ],
[ "DOMNodeInserted", document.body ],
[ "DOMNodeInserted", document.body ],
[ "DOMSubtreeModified", null ],
];
function mutationEventListener(evt) {
var expected = events.shift();
is(evt.type, expected[0], "Unexpected mutation type");
is(evt.relatedNode, expected[1], "Unexpected related node");
}
document.addEventListener("DOMSubtreeModified", mutationEventListener);
document.addEventListener("DOMNodeInserted", mutationEventListener);
document.addEventListener("DOMNodeRemoved", mutationEventListener);
document.addEventListener("DOMNodeRemovedFromDocument", mutationEventListener);
document.addEventListener("DOMNodeInsertedIntoDocument", mutationEventListener);
document.addEventListener("DOMAttrModified", mutationEventListener);
document.addEventListener("DOMCharacterDataModified", mutationEventListener);
testPositions(content2); // without next sibling
testPositions(content2); // test again when there's next sibling
is(events.length, 0, "Not all expected events fired.");
// XML-only:
try {
content.insertAdjacentHTML("beforeend", "<p>");
ok(false, "insertAdjacentHTML should have thrown");
} catch (e) {
is(e.name, "SyntaxError", "insertAdjacentHTML should throw SyntaxError");
is(e.code, 12, "insertAdjacentHTML should throw SYNTAX_ERR");
}
]]></script>
</pre>
</body>
</html>
|