| <!DOCTYPE html> | |
| <title>innerText setter test</title> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <div id="container"></div> | |
| <script> | |
| // As of March 2017, WebKit and Blink have inconsistent results depending on | |
| // rendered or not. setupTest() tests a rendered case, and setupTestDetached() | |
| // tests a not-rendered case. | |
| function setupTest(context, plain) { | |
| // context is either a string or an element node | |
| if (typeof context === "string") { | |
| container.innerHTML = context; | |
| } else { | |
| container.innerHTML = ""; | |
| container.appendChild(context); | |
| } | |
| var e = container.firstChild; | |
| while (e && e.nodeType != Node.ELEMENT_NODE) { | |
| e = e.nextSibling; | |
| } | |
| e.offsetWidth; | |
| var oldChild = e.firstChild; | |
| e.innerText = plain; | |
| return [e, oldChild]; | |
| } | |
| function setupTestDetached(context, plain) { | |
| var detachedContainer = document.createElement("div"); | |
| // context is either a string or an element node | |
| if (typeof context === "string") { | |
| detachedContainer.innerHTML = context; | |
| } else { | |
| detachedContainer.innerHTML = ""; | |
| detachedContainer.appendChild(context); | |
| } | |
| var e = detachedContainer.firstChild; | |
| while (e && e.nodeType != Node.ELEMENT_NODE) { | |
| e = e.nextSibling; | |
| } | |
| var oldChild = e.firstChild; | |
| e.innerText = plain; | |
| return [e, oldChild]; | |
| } | |
| function assertNewSingleTextNode(newChild, expectedText, oldChild) { | |
| assert_not_equals(newChild, null, "Should have a child"); | |
| assert_equals(newChild.nodeType, Node.TEXT_NODE, "Child should be a text node"); | |
| assert_equals(newChild.nextSibling, null, "Should have only one child"); | |
| assert_equals(newChild.data, expectedText); | |
| assert_not_equals(newChild, oldChild, "Child should be a *new* text node"); | |
| } | |
| function assertNoEmptyTextChild(parent) { | |
| for (var child = parent.firstChild; child; child = child.nextSibling) { | |
| if (child.nodeType === Node.TEXT_NODE) { | |
| assert_not_equals(child.data, "", "Should not have empty text nodes"); | |
| } | |
| } | |
| } | |
| function testText(context, plain, expectedText, msg) { | |
| test(function(){ | |
| var arr = setupTest(context, plain); | |
| assertNewSingleTextNode(arr[0].firstChild, expectedText, arr[1]); | |
| }, msg); | |
| test(function() { | |
| var arr = setupTestDetached(context, plain); | |
| assertNewSingleTextNode(arr[0].firstChild, expectedText, arr[1]); | |
| }, msg + ", detached"); | |
| } | |
| function testHTML(context, plain, expectedHTML, msg) { | |
| test(function(){ | |
| var e = setupTest(context, plain)[0]; | |
| assert_equals(e.innerHTML, expectedHTML); | |
| assertNoEmptyTextChild(e); | |
| }, msg); | |
| test(function() { | |
| var e = setupTestDetached(context, plain)[0]; | |
| assert_equals(e.innerHTML, expectedHTML); | |
| assertNoEmptyTextChild(e); | |
| }, msg + ", detached"); | |
| } | |
| </script> | |
| <script src="setter-tests.js"></script> |