summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/html/dom/elements/the-innertext-and-outertext-properties/innertext-setter.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/html/dom/elements/the-innertext-and-outertext-properties/innertext-setter.html')
-rw-r--r--testing/web-platform/tests/html/dom/elements/the-innertext-and-outertext-properties/innertext-setter.html88
1 files changed, 88 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/dom/elements/the-innertext-and-outertext-properties/innertext-setter.html b/testing/web-platform/tests/html/dom/elements/the-innertext-and-outertext-properties/innertext-setter.html
new file mode 100644
index 0000000000..a835a164ed
--- /dev/null
+++ b/testing/web-platform/tests/html/dom/elements/the-innertext-and-outertext-properties/innertext-setter.html
@@ -0,0 +1,88 @@
+<!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) {
+ var container = document.getElementById("container");
+ // 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="innertext-setter-tests.js"></script>