| <!DOCTYPE HTML> |
| <html> |
| <head> |
| <title>insertAdjacentHTML in HTML</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="insert_adjacent_html.js"></script> |
| </head> |
| <body> |
| <p id="display"></p><div id="content" style="display: none"></div><div id="content2" style="display: none"></div> |
| <script> |
| var script_ran = false; |
| |
| function testPositions(node, testDesc) { |
| test(function() { |
| script_ran = false; |
| node.insertAdjacentHTML("beforeBegin", "\u003Cscript>script_ran = true;\u003C/script><i></i>"); |
| assert_equals(node.previousSibling.localName, "i", "Should have had <i> as previous sibling"); |
| assert_equals(node.previousSibling.previousSibling.localName, "script", "Should have had <script> as second previous child"); |
| assert_false(script_ran, "script should not have run"); |
| }, "beforeBegin " + node.id + " " + testDesc) |
| |
| test(function() { |
| script_ran = false; |
| node.insertAdjacentHTML("Afterbegin", "<b></b>\u003Cscript>script_ran = true;\u003C/script>"); |
| assert_equals(node.firstChild.localName, "b", "Should have had <b> as first child"); |
| assert_equals(node.firstChild.nextSibling.localName, "script", "Should have had <script> as second child"); |
| assert_false(script_ran, "script should not have run"); |
| }, "Afterbegin " + node.id + " " + testDesc); |
| |
| test(function() { |
| script_ran = false; |
| node.insertAdjacentHTML("BeforeEnd", "\u003Cscript>script_ran = true;\u003C/script><u></u>"); |
| assert_equals(node.lastChild.localName, "u", "Should have had <u> as last child"); |
| assert_equals(node.lastChild.previousSibling.localName, "script", "Should have had <script> as penultimate child"); |
| assert_false(script_ran, "script should not have run"); |
| }, "BeforeEnd " + node.id + " " + testDesc) |
| |
| test(function() { |
| script_ran = false; |
| node.insertAdjacentHTML("afterend", "<a></a>\u003Cscript>script_ran = true;\u003C/script>"); |
| assert_equals(node.nextSibling.localName, "a", "Should have had <a> as next sibling"); |
| assert_equals(node.nextSibling.nextSibling.localName, "script", "Should have had <script> as second next sibling"); |
| assert_false(script_ran, "script should not have run"); |
| }, "afterend " + node.id + " " + testDesc) |
| } |
| |
| var content = document.getElementById("content"); |
| testPositions(content, "without next sibling"); |
| testPositions(content, "again, with next sibling"); |
| |
| test(function() { |
| assert_throws("SYNTAX_ERR", function() {content.insertAdjacentHTML("bar", "foo")}); |
| assert_throws("SYNTAX_ERR", function() {content.insertAdjacentHTML("beforebegÄ°n", "foo")}); |
| assert_throws("SYNTAX_ERR", function() {content.insertAdjacentHTML("beforebegın", "foo")}); |
| }, "Should throw when inserting with invalid position string"); |
| |
| var parentElement = document.createElement("div"); |
| var child = document.createElement("div"); |
| child.id = "child"; |
| |
| testThrowingNoParent(child, "null"); |
| testThrowingNoParent(document.documentElement, "a document"); |
| |
| test(function() { |
| child.insertAdjacentHTML("afterBegin", "foo"); |
| child.insertAdjacentHTML("beforeend", "bar"); |
| assert_equals(child.textContent, "foobar"); |
| parentElement.appendChild(child); |
| }, "Inserting after being and before end should order things correctly"); |
| |
| testPositions(child, "node not in tree but has parent"); |
| |
| test(function() { |
| script_ran = false; |
| content.appendChild(parentElement); // must not run scripts |
| assert_false(script_ran, "script should not have run"); |
| }, "Should not run script when appending things which have descendant <script> inserted via insertAdjacentHTML"); |
| |
| var content2 = document.getElementById("content2"); |
| testPositions(content2, "without next sibling"); |
| testPositions(content2, "test again, now that there's a next sibling"); |
| |
| // HTML only |
| test(function() { |
| document.body.insertAdjacentHTML("afterend", "<p>"); |
| document.head.insertAdjacentHTML("beforebegin", "<p>"); |
| assert_equals(document.getElementsByTagName("head").length, 1, "Should still have one head"); |
| assert_equals(document.getElementsByTagName("body").length, 1, "Should still have one body"); |
| }, "Inserting kids of the <html> element should not do weird things with implied <body>/<head> tags") |
| </script> |
| <div id="log"></div> |
| </body> |
| </html> |