Index: third_party/WebKit/LayoutTests/external/wpt/innerText/setter.html |
diff --git a/third_party/WebKit/LayoutTests/external/wpt/innerText/setter.html b/third_party/WebKit/LayoutTests/external/wpt/innerText/setter.html |
index b8ff0c9599fbcc07f469527aa870f427a279e895..2c47ff6274e8406a9e4adb07a6d12775ee169d0d 100644 |
--- a/third_party/WebKit/LayoutTests/external/wpt/innerText/setter.html |
+++ b/third_party/WebKit/LayoutTests/external/wpt/innerText/setter.html |
@@ -4,6 +4,10 @@ |
<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") { |
@@ -16,34 +20,68 @@ function setupTest(context, plain) { |
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); |
- var e = arr[0]; |
- var oldChild = arr[1]; |
- assert_not_equals(e.firstChild, null, "Should have a child"); |
- assert_equals(e.firstChild.nodeType, Node.TEXT_NODE, "Child should be a text node"); |
- assert_equals(e.firstChild.nextSibling, null, "Should have only one child"); |
- assert_equals(e.firstChild.data, expectedText); |
- assert_not_equals(e.firstChild, oldChild, "Child should be a *new* text node"); |
+ 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); |
- var child = e.firstChild; |
- while (child) { |
- if (child.nodeType === Node.TEXT_NODE) { |
- assert_not_equals(child.data, "", "Should not have empty text nodes"); |
- } |
- child = child.nextSibling; |
- } |
+ 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> |