| Index: LayoutTests/fast/dom/Node/textContent.html
|
| diff --git a/LayoutTests/fast/dom/Node/textContent.html b/LayoutTests/fast/dom/Node/textContent.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..6f09ed656ae2a7e12625c91b12ed471f68206ec1
|
| --- /dev/null
|
| +++ b/LayoutTests/fast/dom/Node/textContent.html
|
| @@ -0,0 +1,258 @@
|
| +<!DOCTYPE html>
|
| +<html>
|
| +<head>
|
| +<script src="../../../resources/testharness.js"></script>
|
| +<script src="../../../resources/testharnessreport.js"></script>
|
| +</head>
|
| +<body>
|
| +<script>
|
| +var documents, doctypes;
|
| +setup(function() {
|
| + documents = [
|
| + [document, "parser"],
|
| + [document.implementation.createDocument("", "test", null), "createDocument"],
|
| + [document.implementation.createHTMLDocument("title"), "createHTMLDocument"],
|
| + ]
|
| + doctypes = [
|
| + [document.doctype, "parser"],
|
| + [document.implementation.createDocumentType("x", "", ""), "script"],
|
| + ]
|
| +});
|
| +
|
| +// Getting
|
| +// DocumentFragment, Element:
|
| +test(function() {
|
| + var element = document.createElement("div");
|
| + assert_equals(element.textContent, "");
|
| +}, "For an empty Element, textContent should be the empty string");
|
| +
|
| +test(function() {
|
| + assert_equals(document.createDocumentFragment().textContent, "");
|
| +}, "For an empty DocumentFragment, textContent should be the empty string");
|
| +
|
| +test(function() {
|
| + var el = document.createElement("div");
|
| + el.appendChild(document.createComment(" abc "));
|
| + el.appendChild(document.createTextNode("\tDEF\t"));
|
| + el.appendChild(document.createProcessingInstruction("x", " ghi "));
|
| + assert_equals(el.textContent, "\tDEF\t");
|
| +}, "Element with children");
|
| +
|
| +test(function() {
|
| + var el = document.createElement("div");
|
| + var child = document.createElement("div");
|
| + el.appendChild(child);
|
| + child.appendChild(document.createComment(" abc "));
|
| + child.appendChild(document.createTextNode("\tDEF\t"));
|
| + child.appendChild(document.createProcessingInstruction("x", " ghi "));
|
| + assert_equals(el.textContent, "\tDEF\t");
|
| +}, "Element with descendants");
|
| +
|
| +test(function() {
|
| + var df = document.createDocumentFragment();
|
| + df.appendChild(document.createComment(" abc "));
|
| + df.appendChild(document.createTextNode("\tDEF\t"));
|
| + df.appendChild(document.createProcessingInstruction("x", " ghi "));
|
| + assert_equals(df.textContent, "\tDEF\t");
|
| +}, "DocumentFragment with children");
|
| +
|
| +test(function() {
|
| + var df = document.createDocumentFragment();
|
| + var child = document.createElement("div");
|
| + df.appendChild(child);
|
| + child.appendChild(document.createComment(" abc "));
|
| + child.appendChild(document.createTextNode("\tDEF\t"));
|
| + child.appendChild(document.createProcessingInstruction("x", " ghi "));
|
| + assert_equals(df.textContent, "\tDEF\t");
|
| +}, "DocumentFragment with descendants");
|
| +
|
| +// Text, ProcessingInstruction, Comment:
|
| +test(function() {
|
| + assert_equals(document.createTextNode("").textContent, "");
|
| +}, "For an empty Text, textContent should be the empty string");
|
| +
|
| +test(function() {
|
| + assert_equals(document.createProcessingInstruction("x", "").textContent, "");
|
| +}, "For an empty ProcessingInstruction, textContent should be the empty string");
|
| +
|
| +test(function() {
|
| + assert_equals(document.createComment("").textContent, "");
|
| +}, "For an empty Comment, textContent should be the empty string");
|
| +
|
| +test(function() {
|
| + assert_equals(document.createTextNode("abc").textContent, "abc");
|
| +}, "For a Text with data, textContent should be that data");
|
| +
|
| +test(function() {
|
| + assert_equals(document.createProcessingInstruction("x", "abc").textContent, "abc");
|
| +}, "For a ProcessingInstruction with data, textContent should be that data");
|
| +
|
| +test(function() {
|
| + assert_equals(document.createComment("abc").textContent, "abc");
|
| +}, "For a Comment with data, textContent should be that data");
|
| +
|
| +// Any other node:
|
| +documents.forEach(function(argument) {
|
| + var doc = argument[0], creator = argument[1];
|
| + test(function() {
|
| + assert_equals(doc.textContent, null);
|
| + }, "For Documents created by " + creator + ", textContent should be null");
|
| +});
|
| +
|
| +doctypes.forEach(function(argument) {
|
| + var doctype = argument[0], creator = argument[1];
|
| + test(function() {
|
| + assert_equals(doctype.textContent, null);
|
| + }, "For DocumentType created by " + creator + ", textContent should be null");
|
| +});
|
| +
|
| +// Setting
|
| +// DocumentFragment, Element:
|
| +var arguments = [
|
| + [null, null],
|
| + [undefined, null],
|
| + ["", null],
|
| + [42, "42"],
|
| + ["abc", "abc"],
|
| + ["<b>xyz<\/b>", "<b>xyz<\/b>"],
|
| + ["d\0e", "d\0e"]
|
| + // XXX unpaired surrogate?
|
| +]
|
| +arguments.forEach(function(aValue) {
|
| + var argument = aValue[0], expectation = aValue[1];
|
| + var check = function(aElementOrDocumentFragment) {
|
| + if (expectation === null) {
|
| + assert_equals(aElementOrDocumentFragment.textContent, "");
|
| + assert_equals(aElementOrDocumentFragment.firstChild, null);
|
| + } else {
|
| + assert_equals(aElementOrDocumentFragment.textContent, expectation);
|
| + assert_equals(aElementOrDocumentFragment.childNodes.length, 1, "Should have one child");
|
| + var firstChild = aElementOrDocumentFragment.firstChild;
|
| + assert_true(firstChild instanceof Text, "child should be a Text");
|
| + assert_equals(firstChild.data, expectation);
|
| + }
|
| + }
|
| +
|
| + test(function() {
|
| + var el = document.createElement("div");
|
| + el.textContent = argument;
|
| + check(el);
|
| + }, "Element without children set to " + format_value(argument));
|
| +
|
| + test(function() {
|
| + var el = document.createElement("div");
|
| + var text = el.appendChild(document.createTextNode(""));
|
| + el.textContent = argument;
|
| + check(el);
|
| + assert_equals(text.parentNode, null, "Preexisting Text should have been removed");
|
| + }, "Element with empty text node as child set to " + format_value(argument));
|
| +
|
| + test(function() {
|
| + var el = document.createElement("div");
|
| + el.appendChild(document.createComment(" abc "));
|
| + el.appendChild(document.createTextNode("\tDEF\t"));
|
| + el.appendChild(document.createProcessingInstruction("x", " ghi "));
|
| + el.textContent = argument;
|
| + check(el);
|
| + }, "Element with children set to " + format_value(argument));
|
| +
|
| + test(function() {
|
| + var el = document.createElement("div");
|
| + var child = document.createElement("div");
|
| + el.appendChild(child);
|
| + child.appendChild(document.createComment(" abc "));
|
| + child.appendChild(document.createTextNode("\tDEF\t"));
|
| + child.appendChild(document.createProcessingInstruction("x", " ghi "));
|
| + el.textContent = argument;
|
| + check(el);
|
| + assert_equals(child.childNodes.length, 3, "Should not have changed the internal structure of the removed nodes.");
|
| + }, "Element with descendants set to " + format_value(argument));
|
| +
|
| + test(function() {
|
| + var df = document.createDocumentFragment();
|
| + df.textContent = argument;
|
| + check(df);
|
| + }, "DocumentFragment without children set to " + format_value(argument));
|
| +
|
| + test(function() {
|
| + var df = document.createDocumentFragment();
|
| + var text = df.appendChild(document.createTextNode(""));
|
| + df.textContent = argument;
|
| + check(df);
|
| + assert_equals(text.parentNode, null, "Preexisting Text should have been removed");
|
| + }, "DocumentFragment with empty text node as child set to " + format_value(argument));
|
| +
|
| + test(function() {
|
| + var df = document.createDocumentFragment();
|
| + df.appendChild(document.createComment(" abc "));
|
| + df.appendChild(document.createTextNode("\tDEF\t"));
|
| + df.appendChild(document.createProcessingInstruction("x", " ghi "));
|
| + df.textContent = argument;
|
| + check(df);
|
| + }, "DocumentFragment with children set to " + format_value(argument));
|
| +
|
| + test(function() {
|
| + var df = document.createDocumentFragment();
|
| + var child = document.createElement("div");
|
| + df.appendChild(child);
|
| + child.appendChild(document.createComment(" abc "));
|
| + child.appendChild(document.createTextNode("\tDEF\t"));
|
| + child.appendChild(document.createProcessingInstruction("x", " ghi "));
|
| + df.textContent = argument;
|
| + check(df);
|
| + assert_equals(child.childNodes.length, 3, "Should not have changed the internal structure of the removed nodes.");
|
| + }, "DocumentFragment with descendants set to " + format_value(argument));
|
| +})
|
| +
|
| +// Text, ProcessingInstruction, Comment:
|
| +test(function() {
|
| + var text = document.createTextNode("abc");
|
| + text.textContent = "def";
|
| + assert_equals(text.textContent, "def");
|
| + assert_equals(text.data, "def");
|
| +}, "For a Text, textContent should set the data");
|
| +
|
| +test(function() {
|
| + var pi = document.createProcessingInstruction("x", "abc");
|
| + pi.textContent = "def";
|
| + assert_equals(pi.textContent, "def");
|
| + assert_equals(pi.data, "def");
|
| + assert_equals(pi.target, "x");
|
| +}, "For a ProcessingInstruction, textContent should set the data");
|
| +
|
| +test(function() {
|
| + var comment = document.createComment("abc");
|
| + comment.textContent = "def";
|
| + assert_equals(comment.textContent, "def");
|
| + assert_equals(comment.data, "def");
|
| +}, "For a Comment, textContent should set the data");
|
| +
|
| +// Any other node:
|
| +documents.forEach(function(argument) {
|
| + var doc = argument[0], creator = argument[1];
|
| + test(function() {
|
| + var root = doc.documentElement;
|
| + doc.textContent = "a";
|
| + assert_equals(doc.textContent, null);
|
| + assert_equals(doc.documentElement, root);
|
| + }, "For Documents created by " + creator + ", setting textContent should do nothing");
|
| +});
|
| +
|
| +doctypes.forEach(function(argument) {
|
| + var doctype = argument[0], creator = argument[1];
|
| + test(function() {
|
| + var props = {
|
| + name: doctype.name,
|
| + publicId: doctype.publicId,
|
| + systemId: doctype.systemId,
|
| + }
|
| + doctype.textContent = "b";
|
| + assert_equals(doctype.textContent, null);
|
| + assert_equals(doctype.name, props.name, "name should not change");
|
| + assert_equals(doctype.publicId, props.publicId, "publicId should not change");
|
| + assert_equals(doctype.systemId, props.systemId, "systemId should not change");
|
| + }, "For DocumentType created by " + creator + ", setting textContent should do nothing");
|
| +});
|
| +</script>
|
| +</body>
|
| +</html>
|
|
|