OLD | NEW |
| (Empty) |
1 <!DOCTYPE html> | |
2 <meta charset=utf-8> | |
3 <title>Node.textContent</title> | |
4 <script src="../../../../resources/testharness.js"></script> | |
5 <script src="../../../../resources/testharnessreport.js"></script> | |
6 <div id="log"></div> | |
7 <script> | |
8 // XXX mutation observers? | |
9 // XXX Range gravitation? | |
10 | |
11 var documents, doctypes; | |
12 setup(function() { | |
13 documents = [ | |
14 [document, "parser"], | |
15 [document.implementation.createDocument("", "test", null), "createDocument"]
, | |
16 [document.implementation.createHTMLDocument("title"), "createHTMLDocument"], | |
17 ] | |
18 doctypes = [ | |
19 [document.doctype, "parser"], | |
20 [document.implementation.createDocumentType("x", "", ""), "script"], | |
21 ] | |
22 }) | |
23 | |
24 // Getting | |
25 // DocumentFragment, Element: | |
26 test(function() { | |
27 var element = document.createElement("div") | |
28 assert_equals(element.textContent, "") | |
29 }, "For an empty Element, textContent should be the empty string") | |
30 | |
31 test(function() { | |
32 assert_equals(document.createDocumentFragment().textContent, "") | |
33 }, "For an empty DocumentFragment, textContent should be the empty string") | |
34 | |
35 test(function() { | |
36 var el = document.createElement("div") | |
37 el.appendChild(document.createComment(" abc ")) | |
38 el.appendChild(document.createTextNode("\tDEF\t")) | |
39 el.appendChild(document.createProcessingInstruction("x", " ghi ")) | |
40 assert_equals(el.textContent, "\tDEF\t") | |
41 }, "Element with children") | |
42 | |
43 test(function() { | |
44 var el = document.createElement("div") | |
45 var child = document.createElement("div") | |
46 el.appendChild(child) | |
47 child.appendChild(document.createComment(" abc ")) | |
48 child.appendChild(document.createTextNode("\tDEF\t")) | |
49 child.appendChild(document.createProcessingInstruction("x", " ghi ")) | |
50 assert_equals(el.textContent, "\tDEF\t") | |
51 }, "Element with descendants") | |
52 | |
53 test(function() { | |
54 var df = document.createDocumentFragment() | |
55 df.appendChild(document.createComment(" abc ")) | |
56 df.appendChild(document.createTextNode("\tDEF\t")) | |
57 df.appendChild(document.createProcessingInstruction("x", " ghi ")) | |
58 assert_equals(df.textContent, "\tDEF\t") | |
59 }, "DocumentFragment with children") | |
60 | |
61 test(function() { | |
62 var df = document.createDocumentFragment() | |
63 var child = document.createElement("div") | |
64 df.appendChild(child) | |
65 child.appendChild(document.createComment(" abc ")) | |
66 child.appendChild(document.createTextNode("\tDEF\t")) | |
67 child.appendChild(document.createProcessingInstruction("x", " ghi ")) | |
68 assert_equals(df.textContent, "\tDEF\t") | |
69 }, "DocumentFragment with descendants") | |
70 | |
71 // Text, ProcessingInstruction, Comment: | |
72 test(function() { | |
73 assert_equals(document.createTextNode("").textContent, "") | |
74 }, "For an empty Text, textContent should be the empty string") | |
75 | |
76 test(function() { | |
77 assert_equals(document.createProcessingInstruction("x", "").textContent, "") | |
78 }, "For an empty ProcessingInstruction, textContent should be the empty string") | |
79 | |
80 test(function() { | |
81 assert_equals(document.createComment("").textContent, "") | |
82 }, "For an empty Comment, textContent should be the empty string") | |
83 | |
84 test(function() { | |
85 assert_equals(document.createTextNode("abc").textContent, "abc") | |
86 }, "For a Text with data, textContent should be that data") | |
87 | |
88 test(function() { | |
89 assert_equals(document.createProcessingInstruction("x", "abc").textContent, | |
90 "abc") | |
91 }, "For a ProcessingInstruction with data, textContent should be that data") | |
92 | |
93 test(function() { | |
94 assert_equals(document.createComment("abc").textContent, "abc") | |
95 }, "For a Comment with data, textContent should be that data") | |
96 | |
97 // Any other node: | |
98 documents.forEach(function(argument) { | |
99 var doc = argument[0], creator = argument[1] | |
100 test(function() { | |
101 assert_equals(doc.textContent, null) | |
102 }, "For Documents created by " + creator + ", textContent should be null") | |
103 }) | |
104 | |
105 doctypes.forEach(function(argument) { | |
106 var doctype = argument[0], creator = argument[1] | |
107 test(function() { | |
108 assert_equals(doctype.textContent, null) | |
109 }, "For DocumentType created by " + creator + ", textContent should be null") | |
110 }) | |
111 | |
112 // Setting | |
113 // DocumentFragment, Element: | |
114 var arguments = [ | |
115 [null, null], | |
116 [undefined, null], | |
117 ["", null], | |
118 [42, "42"], | |
119 ["abc", "abc"], | |
120 ["<b>xyz<\/b>", "<b>xyz<\/b>"], | |
121 ["d\0e", "d\0e"] | |
122 // XXX unpaired surrogate? | |
123 ] | |
124 arguments.forEach(function(aValue) { | |
125 var argument = aValue[0], expectation = aValue[1] | |
126 var check = function(aElementOrDocumentFragment) { | |
127 if (expectation === null) { | |
128 assert_equals(aElementOrDocumentFragment.textContent, "") | |
129 assert_equals(aElementOrDocumentFragment.firstChild, null) | |
130 } else { | |
131 assert_equals(aElementOrDocumentFragment.textContent, expectation) | |
132 assert_equals(aElementOrDocumentFragment.childNodes.length, 1, | |
133 "Should have one child") | |
134 var firstChild = aElementOrDocumentFragment.firstChild | |
135 assert_true(firstChild instanceof Text, "child should be a Text") | |
136 assert_equals(firstChild.data, expectation) | |
137 } | |
138 } | |
139 | |
140 test(function() { | |
141 var el = document.createElement("div") | |
142 el.textContent = argument | |
143 check(el) | |
144 }, "Element without children set to " + format_value(argument)) | |
145 | |
146 test(function() { | |
147 var el = document.createElement("div") | |
148 var text = el.appendChild(document.createTextNode("")) | |
149 el.textContent = argument | |
150 check(el) | |
151 assert_equals(text.parentNode, null, | |
152 "Preexisting Text should have been removed") | |
153 }, "Element with empty text node as child set to " + format_value(argument)) | |
154 | |
155 test(function() { | |
156 var el = document.createElement("div") | |
157 el.appendChild(document.createComment(" abc ")) | |
158 el.appendChild(document.createTextNode("\tDEF\t")) | |
159 el.appendChild(document.createProcessingInstruction("x", " ghi ")) | |
160 el.textContent = argument | |
161 check(el) | |
162 }, "Element with children set to " + format_value(argument)) | |
163 | |
164 test(function() { | |
165 var el = document.createElement("div") | |
166 var child = document.createElement("div") | |
167 el.appendChild(child) | |
168 child.appendChild(document.createComment(" abc ")) | |
169 child.appendChild(document.createTextNode("\tDEF\t")) | |
170 child.appendChild(document.createProcessingInstruction("x", " ghi ")) | |
171 el.textContent = argument | |
172 check(el) | |
173 assert_equals(child.childNodes.length, 3, | |
174 "Should not have changed the internal structure of the removed
nodes.") | |
175 }, "Element with descendants set to " + format_value(argument)) | |
176 | |
177 test(function() { | |
178 var df = document.createDocumentFragment() | |
179 df.textContent = argument | |
180 check(df) | |
181 }, "DocumentFragment without children set to " + format_value(argument)) | |
182 | |
183 test(function() { | |
184 var df = document.createDocumentFragment() | |
185 var text = df.appendChild(document.createTextNode("")) | |
186 df.textContent = argument | |
187 check(df) | |
188 assert_equals(text.parentNode, null, | |
189 "Preexisting Text should have been removed") | |
190 }, "DocumentFragment with empty text node as child set to " + format_value(arg
ument)) | |
191 | |
192 test(function() { | |
193 var df = document.createDocumentFragment() | |
194 df.appendChild(document.createComment(" abc ")) | |
195 df.appendChild(document.createTextNode("\tDEF\t")) | |
196 df.appendChild(document.createProcessingInstruction("x", " ghi ")) | |
197 df.textContent = argument | |
198 check(df) | |
199 }, "DocumentFragment with children set to " + format_value(argument)) | |
200 | |
201 test(function() { | |
202 var df = document.createDocumentFragment() | |
203 var child = document.createElement("div") | |
204 df.appendChild(child) | |
205 child.appendChild(document.createComment(" abc ")) | |
206 child.appendChild(document.createTextNode("\tDEF\t")) | |
207 child.appendChild(document.createProcessingInstruction("x", " ghi ")) | |
208 df.textContent = argument | |
209 check(df) | |
210 assert_equals(child.childNodes.length, 3, | |
211 "Should not have changed the internal structure of the removed
nodes.") | |
212 }, "DocumentFragment with descendants set to " + format_value(argument)) | |
213 }) | |
214 | |
215 // Text, ProcessingInstruction, Comment: | |
216 test(function() { | |
217 var text = document.createTextNode("abc") | |
218 text.textContent = "def" | |
219 assert_equals(text.textContent, "def") | |
220 assert_equals(text.data, "def") | |
221 }, "For a Text, textContent should set the data") | |
222 | |
223 test(function() { | |
224 var pi = document.createProcessingInstruction("x", "abc") | |
225 pi.textContent = "def" | |
226 assert_equals(pi.textContent, "def") | |
227 assert_equals(pi.data, "def") | |
228 assert_equals(pi.target, "x") | |
229 }, "For a ProcessingInstruction, textContent should set the data") | |
230 | |
231 test(function() { | |
232 var comment = document.createComment("abc") | |
233 comment.textContent = "def" | |
234 assert_equals(comment.textContent, "def") | |
235 assert_equals(comment.data, "def") | |
236 }, "For a Comment, textContent should set the data") | |
237 | |
238 // Any other node: | |
239 documents.forEach(function(argument) { | |
240 var doc = argument[0], creator = argument[1] | |
241 test(function() { | |
242 var root = doc.documentElement | |
243 doc.textContent = "a" | |
244 assert_equals(doc.textContent, null) | |
245 assert_equals(doc.documentElement, root) | |
246 }, "For Documents created by " + creator + ", setting textContent should do no
thing") | |
247 }) | |
248 | |
249 doctypes.forEach(function(argument) { | |
250 var doctype = argument[0], creator = argument[1] | |
251 test(function() { | |
252 var props = { | |
253 name: doctype.name, | |
254 publicId: doctype.publicId, | |
255 systemId: doctype.systemId, | |
256 } | |
257 doctype.textContent = "b" | |
258 assert_equals(doctype.textContent, null) | |
259 assert_equals(doctype.name, props.name, "name should not change") | |
260 assert_equals(doctype.publicId, props.publicId, "publicId should not change"
) | |
261 assert_equals(doctype.systemId, props.systemId, "systemId should not change"
) | |
262 }, "For DocumentType created by " + creator + ", setting textContent should do
nothing") | |
263 }) | |
264 | |
265 </script> | |
OLD | NEW |