1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.htmlunit.javascript.host;
16
17 import org.htmlunit.WebDriverTestCase;
18 import org.htmlunit.javascript.host.xml.XMLDocumentTest;
19 import org.htmlunit.junit.annotation.Alerts;
20 import org.htmlunit.junit.annotation.HtmlUnitNYI;
21 import org.htmlunit.util.MimeType;
22 import org.junit.jupiter.api.Test;
23
24
25
26
27
28
29
30
31
32
33 public class ElementTest extends WebDriverTestCase {
34
35
36
37
38 @Test
39 @Alerts({"1", "attrName attrValue", "attrValue", "null", "anotherValue",
40 "1", "4", "<span id='label'>changed</span>"})
41 public void attributes() throws Exception {
42 final String html = DOCTYPE_HTML
43 + "<html><head><script>\n"
44 + LOG_TITLE_FUNCTION
45 + " function test() {\n"
46 + " var doc = " + XMLDocumentTest.callLoadXMLDocumentFromFile("'foo.xml'") + ";\n"
47 + " var attributes = doc.documentElement.attributes;\n"
48 + " log(attributes.length);\n"
49 + " log(attributes[0].name + ' ' + attributes[0].value);\n"
50 + " var root = doc.documentElement;\n"
51 + " log(root.getAttribute('attrName'));\n"
52 + " log(root.getAttribute('notExisting'));\n"
53 + " root.setAttribute('attrName', 'anotherValue');\n"
54 + " log(root.getAttribute('attrName'));\n"
55 + " log(root.getElementsByTagName('book').length);\n"
56 + " var description = root.getElementsByTagName('description')[0];\n"
57 + " log(description.firstChild.nodeType);\n"
58 + " log(description.firstChild.nodeValue);\n"
59 + " }\n"
60 + XMLDocumentTest.LOAD_XML_DOCUMENT_FROM_FILE_FUNCTION
61 + "</script></head><body onload='test()'>\n"
62 + "</body></html>";
63
64 final String xml
65 = "<books attrName=\"attrValue\">\n"
66 + " <book>\n"
67 + " <title>Immortality</title>\n"
68 + " <author>John Smith</author>\n"
69 + " <description><![CDATA[<span id='label'>changed</span>]]></description>\n"
70 + " </book>\n"
71 + "</books>";
72
73 getMockWebConnection().setDefaultResponse(xml, MimeType.TEXT_XML);
74 loadPageVerifyTitle2(html);
75 }
76
77
78
79
80 @Test
81 @Alerts("TypeError")
82 public void selectNodes() throws Exception {
83 final String html = DOCTYPE_HTML
84 + "<html><head><script>\n"
85 + LOG_TITLE_FUNCTION
86 + " function test() {\n"
87 + " var doc = " + XMLDocumentTest.callLoadXMLDocumentFromFile("'" + URL_SECOND + "'") + ";\n"
88 + " try {\n"
89 + " var nodes = doc.documentElement.selectNodes('//title');\n"
90 + " log(nodes.length);\n"
91 + " log(nodes[0].tagName);\n"
92 + " } catch(e) { logEx(e); }\n"
93 + " }\n"
94 + XMLDocumentTest.LOAD_XML_DOCUMENT_FROM_FILE_FUNCTION
95 + "</script></head><body onload='test()'>\n"
96 + "</body></html>";
97
98 final String xml
99 = "<books>\n"
100 + " <book>\n"
101 + " <title>Immortality</title>\n"
102 + " <author>John Smith</author>\n"
103 + " </book>\n"
104 + "</books>";
105
106 getMockWebConnection().setDefaultResponse(xml, MimeType.TEXT_XML);
107 loadPageVerifyTitle2(html);
108 }
109
110
111
112
113 @Test
114 @Alerts({"2", "1"})
115 public void removeChild() throws Exception {
116 final String html = DOCTYPE_HTML
117 + "<html><head><script>\n"
118 + LOG_TITLE_FUNCTION
119 + " function test() {\n"
120 + " var doc = " + XMLDocumentTest.callLoadXMLDocumentFromFile("'" + URL_SECOND + "'") + ";\n"
121 + " var parent = doc.documentElement.firstChild;\n"
122 + " log(parent.childNodes.length);\n"
123 + " parent.removeChild(parent.firstChild);\n"
124 + " log(parent.childNodes.length);\n"
125 + " }\n"
126 + XMLDocumentTest.LOAD_XML_DOCUMENT_FROM_FILE_FUNCTION
127 + "</script></head><body onload='test()'>\n"
128 + "</body></html>";
129
130 final String xml = "<books><book><title>Immortality</title><author>John Smith</author></book></books>";
131
132 getMockWebConnection().setDefaultResponse(xml, MimeType.TEXT_XML);
133 loadPageVerifyTitle2(html);
134 }
135
136
137
138
139 @Test
140 @Alerts({"lbl_SettingName", "outerHTML", "undefined"})
141 public void getAttributeNode() throws Exception {
142 final String html = DOCTYPE_HTML
143 + "<html><head><script>\n"
144 + LOG_TITLE_FUNCTION
145 + " function test() {\n"
146 + " var doc = " + XMLDocumentTest.callLoadXMLDocumentFromFile("'" + URL_SECOND + "'") + ";\n"
147 + " parseXML(doc);\n"
148 + " }\n"
149 + " function parseXML(xml) {\n"
150 + " if (xml.documentElement.hasChildNodes()) {\n"
151 + " for (var i = 0; i < xml.documentElement.childNodes.length; i++) {\n"
152 + " var elem = xml.documentElement.childNodes.item(i);\n"
153 + " if (elem.nodeName == 'control') {\n"
154 + " var target = elem.getAttributeNode('id').value;\n"
155 + " if(document.all(target) != null) {\n"
156 + " for (var j = 0; j < elem.childNodes.length; j++) {\n"
157 + " var node = elem.childNodes.item(j);\n"
158 + " if (node.nodeName == 'tag') {\n"
159 + " var type = node.getAttributeNode('type').value;\n"
160 + " log(target);\n"
161 + " log(type);\n"
162 + " log(node.text);\n"
163 + " eval('document.all(\"' + target + '\").' + type + '=\"' + node.text + '\"');\n"
164 + " }\n"
165 + " }\n"
166 + " }\n"
167 + " }\n"
168 + " }\n"
169 + " }\n"
170 + " }\n"
171 + XMLDocumentTest.LOAD_XML_DOCUMENT_FROM_FILE_FUNCTION
172 + "</script></head><body onload='test()'>\n"
173 + " <div id='lbl_SettingName'/>\n"
174 + "</body></html>";
175
176 final String xml
177 = "<responsexml>\n"
178 + " <control id='lbl_SettingName'>\n"
179 + " <tag type='outerHTML'><span id='lbl_SettingName' class='lbl-white-001'>Item</span></tag>\n"
180 + " </control>\n"
181 + "</responsexml>";
182
183 getMockWebConnection().setDefaultResponse(xml, MimeType.TEXT_XML);
184 loadPageVerifyTitle2(html);
185 }
186
187
188
189
190 @Test
191 @Alerts({"book", "TypeError"})
192 public void selectNode_root() throws Exception {
193 final String html = DOCTYPE_HTML
194 + "<html><head><script>\n"
195 + LOG_TITLE_FUNCTION
196 + " function test() {\n"
197 + " var doc = " + XMLDocumentTest.callLoadXMLDocumentFromFile("'" + URL_SECOND + "'") + ";\n"
198 + " var child = doc.documentElement.firstChild;\n"
199 + " log(child.tagName);\n"
200 + " try {\n"
201 + " log(child.selectNodes('/title').length);\n"
202 + " log(child.selectNodes('title').length);\n"
203 + " } catch(e) { logEx(e); }\n"
204 + " }\n"
205 + XMLDocumentTest.LOAD_XML_DOCUMENT_FROM_FILE_FUNCTION
206 + "</script></head><body onload='test()'>\n"
207 + "</body></html>";
208
209 final String xml = "<books><book><title>Immortality</title><author>John Smith</author></book></books>";
210
211 getMockWebConnection().setDefaultResponse(xml, MimeType.TEXT_XML);
212 loadPageVerifyTitle2(html);
213 }
214
215
216
217
218 @Test
219 @Alerts({"1", "1"})
220 public void getElementsByTagNameNS() throws Exception {
221 final String html = DOCTYPE_HTML
222 + "<html><head><script>\n"
223 + LOG_TITLE_FUNCTION
224 + " function test() {\n"
225 + " var text='<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\\n';\n"
226 + " text += '<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://myNS\">\\n';\n"
227 + " text += ' <xsl:template match=\"/\">\\n';\n"
228 + " text += ' <html>\\n';\n"
229 + " text += ' <body>\\n';\n"
230 + " text += ' </body>\\n';\n"
231 + " text += ' </html>\\n';\n"
232 + " text += ' </xsl:template>\\n';\n"
233 + " text += '</xsl:stylesheet>';\n"
234 + " var doc = " + XMLDocumentTest.callLoadXMLDocumentFromString("text") + ";\n"
235 + " try {\n"
236 + " log(doc.documentElement.getElementsByTagNameNS('http://myNS', 'template').length);\n"
237 + " log(doc.documentElement.getElementsByTagNameNS(null, 'html').length);\n"
238 + " } catch(e) { logEx(e); }\n"
239 + " }\n"
240 + XMLDocumentTest.LOAD_XML_DOCUMENT_FROM_STRING_FUNCTION
241 + "</script></head><body onload='test()'>\n"
242 + "</body></html>";
243
244 loadPageVerifyTitle2(html);
245 }
246
247
248
249
250 @Test
251 @Alerts({"1", "2", "3"})
252 public void getElementsByTagNameNSAsterisk() throws Exception {
253 final String html = DOCTYPE_HTML
254 + "<html><head><script>\n"
255 + LOG_TITLE_FUNCTION
256 + " function test() {\n"
257 + " var text='<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\\n';\n"
258 + " text += '<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://myNS\">\\n';\n"
259 + " text += ' <xsl:template match=\"/\">\\n';\n"
260 + " text += ' <html>\\n';\n"
261 + " text += ' <body>\\n';\n"
262 + " text += ' </body>\\n';\n"
263 + " text += ' </html>\\n';\n"
264 + " text += ' </xsl:template>\\n';\n"
265 + " text += '</xsl:stylesheet>';\n"
266 + " var doc = " + XMLDocumentTest.callLoadXMLDocumentFromString("text") + ";\n"
267 + " try {\n"
268 + " log(doc.documentElement.getElementsByTagNameNS('http://myNS', '*').length);\n"
269 + " log(doc.documentElement.getElementsByTagNameNS(null, '*').length);\n"
270 + " log(doc.documentElement.getElementsByTagNameNS('*', '*').length);\n"
271 + " } catch(e) { logEx(e); }\n"
272 + " }\n"
273 + XMLDocumentTest.LOAD_XML_DOCUMENT_FROM_STRING_FUNCTION
274 + "</script></head><body onload='test()'>\n"
275 + "</body></html>";
276
277 loadPageVerifyTitle2(html);
278 }
279
280
281
282
283 @Test
284 @Alerts({"2", "<nested>Three</nested>", "Four", "1", "Two", "0", "0"})
285 public void getElementsByTagNameXml() throws Exception {
286 final String html = DOCTYPE_HTML
287 + "<html><head>\n"
288 + "<meta http-equiv='X-UA-Compatible' content='IE=edge'>\n"
289 + "</head><body>\n"
290 + "<script>\n"
291 + LOG_TITLE_FUNCTION
292 + " var xmlString = [\n"
293 + " '<ResultSet>',\n"
294 + " '<Result>One</Result>',\n"
295 + " '<RESULT>Two</RESULT>',\n"
296 + " '<result><nested>Three</nested></result>',\n"
297 + " '<result>Four</result>',\n"
298 + " '</ResultSet>'\n"
299 + " ].join('');\n"
300 + " var parser = new DOMParser();\n"
301 + " xml = parser.parseFromString(xmlString, 'text/xml');\n"
302 + " var xmlDoc = parser.parseFromString(xmlString, 'text/xml');\n"
303 + " var de = xmlDoc.documentElement;\n"
304 + " try {\n"
305
306 + " var res = de.getElementsByTagName('result');\n"
307 + " log(res.length);\n"
308 + " log(res[0].innerHTML);\n"
309 + " log(res[1].innerHTML);\n"
310
311 + " res = de.getElementsByTagName('RESULT');\n"
312 + " log(res.length);\n"
313 + " log(res[0].innerHTML);\n"
314
315 + " res = de.getElementsByTagName('resulT');\n"
316 + " log(res.length);\n"
317
318 + " res = de.getElementsByTagName('rEsulT');\n"
319 + " log(res.length);\n"
320 + " } catch(e) { logEx(e); }\n"
321 + "</script></body></html>";
322
323 loadPageVerifyTitle2(html);
324 }
325
326
327
328
329 @Test
330 @Alerts("false")
331 public void hasAttribute() throws Exception {
332 final String html = DOCTYPE_HTML
333 + "<html><head><script>\n"
334 + LOG_TITLE_FUNCTION
335 + " function test() {\n"
336 + " var doc = " + XMLDocumentTest.callLoadXMLDocumentFromFile("'foo.xml'") + ";\n"
337 + " if (!doc.documentElement.hasAttribute) { log('hasAttribute not available'); return }\n"
338 + " log(doc.documentElement.hasAttribute('something'));\n"
339 + " }\n"
340 + XMLDocumentTest.LOAD_XML_DOCUMENT_FROM_FILE_FUNCTION
341 + "</script></head><body onload='test()'>\n"
342 + "</body></html>";
343
344 final String xml
345 = "<books>\n"
346 + " <book>\n"
347 + " <title>Immortality</title>\n"
348 + " <author>John Smith</author>\n"
349 + " </book>\n"
350 + "</books>";
351
352 getMockWebConnection().setDefaultResponse(xml, MimeType.TEXT_XML);
353 loadPageVerifyTitle2(html);
354 }
355
356
357
358
359 @Test
360 @Alerts("true")
361 public void attributes2() throws Exception {
362 final String html = DOCTYPE_HTML
363 + "<html><head><script>\n"
364 + LOG_TITLE_FUNCTION
365 + " function test() {\n"
366 + " var doc = " + XMLDocumentTest.callLoadXMLDocumentFromFile("'foo.xml'") + ";\n"
367 + " log(doc.documentElement.attributes.getNamedItem('library') != undefined);\n"
368 + " }\n"
369 + XMLDocumentTest.LOAD_XML_DOCUMENT_FROM_FILE_FUNCTION
370 + "</script></head><body onload='test()'>\n"
371 + "</body></html>";
372
373 final String xml
374 = "<books library=\"Hope\">\n"
375 + " <book>\n"
376 + " <title>Immortality</title>\n"
377 + " <author>John Smith</author>\n"
378 + " </book>\n"
379 + "</books>";
380
381 getMockWebConnection().setDefaultResponse(xml, MimeType.TEXT_XML);
382 loadPageVerifyTitle2(html);
383 }
384
385
386
387
388 @Test
389 @Alerts({"undefined", "undefined"})
390 public void xml() throws Exception {
391 final String html = DOCTYPE_HTML
392 + "<html><head><script>\n"
393 + LOG_TITLE_FUNCTION
394 + "function test() {\n"
395 + " var text = '<a><b c=\"d\">e</b></a>';\n"
396 + " var doc = " + XMLDocumentTest.callLoadXMLDocumentFromString("text") + ";\n"
397 + " log(doc.xml);\n"
398 + " log(doc.documentElement.xml);\n"
399 + "}\n"
400 + XMLDocumentTest.LOAD_XML_DOCUMENT_FROM_STRING_FUNCTION
401 + "</script></head><body onload='test()'>\n"
402 + "</body></html>";
403
404 loadPageVerifyTitle2(html);
405 }
406
407
408
409
410 @Test
411 @Alerts({"[object HTMLDivElement],DIV",
412 "[object HTMLUnknownElement],APP:DIV",
413 "[object Element],app:dIv",
414 "[object HTMLDivElement],DIV",
415 "[object HTMLUnknownElement],APP:DIV"})
416 public void html_nodeName() throws Exception {
417 html("nodeName");
418 }
419
420
421
422
423 @Test
424 @Alerts({"[object HTMLDivElement],DIV",
425 "[object HTMLUnknownElement],APP:DIV",
426 "[object Element],app:dIv",
427 "[object HTMLDivElement],DIV",
428 "[object HTMLUnknownElement],APP:DIV"})
429 public void html_tagName() throws Exception {
430 html("tagName");
431 }
432
433
434
435
436 @Test
437 @Alerts({"[object HTMLDivElement],null",
438 "[object HTMLUnknownElement],null",
439 "[object Element],app",
440 "[object HTMLDivElement],null",
441 "[object HTMLUnknownElement],null"})
442 public void html_prefix() throws Exception {
443 html("prefix");
444 }
445
446
447
448
449 @Test
450 @Alerts({"[object HTMLDivElement],div",
451 "[object HTMLUnknownElement],app:div",
452 "[object Element],dIv",
453 "[object HTMLDivElement],div",
454 "[object HTMLUnknownElement],app:div"})
455 public void html_localName() throws Exception {
456 html("localName");
457 }
458
459
460
461
462 @Test
463 @Alerts({"[object HTMLDivElement],undefined",
464 "[object HTMLUnknownElement],undefined",
465 "[object Element],undefined",
466 "[object HTMLDivElement],undefined",
467 "[object HTMLUnknownElement],undefined"})
468 public void html_baseName() throws Exception {
469 html("baseName");
470 }
471
472
473
474
475 @Test
476 @Alerts({"[object HTMLDivElement],http://www.w3.org/1999/xhtml",
477 "[object HTMLUnknownElement],http://www.w3.org/1999/xhtml",
478 "[object Element],http://www.appcelerator.org",
479 "[object HTMLDivElement],http://www.w3.org/1999/xhtml",
480 "[object HTMLUnknownElement],http://www.w3.org/1999/xhtml"})
481 public void html_namespaceURI() throws Exception {
482 html("namespaceURI");
483 }
484
485 private void html(final String methodName) throws Exception {
486 final String html = DOCTYPE_HTML
487 + "<html>\n"
488 + "<script>\n"
489 + LOG_TITLE_FUNCTION
490 + " function test() {\n"
491 + " debug(document.createElement('dIv'));\n"
492 + " debug(document.createElement('app:dIv'));\n"
493 + " debug(document.createElementNS('http://www.appcelerator.org', 'app:dIv'));\n"
494 + " debug(document.getElementById('dIv1'));\n"
495 + " debug(document.getElementById('dIv2'));\n"
496 + " }\n"
497 + " function debug(e) {\n"
498 + " log(e + ',' + e." + methodName + ");\n"
499 + " }\n"
500 + "</script>\n"
501 + "</head>\n"
502 + "<body onload='test()'>\n"
503 + "<dIv id='dIv1'></dIv>\n"
504 + "<app:dIv id='dIv2'>log(2)</app:dIv>\n"
505 + "</body></html>";
506
507 loadPageVerifyTitle2(html);
508 }
509
510
511
512
513 @Test
514 @Alerts({"[object HTMLDivElement],DIV",
515 "[object HTMLUnknownElement],APP:DIV",
516 "[object HTMLUnknownElement],ANOTHER:DIV",
517 "[object Element],app:dIv",
518 "[object HTMLDivElement],DIV",
519 "[object HTMLUnknownElement],APP:DIV",
520 "[object HTMLUnknownElement],ANOTHER:DIV"})
521 public void namespace_nodeName() throws Exception {
522 namespace("nodeName");
523 }
524
525
526
527
528 @Test
529 @Alerts({"[object HTMLDivElement],DIV",
530 "[object HTMLUnknownElement],APP:DIV",
531 "[object HTMLUnknownElement],ANOTHER:DIV",
532 "[object Element],app:dIv",
533 "[object HTMLDivElement],DIV",
534 "[object HTMLUnknownElement],APP:DIV",
535 "[object HTMLUnknownElement],ANOTHER:DIV"})
536 public void namespace_tagName() throws Exception {
537 namespace("tagName");
538 }
539
540
541
542
543 @Test
544 @Alerts({"[object HTMLDivElement],null",
545 "[object HTMLUnknownElement],null",
546 "[object HTMLUnknownElement],null",
547 "[object Element],app",
548 "[object HTMLDivElement],null",
549 "[object HTMLUnknownElement],null",
550 "[object HTMLUnknownElement],null"})
551 public void namespace_prefix() throws Exception {
552 namespace("prefix");
553 }
554
555
556
557
558 @Test
559 @Alerts({"[object HTMLDivElement],div",
560 "[object HTMLUnknownElement],app:div",
561 "[object HTMLUnknownElement],another:div",
562 "[object Element],dIv",
563 "[object HTMLDivElement],div",
564 "[object HTMLUnknownElement],app:div",
565 "[object HTMLUnknownElement],another:div"})
566 public void namespace_localName() throws Exception {
567 namespace("localName");
568 }
569
570
571
572
573 @Test
574 @Alerts({"[object HTMLDivElement],http://www.w3.org/1999/xhtml",
575 "[object HTMLUnknownElement],http://www.w3.org/1999/xhtml",
576 "[object HTMLUnknownElement],http://www.w3.org/1999/xhtml",
577 "[object Element],http://www.appcelerator.org",
578 "[object HTMLDivElement],http://www.w3.org/1999/xhtml",
579 "[object HTMLUnknownElement],http://www.w3.org/1999/xhtml",
580 "[object HTMLUnknownElement],http://www.w3.org/1999/xhtml"})
581 public void namespace_namespaceURI() throws Exception {
582 namespace("namespaceURI");
583 }
584
585 private void namespace(final String methodName) throws Exception {
586 final String html
587 = "<html xmlns='http://www.w3.org/1999/xhtml' xmlns:app='http://www.appcelerator.org'>\n"
588 + "<script>\n"
589 + LOG_TITLE_FUNCTION
590 + " function test() {\n"
591 + " debug(document.createElement('dIv'));\n"
592 + " debug(document.createElement('app:dIv'));\n"
593 + " debug(document.createElement('another:dIv'));\n"
594 + " debug(document.createElementNS('http://www.appcelerator.org', 'app:dIv'));\n"
595 + " debug(document.getElementById('dIv1'));\n"
596 + " debug(document.getElementById('dIv2'));\n"
597 + " debug(document.getElementById('dIv3'));\n"
598 + " }\n"
599 + " function debug(e) {\n"
600 + " log(e + ',' + e." + methodName + ");\n"
601 + " }\n"
602 + "</script>\n"
603 + "</head>\n"
604 + "<body onload='test()'>\n"
605 + "<dIv id='dIv1'></dIv>\n"
606 + "<app:dIv id='dIv2'></app:dIv>\n"
607 + "<another:dIv id='dIv3'></another:dIv>\n"
608 + "</body></html>";
609
610 loadPageVerifyTitle2(html);
611 }
612
613
614
615
616 @Test
617 @Alerts({"[object Element]", "dIv",
618 "[object HTMLHtmlElement]", "html",
619 "[object HTMLDivElement]", "div",
620 "[object HTMLUnknownElement]", "dIv"})
621 public void xml_nodeName() throws Exception {
622 xml("nodeName");
623 }
624
625
626
627
628 @Test
629 @Alerts({"[object Element]", "dIv",
630 "[object HTMLHtmlElement]", "html",
631 "[object HTMLDivElement]", "div",
632 "[object HTMLUnknownElement]", "dIv"})
633 public void xml_tagName() throws Exception {
634 xml("tagName");
635 }
636
637
638
639
640 @Test
641 @Alerts({"[object Element]", "null",
642 "[object HTMLHtmlElement]", "null",
643 "[object HTMLDivElement]", "null",
644 "[object HTMLUnknownElement]", "null"})
645 public void xml_prefix() throws Exception {
646 xml("prefix");
647 }
648
649
650
651
652 @Test
653 @Alerts({"[object Element]", "dIv",
654 "[object HTMLHtmlElement]", "html",
655 "[object HTMLDivElement]", "div",
656 "[object HTMLUnknownElement]", "dIv"})
657 public void xml_localName() throws Exception {
658 xml("localName");
659 }
660
661
662
663
664 @Test
665 @Alerts({"[object Element]", "undefined",
666 "[object HTMLHtmlElement]", "undefined",
667 "[object HTMLDivElement]", "undefined",
668 "[object HTMLUnknownElement]", "undefined"})
669 public void xml_baseName() throws Exception {
670 xml("baseName");
671 }
672
673
674
675
676 @Test
677 @Alerts({"[object Element]", "null",
678 "[object HTMLHtmlElement]", "http://www.w3.org/1999/xhtml",
679 "[object HTMLDivElement]", "http://www.w3.org/1999/xhtml",
680 "[object HTMLUnknownElement]", "http://www.w3.org/1999/xhtml"})
681 public void xml_namespaceURI() throws Exception {
682 xml("namespaceURI");
683 }
684
685 private void xml(final String methodName) throws Exception {
686 final String html = DOCTYPE_HTML
687 + "<html>\n"
688 + " <head>\n"
689 + " <script>\n"
690 + LOG_TITLE_FUNCTION
691 + " function test() {\n"
692 + " var doc = " + XMLDocumentTest.callLoadXMLDocumentFromFile("'foo.xml'") + ";\n"
693 + " debug(doc.documentElement.childNodes[0]);\n"
694 + " debug(doc.documentElement.childNodes[1]);\n"
695 + " debug(doc.documentElement.childNodes[1].childNodes[0]);\n"
696 + " debug(doc.documentElement.childNodes[1].childNodes[1]);\n"
697 + " }\n"
698 + " function debug(e) {\n"
699 + " try {\n"
700 + " log(e);\n"
701 + " } catch(ex) {log(ex)}\n"
702 + " log(e." + methodName + ");\n"
703 + " }\n"
704 + XMLDocumentTest.LOAD_XML_DOCUMENT_FROM_FILE_FUNCTION
705 + " </script>\n"
706 + " </head>\n"
707 + " <body onload='test()'>\n"
708 + " </body>\n"
709 + "</html>";
710
711 final String xml =
712 "<xml>"
713 + "<dIv></dIv>"
714 + "<html xmlns='http://www.w3.org/1999/xhtml'>"
715 + "<div></div>"
716 + "<dIv></dIv>"
717 + "</html>"
718 + "</xml>";
719
720 getMockWebConnection().setDefaultResponse(xml, MimeType.TEXT_XML);
721 loadPageVerifyTitle2(html);
722 }
723
724
725
726
727 @Test
728 @Alerts({"prototype found", ""
729 + "ELEMENT_NODE, ATTRIBUTE_NODE, TEXT_NODE, CDATA_SECTION_NODE, ENTITY_REFERENCE_NODE, "
730 + "ENTITY_NODE, PROCESSING_INSTRUCTION_NODE, COMMENT_NODE, DOCUMENT_NODE, DOCUMENT_TYPE_NODE, "
731 + "DOCUMENT_FRAGMENT_NODE, NOTATION_NODE, DOCUMENT_POSITION_DISCONNECTED, "
732 + "DOCUMENT_POSITION_PRECEDING, "
733 + "DOCUMENT_POSITION_FOLLOWING, DOCUMENT_POSITION_CONTAINS, DOCUMENT_POSITION_CONTAINED_BY, "
734 + "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC, "})
735 public void enumeratedProperties() throws Exception {
736 final String html = DOCTYPE_HTML
737 + "<html><head>\n"
738 + "<script>\n"
739 + LOG_TITLE_FUNCTION
740 + " function test() {\n"
741 + " var str = '';\n"
742 + " try {\n"
743 + " log(Element.prototype ? 'prototype found' : 'prototype not found');\n"
744 + " var str = '';\n"
745 + " for (var i in Element)\n"
746 + " str += i + ', ';\n"
747 + " log(str);\n"
748 + " } catch(e) { log('exception occured')}\n"
749 + " }\n"
750 + "</script>\n"
751 + "</head>\n"
752 + "<body onload='test()'>\n"
753 + "</body></html>";
754
755 loadPageVerifyTitle2(html);
756 }
757
758
759
760
761 @Test
762 @Alerts("finished")
763 public void removeAttribute() throws Exception {
764 final String html = DOCTYPE_HTML
765 + "<html>\n"
766 + " <head>\n"
767 + " <script>\n"
768 + LOG_TITLE_FUNCTION
769 + " function test() {\n"
770 + " var doc = " + XMLDocumentTest.callLoadXMLDocumentFromFile("'foo.xml'") + ";\n"
771 + " var e = doc.getElementsByTagName('title');\n"
772 + " e[0].removeAttribute('hello');\n"
773 + " log('finished');\n"
774 + " }\n"
775 + XMLDocumentTest.LOAD_XML_DOCUMENT_FROM_FILE_FUNCTION
776 + " </script>\n"
777 + " </head>\n"
778 + " <body onload='test()'>\n"
779 + " </body>\n"
780 + "</html>";
781
782 final String xml
783 = "<books>\n"
784 + " <book>\n"
785 + " <title>Immortality</title>\n"
786 + " <author>John Smith</author>\n"
787 + " </book>\n"
788 + "</books>";
789
790 getMockWebConnection().setDefaultResponse(xml, MimeType.TEXT_XML);
791 loadPageVerifyTitle2(html);
792 }
793
794
795
796
797 @Test
798 @Alerts("function")
799 public void getBoundingClientRect() throws Exception {
800 final String html = DOCTYPE_HTML
801 + "<html><body><script>\n"
802 + LOG_TITLE_FUNCTION
803 + "try {\n"
804 + " log(typeof Element.prototype.getBoundingClientRect);\n"
805 + "} catch(e) { logEx(e);}\n"
806 + "</script></body></html>";
807 loadPageVerifyTitle2(html);
808 }
809
810
811
812
813 @Test
814 @Alerts("0")
815 public void commentIsElement() throws Exception {
816 final String html = DOCTYPE_HTML
817 + "<html><body>\n"
818 + "<div id='myId'><!-- --></div>\n"
819 + "<script>\n"
820 + LOG_TITLE_FUNCTION
821 + " log(myId.getElementsByTagName('*').length);\n"
822 + "</script></body></html>";
823 loadPageVerifyTitle2(html);
824 }
825
826
827
828
829
830
831
832 @Test
833 @Alerts("undefined")
834 public void nodeHasUndefinedInnerText() throws Exception {
835 final String html = DOCTYPE_HTML
836 + "<html><head>\n"
837 + "<script>\n"
838 + LOG_TITLE_FUNCTION
839 + " function test() {\n"
840 + " var data = \"<?xml version='1.0' encoding='UTF-8'?>\\\n"
841 + " <dashboard> \\\n"
842 + " <locations class='foo'> \\\n"
843 + " <location for='bar' checked='different'> \\\n"
844 + " <infowindowtab normal='ab' mixedCase='yes'> \\\n"
845 + " <tab title='Location'><![CDATA[blabla]]></tab> \\\n"
846 + " <tab title='Users'><![CDATA[blublu]]></tab> \\\n"
847 + " </infowindowtab> \\\n"
848 + " </location> \\\n"
849 + " </locations> \\\n"
850 + " </dashboard>\";\n"
851 + " var xml, tmp;\n"
852 + " try {\n"
853 + " tmp = new DOMParser();\n"
854 + " xml = tmp.parseFromString(data, 'text/xml');\n"
855 + " } catch(e) {\n"
856 + " xml = undefined;\n"
857 + " }\n"
858 + "\n"
859 + " log(xml.getElementsByTagName('tab')[0].innerText);\n"
860 + " }\n"
861 + "</script>\n"
862 + "</head>\n"
863 + "<body onload='test()'/></html>";
864
865 loadPageVerifyTitle2(html);
866 }
867
868
869
870
871 @Test
872 @Alerts({"3", "first", "third", "second", "second"})
873 public void firstElementChild() throws Exception {
874 final String html = DOCTYPE_HTML
875 + "<html><head>\n"
876 + "<script>\n"
877 + LOG_TITLE_FUNCTION
878 + " function test() {\n"
879 + " var e = document.getElementById('myDiv');\n"
880 + " if (e.firstElementChild) {\n"
881 + " log(e.childElementCount);\n"
882 + " log(e.firstElementChild.id);\n"
883 + " log(e.lastElementChild.id);\n"
884 + " log(e.firstElementChild.nextElementSibling.id);\n"
885 + " log(e.lastElementChild.previousElementSibling.id);\n"
886 + " }\n"
887 + " }\n"
888 + "</script>\n"
889 + "</head>\n"
890 + "<body onload='test()'>\n"
891 + " <div id='myDiv'>\n"
892 + " <input id='first' type='button' value='someValue'>\n"
893 + " <br id='second'/>\n"
894 + " <input id='third' type=button' value='something'>\n"
895 + " </div>\n"
896 + "</body></html>";
897
898 loadPageVerifyTitle2(html);
899 }
900
901
902
903
904 @Test
905 @Alerts({"0", "null", "null"})
906 public void firstElementChildTextNode() throws Exception {
907 final String html
908 = "<html><head>\n"
909 + "<script>\n"
910 + LOG_TITLE_FUNCTION
911 + " function test() {\n"
912 + " var e = document.getElementById('myDiv');\n"
913 + " if (e.childElementCount !== undefined) {\n"
914 + " log(e.childElementCount);\n"
915 + " log(e.firstElementChild);\n"
916 + " log(e.lastElementChild);\n"
917 + " }\n"
918 + " }\n"
919 + "</script>\n"
920 + "</head>\n"
921 + "<body onload='test()'>\n"
922 + " <div id='myDiv'>HtmlUnit</div>\n"
923 + "</body></html>";
924
925 loadPageVerifyTitle2(html);
926 }
927
928
929
930
931 @Test
932 @Alerts({"§§URL§§", "§§URL§§"})
933 public void baseURI() throws Exception {
934 final String html = DOCTYPE_HTML
935 + "<html><head>\n"
936 + "<script>\n"
937 + LOG_TITLE_FUNCTION
938 + "function test() {\n"
939 + " var text = '<hello><child></child></hello>';\n"
940 + " var doc = " + XMLDocumentTest.callLoadXMLDocumentFromString("text") + ";\n"
941 + " var e = doc.documentElement.firstChild;\n"
942 + " log(e.baseURI);\n"
943 + "\n"
944 + " e = document.getElementById('myId');\n"
945 + " log(e.baseURI);\n"
946 + "}\n"
947 + XMLDocumentTest.LOAD_XML_DOCUMENT_FROM_STRING_FUNCTION
948 + "</script></head><body onload='test()'>\n"
949 + " <div id='myId'>abcd</div>\n"
950 + "</body></html>";
951
952 expandExpectedAlertsVariables(URL_FIRST);
953 loadPageVerifyTitle2(html);
954 }
955
956
957
958
959 @Test
960 @Alerts({"[object HTMLCollection] 1", "[object HTMLCollection] 2", "[object HTMLCollection] 0"})
961 public void children() throws Exception {
962 final String html = DOCTYPE_HTML
963 + "<html><head><script>\n"
964 + LOG_TITLE_FUNCTION
965 + "function test() {\n"
966 + " var text = '<hello><child></child></hello>';\n"
967 + " var doc = " + XMLDocumentTest.callLoadXMLDocumentFromString("text") + ";\n"
968
969 + " try {\n"
970 + " var children = doc.documentElement.children;\n"
971 + " log(children + ' ' + children.length);\n"
972 + " } catch(e) { logEx(e); }\n"
973
974 + " try {\n"
975 + " children = document.documentElement.children;\n"
976 + " log(children + ' ' + children.length);\n"
977 + " } catch(e) { logEx(e); }\n"
978
979 + " try {\n"
980 + " children = document.getElementById('myId').children;\n"
981 + " log(children + ' ' + children.length);\n"
982 + " } catch(e) { logEx(e); }\n"
983 + "}\n"
984 + XMLDocumentTest.LOAD_XML_DOCUMENT_FROM_STRING_FUNCTION
985 + "</script></head><body onload='test()'>\n"
986 + " <div id='myId'>abcd</div>\n"
987 + "</body></html>";
988
989 loadPageVerifyTitle2(html);
990 }
991
992
993
994
995 @Test
996 @Alerts({"", "a b c"})
997 public void classList() throws Exception {
998 final String html = DOCTYPE_HTML
999 + "<html><head><script>\n"
1000 + LOG_TITLE_FUNCTION
1001 + "function test() {\n"
1002 + " var text = '<hello><child></child></hello>';\n"
1003 + " var doc = " + XMLDocumentTest.callLoadXMLDocumentFromString("text") + ";\n"
1004 + " log(doc.documentElement.classList);\n"
1005 + " log(document.body.classList);\n"
1006 + "}\n"
1007 + XMLDocumentTest.LOAD_XML_DOCUMENT_FROM_STRING_FUNCTION
1008 + "</script></head><body onload='test()' class='a b c'>\n"
1009 + " <div id='myId'>abcd</div>\n"
1010 + "</body></html>";
1011
1012 loadPageVerifyTitle2(html);
1013 }
1014
1015
1016
1017
1018
1019
1020 @Test
1021 @Alerts({"test value", "true", "false", "finished"})
1022 public void attributeNS() throws Exception {
1023 final String html = DOCTYPE_HTML
1024 + "<html>\n"
1025 + " <head>\n"
1026 + " <script>\n"
1027 + LOG_TITLE_FUNCTION
1028 + " function test() {\n"
1029 + " var doc = document.implementation.createDocument(\"\", \"\", null);\n"
1030 + " var element = doc.createElementNS(\'uri:test\', \'test:element\');\n"
1031 + " element.setAttributeNS(\'uri:test\', \'test:attribute\', 'test value');\n"
1032 + " log(element.getAttributeNS(\'uri:test\', \'attribute\'));\n"
1033 + " log(element.hasAttributeNS(\'uri:test\', \'attribute\'));\n"
1034 + " element.removeAttributeNS(\'uri:test\', \'attribute\');\n"
1035 + " log(element.hasAttributeNS(\'uri:test\', \'attribute\'));\n"
1036 + " log('finished');\n"
1037 + " }\n"
1038 + " </script>\n"
1039 + " </head>\n"
1040 + " <body onload='test()'>\n"
1041 + " </body>\n"
1042 + "</html>";
1043
1044 loadPageVerifyTitle2(html);
1045 }
1046
1047
1048
1049
1050 @Test
1051 @Alerts({"ab", "ab"})
1052 public void removeAttribute_case_sensitive() throws Exception {
1053 final String html = DOCTYPE_HTML
1054 + "<html>\n"
1055 + " <head>\n"
1056 + " <script>\n"
1057 + LOG_TITLE_FUNCTION
1058 + " function test() {\n"
1059 + " var doc = " + XMLDocumentTest.callLoadXMLDocumentFromFile("'foo.xml'") + ";\n"
1060 + " var e = doc.getElementsByTagName('title')[0];\n"
1061 + " log(e.getAttribute('normal'));\n"
1062 + " e.removeAttribute('Normal');\n"
1063 + " log(e.getAttribute('normal'));\n"
1064 + " }\n"
1065 + XMLDocumentTest.LOAD_XML_DOCUMENT_FROM_FILE_FUNCTION
1066 + " </script>\n"
1067 + " </head>\n"
1068 + " <body onload='test()'>\n"
1069 + " </body>\n"
1070 + "</html>";
1071
1072 final String xml
1073 = "<books>\n"
1074 + " <book>\n"
1075 + " <title normal=\"ab\">Immortality</title>\n"
1076 + " <author>John Smith</author>\n"
1077 + " </book>\n"
1078 + "</books>";
1079
1080 getMockWebConnection().setDefaultResponse(xml, MimeType.TEXT_XML);
1081 loadPageVerifyTitle2(html);
1082 }
1083
1084
1085
1086
1087 @Test
1088 @Alerts("test")
1089 public void setAttributeNode() throws Exception {
1090 final String html = DOCTYPE_HTML
1091 + "<html>\n"
1092 + " <head>\n"
1093 + " <script>\n"
1094 + LOG_TITLE_FUNCTION
1095 + " function test() {\n"
1096 + " var doc = document.implementation.createDocument('', '', null);\n"
1097 + " var element = doc.createElement('something');\n"
1098 + " var attr = doc.createAttribute('name');\n"
1099 + " attr.value = 'test';\n"
1100 + " element.setAttributeNode(attr);\n"
1101 + " log(element.getAttributeNode('name').value);\n"
1102 + " }\n"
1103 + " </script>\n"
1104 + " </head>\n"
1105 + " <body onload='test()'>\n"
1106 + " </body>\n"
1107 + "</html>";
1108
1109 loadPageVerifyTitle2(html);
1110 }
1111
1112
1113
1114
1115 @Test
1116 @Alerts({"undefined", "undefined"})
1117 public void currentStyle() throws Exception {
1118 final String html = DOCTYPE_HTML
1119 + "<html>\n"
1120 + "<head>\n"
1121 + " <script>\n"
1122 + LOG_TITLE_FUNCTION
1123 + " function test() {\n"
1124 + " var e = document.getElementById('tester');\n"
1125 + " log(e.currentStyle ? 'available' : e.currentStyle);\n"
1126 + " e = document.createElement('div');\n"
1127 + " log(e.currentStyle ? 'available' : e.currentStyle);\n"
1128 + " }\n"
1129 + " </script>\n"
1130 + "</head>\n"
1131 + "<body onload='test()'>\n"
1132 + " <div id='tester'></div>\n"
1133 + "</body></html>";
1134 loadPageVerifyTitle2(html);
1135 }
1136
1137
1138
1139
1140 @Test
1141 @Alerts({"undefined", "undefined"})
1142 public void allowKeyboardInput() throws Exception {
1143 final String html = DOCTYPE_HTML
1144 + "<html>\n"
1145 + "<head>\n"
1146 + " <script>\n"
1147 + LOG_TITLE_FUNCTION
1148 + " function test() {\n"
1149 + " log(Element.ALLOW_KEYBOARD_INPUT);\n"
1150 + " log(typeof Element.ALLOW_KEYBOARD_INPUT);\n"
1151 + " }\n"
1152 + " </script>\n"
1153 + "</head>\n"
1154 + "<body onload='test()'>\n"
1155 + "</body></html>";
1156 loadPageVerifyTitle2(html);
1157 }
1158
1159
1160
1161
1162 @Test
1163 @Alerts("")
1164 public void enumeratedPropertiesForNativeFunction() throws Exception {
1165 final String html = DOCTYPE_HTML
1166 + "<html><head>\n"
1167 + "<script>\n"
1168 + LOG_TITLE_FUNCTION
1169 + " function test() {\n"
1170 + " var str = '';\n"
1171 + " for (var i in test)\n"
1172 + " str += i + ', ';\n"
1173 + " log(str);\n"
1174 + " }\n"
1175 + "</script>\n"
1176 + "</head>\n"
1177 + "<body onload='test()'>\n"
1178 + "</body></html>";
1179
1180 loadPageVerifyTitle2(html);
1181 }
1182
1183
1184
1185
1186 @Test
1187 @Alerts({"function Element() { [native code] }", "[object Element]",
1188 "function Element() { [native code] }"})
1189 public void prototypConstructor() throws Exception {
1190 final String html = DOCTYPE_HTML
1191 + "<html><head>\n"
1192 + "<script>\n"
1193 + LOG_TITLE_FUNCTION
1194 + " function test() {\n"
1195 + " try {\n"
1196 + " process(Element);\n"
1197 + " process(Element.prototype);\n"
1198 + " process(Element.prototype.constructor);\n"
1199 + " } catch(e) { logEx(e) }\n"
1200 + " }\n"
1201 + " function process(obj) {\n"
1202 + " try {\n"
1203 + " log(obj);\n"
1204 + " } catch(e) { logEx(e) }\n"
1205 + " }\n"
1206 + "</script>\n"
1207 + "</head>\n"
1208 + "<body onload='test()'>\n"
1209 + "</body></html>";
1210
1211 loadPageVerifyTitle2(html);
1212 }
1213
1214
1215
1216
1217 @Test
1218 @Alerts({"function Element() { [native code] }", "[object Element]",
1219 "function Element() { [native code] }"})
1220 public void prototypConstructorStandards() throws Exception {
1221 final String html = DOCTYPE_HTML
1222 + "<html><head>\n"
1223 + "<script>\n"
1224 + LOG_TITLE_FUNCTION
1225 + " function test() {\n"
1226 + " process(Element);\n"
1227 + " process(Element.prototype);\n"
1228 + " process(Element.prototype.constructor);\n"
1229 + " }\n"
1230 + " function process(obj) {\n"
1231 + " log(obj);\n"
1232 + " }\n"
1233 + "</script>\n"
1234 + "</head>\n"
1235 + "<body onload='test()'>\n"
1236 + "</body></html>";
1237
1238 loadPageVerifyTitle2(html);
1239 }
1240
1241
1242
1243
1244 @Test
1245 @Alerts({"0-0", "0-1", "2-5"})
1246 public void childElementCount() throws Exception {
1247 final String html = DOCTYPE_HTML
1248 + "<html><head>\n"
1249 + "<script>\n"
1250 + LOG_TITLE_FUNCTION
1251 + " function test() {\n"
1252 + " info(document.getElementById('emptyDiv'));\n"
1253 + " info(document.getElementById('whitespaceDiv'));\n"
1254 + " info(document.getElementById('testDiv'));\n"
1255 + " }\n"
1256 + " function info(e) {\n"
1257 + " log(e.childElementCount + '-' + e.childNodes.length);\n"
1258 + " }\n"
1259 + "</script>\n"
1260 + "</head>\n"
1261 + "<body onload='test()'>\n"
1262 + " <div id='emptyDiv'></div>\n"
1263 + " <div id='whitespaceDiv'>\n"
1264 + " </div>\n"
1265 + " <div id='testDiv'>\n"
1266 + " <div>first</div>\n"
1267 + " <div>\n"
1268 + " <span>second</span>\n"
1269 + " </div>\n"
1270 + " </div>\n"
1271 + "</body></html>";
1272
1273 loadPageVerifyTitle2(html);
1274 }
1275
1276
1277
1278
1279 @Test
1280 @Alerts({"1-2", "3-7"})
1281 public void childElementCountTable() throws Exception {
1282 final String html = DOCTYPE_HTML
1283 + "<html><head>\n"
1284 + "<script>\n"
1285 + LOG_TITLE_FUNCTION
1286 + " function test() {\n"
1287 + " info(document.getElementById('myTable'));\n"
1288 + " info(document.getElementById('myTr'));\n"
1289 + " }\n"
1290 + " function info(e) {\n"
1291 + " log(e.childElementCount + '-' + e.childNodes.length);\n"
1292 + " }\n"
1293 + "</script>\n"
1294 + "</head>\n"
1295 + "<body onload='test()'>\n"
1296 + " <table id='myTable'>\n"
1297 + " <tr id='myTr'>\n"
1298 + " <td>first</td>\n"
1299 + " <td><div>second</div></td>\n"
1300 + " <td>\n"
1301 + " third\n"
1302 + " </td>\n"
1303 + " </tr>\n"
1304 + " </table>\n"
1305 + "</body></html>";
1306
1307 loadPageVerifyTitle2(html);
1308 }
1309
1310
1311
1312
1313 @Test
1314 @Alerts({"true", "false"})
1315 public void hasAttributes() throws Exception {
1316 final String html = DOCTYPE_HTML
1317 + "<html><head>\n"
1318 + "<script>\n"
1319 + LOG_TITLE_FUNCTION
1320 + " function test() {\n"
1321 + " log(document.body.hasAttributes());\n"
1322 + " log(document.body.childNodes.item(1).hasAttributes());\n"
1323 + " }\n"
1324 + "</script>\n"
1325 + "</head>\n"
1326 + "<body onload='test()'>\n"
1327 + " <div></div>\n"
1328 + "</body></html>";
1329
1330 loadPageVerifyTitle2(html);
1331 }
1332
1333
1334
1335
1336 @Test
1337 @Alerts("Philippine eagle")
1338 public void matches() throws Exception {
1339 final String html = DOCTYPE_HTML
1340 + "<html><head>\n"
1341 + "<script>\n"
1342 + LOG_TITLE_FUNCTION
1343 + " function test() {\n"
1344 + " var birds = document.getElementsByTagName('li');\n"
1345 + " var found = false;"
1346 + " for (var i = 0; i < birds.length; i++) {\n"
1347 + " if (birds[i].matches && birds[i].matches('.endangered')) {\n"
1348 + " log(birds[i].textContent);\n"
1349 + " found = true;"
1350 + " }\n"
1351 + " }\n"
1352 + " if (!found) {\n"
1353 + " log('not found');\n"
1354 + " }\n"
1355 + " }\n"
1356 + "</script>\n"
1357 + "</head>\n"
1358 + "<body onload='test()'>\n"
1359 + " <ul id='birds'>\n"
1360 + " <li>Orange-winged parrot</li>\n"
1361 + " <li class='endangered'>Philippine eagle</li>\n"
1362 + " <li>Great white pelican</li>\n"
1363 + " </ul>\n"
1364 + "</body></html>";
1365
1366 loadPageVerifyTitle2(html);
1367 }
1368
1369
1370
1371
1372 @Test
1373 @Alerts({"SyntaxError/DOMException", "done"})
1374 public void matchesInvalidSelector() throws Exception {
1375 final String html = DOCTYPE_HTML
1376 + "<html><head>\n"
1377 + "<script>\n"
1378 + LOG_TITLE_FUNCTION
1379 + " function test() {\n"
1380 + " var birds = document.getElementsByTagName('li');\n"
1381 + " try {\n"
1382 + " for (var i = 0; i < birds.length; i++) {\n"
1383 + " if (birds[i].matches && birds[i].matches('invalidSelector!=:::x')) {\n"
1384 + " log(birds[i].textContent);\n"
1385 + " }\n"
1386 + " }\n"
1387 + " } catch(e) { logEx(e); }\n"
1388 + " log('done');\n"
1389 + " }\n"
1390 + "</script>\n"
1391 + "</head>\n"
1392 + "<body onload='test()'>\n"
1393 + " <ul id='birds'>\n"
1394 + " <li>Great white pelican</li>\n"
1395 + " </ul>\n"
1396 + "</body></html>";
1397
1398 loadPageVerifyTitle2(html);
1399 }
1400
1401
1402
1403
1404 @Test
1405 @Alerts({"TypeError", "done"})
1406 public void matchesWindow() throws Exception {
1407 final String html = DOCTYPE_HTML
1408 + "<html><head>\n"
1409 + "<script>\n"
1410 + LOG_TITLE_FUNCTION
1411 + " function test() {\n"
1412 + " var docElem = document.documentElement;\n"
1413 + " var matches = docElem.matchesSelector\n"
1414 + " || docElem.mozMatchesSelector\n"
1415 + " || docElem.webkitMatchesSelector\n"
1416 + " || docElem.msMatchesSelector;\n"
1417 + " try {\n"
1418 + " matches.call(window, ':visible')\n"
1419 + " } catch(e) { logEx(e); }\n"
1420 + " log('done');\n"
1421 + " }\n"
1422 + "</script>\n"
1423 + "</head>\n"
1424 + "<body onload='test()'>\n"
1425 + " <ul id='birds'>\n"
1426 + " <li>Great white pelican</li>\n"
1427 + " </ul>\n"
1428 + "</body></html>";
1429
1430 loadPageVerifyTitle2(html);
1431 }
1432
1433
1434
1435
1436
1437 @Test
1438 @Alerts({"div-02", "div-03", "div-01", "article-01", "null"})
1439 public void closest() throws Exception {
1440 final String html = DOCTYPE_HTML
1441 + "<html><head>\n"
1442 + "<script>\n"
1443 + LOG_TITLE_FUNCTION
1444 + " function test() {\n"
1445 + " var el = document.getElementById('div-03');\n"
1446 + " if (!el.closest) { log('no closest'); return }\n"
1447
1448 + " log(el.closest('#div-02').id);\n"
1449 + " log(el.closest('div div').id);\n"
1450 + " log(el.closest('article > div').id);\n"
1451 + " log(el.closest(':not(div)').id);\n"
1452
1453 + " log(el.closest('span'));\n"
1454 + " }\n"
1455 + "</script>\n"
1456 + "</head>\n"
1457 + "<body onload='test()'>\n"
1458 + " <article id='article-01'>\n"
1459 + " <div id='div-01'>Here is div-01\n"
1460 + " <div id='div-02'>Here is div-02\n"
1461 + " <div id='div-03'>Here is div-03</div>\n"
1462 + " </div>\n"
1463 + " </div>\n"
1464 + " </article>\n"
1465 + "</body></html>";
1466
1467 loadPageVerifyTitle2(html);
1468 }
1469
1470
1471
1472
1473 @Test
1474 @Alerts({"false", "true", "true", "true", "false", "false"})
1475 public void toggleAttribute() throws Exception {
1476 final String html = DOCTYPE_HTML
1477 + "<html><head><script>\n"
1478 + LOG_TITLE_FUNCTION
1479 + " function test() {\n"
1480 + " var d0 = document.getElementById('div0');\n"
1481
1482 + " if (!d0.toggleAttribute) { log('toggleAttribute missing'); return; }\n"
1483 + " d0.toggleAttribute('hidden');"
1484 + " log(d0.hidden);\n"
1485
1486 + " var d1 = document.getElementById('div1');"
1487 + " d1.toggleAttribute('hidden');"
1488 + " log(d1.hidden);\n"
1489 + " var d2 = document.getElementById('div2');"
1490 + " d2.toggleAttribute('hidden', true);"
1491 + " log(d2.hidden);\n"
1492 + " var d3 = document.getElementById('div3');"
1493 + " d3.toggleAttribute('hidden', true);"
1494 + " log(d3.hidden);\n"
1495 + " var d4 = document.getElementById('div4');"
1496 + " d4.toggleAttribute('hidden', false);"
1497 + " log(d4.hidden);\n"
1498 + " var d5 = document.getElementById('div5');"
1499 + " d5.toggleAttribute('hidden', false);"
1500 + " log(d5.hidden);\n"
1501 + " }\n"
1502 + "</script></head>\n"
1503 + "<body onload='test()'>\n"
1504 + " <div id='div0' hidden />\n"
1505 + " <div id='div1' />\n"
1506 + " <div id='div2' hidden/>\n"
1507 + " <div id='div3' />\n"
1508 + " <div id='div4' hidden />\n"
1509 + " <div id='div5' />\n"
1510 + "</body></html>";
1511
1512 loadPageVerifyTitle2(html);
1513 }
1514
1515
1516
1517
1518 @Test
1519 @Alerts({"1", "1", "<div id=\"div1\"></div>"})
1520 public void after_noArgs_empty() throws Exception {
1521 modifySiblings("after", "after();", "");
1522 }
1523
1524
1525
1526
1527 @Test
1528 @Alerts({"1", "1", "#HtmlUnit"})
1529 public void after_noArgs_notEmpty() throws Exception {
1530 modifySiblings("after", "after();", "HtmlUnit");
1531 }
1532
1533
1534
1535
1536 @Test
1537 @Alerts({"1", "2", "<div id=\"div1\"></div>", "#HeHo",
1538 "childList", "1", "0", "[object HTMLDivElement]", "null"})
1539 @HtmlUnitNYI(CHROME = {"1", "2", "<div id=\"div1\"></div>", "#HeHo"},
1540 EDGE = {"1", "2", "<div id=\"div1\"></div>", "#HeHo"},
1541 FF = {"1", "2", "<div id=\"div1\"></div>", "#HeHo"},
1542 FF_ESR = {"1", "2", "<div id=\"div1\"></div>", "#HeHo"})
1543 public void after_text_empty() throws Exception {
1544 modifySiblings("after", "after('HeHo');", "");
1545 }
1546
1547
1548
1549
1550 @Test
1551 @Alerts({"1", "2", "#HtmlUnit", "#HeHo",
1552 "childList", "1", "0", "[object HTMLDivElement]", "null"})
1553 @HtmlUnitNYI(CHROME = {"1", "2", "#HtmlUnit", "#HeHo"},
1554 EDGE = {"1", "2", "#HtmlUnit", "#HeHo"},
1555 FF = {"1", "2", "#HtmlUnit", "#HeHo"},
1556 FF_ESR = {"1", "2", "#HtmlUnit", "#HeHo"})
1557 public void after_text_notEmpty() throws Exception {
1558 modifySiblings("after", "after('HeHo');", "HtmlUnit");
1559 }
1560
1561
1562
1563
1564 @Test
1565 @Alerts({"1", "2", "<div id=\"div1\"></div>", "<p></p>",
1566 "childList", "1", "0", "[object HTMLDivElement]", "null"})
1567 @HtmlUnitNYI(CHROME = {"1", "2", "<div id=\"div1\"></div>", "<p></p>"},
1568 EDGE = {"1", "2", "<div id=\"div1\"></div>", "<p></p>"},
1569 FF = {"1", "2", "<div id=\"div1\"></div>", "<p></p>"},
1570 FF_ESR = {"1", "2", "<div id=\"div1\"></div>", "<p></p>"})
1571 public void after_p_empty() throws Exception {
1572 modifySiblings("after", "after(p0);", "");
1573 }
1574
1575
1576
1577
1578 @Test
1579 @Alerts({"1", "2", "#HtmlUnit", "<p></p>",
1580 "childList", "1", "0", "[object HTMLDivElement]", "null"})
1581 @HtmlUnitNYI(CHROME = {"1", "2", "#HtmlUnit", "<p></p>"},
1582 EDGE = {"1", "2", "#HtmlUnit", "<p></p>"},
1583 FF = {"1", "2", "#HtmlUnit", "<p></p>"},
1584 FF_ESR = {"1", "2", "#HtmlUnit", "<p></p>"})
1585 public void after_p_notEmpty() throws Exception {
1586 modifySiblings("after", "after(p0);", "HtmlUnit");
1587 }
1588
1589
1590
1591
1592 @Test
1593 @Alerts({"1", "2", "<div id=\"div1\"></div>", "#[object Object]",
1594 "childList", "1", "0", "[object HTMLDivElement]", "null"})
1595 @HtmlUnitNYI(CHROME = {"1", "2", "<div id=\"div1\"></div>", "#[object Object]"},
1596 EDGE = {"1", "2", "<div id=\"div1\"></div>", "#[object Object]"},
1597 FF = {"1", "2", "<div id=\"div1\"></div>", "#[object Object]"},
1598 FF_ESR = {"1", "2", "<div id=\"div1\"></div>", "#[object Object]"})
1599 public void after_o_empty() throws Exception {
1600 modifySiblings("after", "after({o: 1});", "");
1601 }
1602
1603
1604
1605
1606 @Test
1607 @Alerts({"1", "2", "#HtmlUnit", "#[object Object]",
1608 "childList", "1", "0", "[object HTMLDivElement]", "null"})
1609 @HtmlUnitNYI(CHROME = {"1", "2", "#HtmlUnit", "#[object Object]"},
1610 EDGE = {"1", "2", "#HtmlUnit", "#[object Object]"},
1611 FF = {"1", "2", "#HtmlUnit", "#[object Object]"},
1612 FF_ESR = {"1", "2", "#HtmlUnit", "#[object Object]"})
1613 public void after_o_notEmpty() throws Exception {
1614 modifySiblings("after", "after({o: 1});", "HtmlUnit");
1615 }
1616
1617
1618
1619
1620 @Test
1621 @Alerts({"1", "4", "#HtmlUnit", "#abcd", "<p></p>", "#[object Object]",
1622 "childList", "3", "0", "[object HTMLDivElement]", "null"})
1623 @HtmlUnitNYI(CHROME = {"1", "4", "#HtmlUnit", "#abcd", "<p></p>", "#[object Object]"},
1624 EDGE = {"1", "4", "#HtmlUnit", "#abcd", "<p></p>", "#[object Object]"},
1625 FF = {"1", "4", "#HtmlUnit", "#abcd", "<p></p>", "#[object Object]"},
1626 FF_ESR = {"1", "4", "#HtmlUnit", "#abcd", "<p></p>", "#[object Object]"})
1627 public void after_many_notEmpty() throws Exception {
1628 modifySiblings("after", "after(p0, 'abcd', p0, {o: 1});", "HtmlUnit");
1629 }
1630
1631
1632
1633
1634 @Test
1635 @Alerts({"1", "1", "<div id=\"div1\"></div>"})
1636 public void before_noArgs_empty() throws Exception {
1637 modifySiblings("before", "before();", "");
1638 }
1639
1640
1641
1642
1643 @Test
1644 @Alerts({"1", "1", "#HtmlUnit"})
1645 public void before_noArgs_notEmpty() throws Exception {
1646 modifySiblings("before", "before();", "HtmlUnit");
1647 }
1648
1649
1650
1651
1652 @Test
1653 @Alerts({"1", "2", "#HeHo", "<div id=\"div1\"></div>",
1654 "childList", "1", "0", "null", "[object HTMLDivElement]"})
1655 @HtmlUnitNYI(CHROME = {"1", "2", "#HeHo", "<div id=\"div1\"></div>"},
1656 EDGE = {"1", "2", "#HeHo", "<div id=\"div1\"></div>"},
1657 FF = {"1", "2", "#HeHo", "<div id=\"div1\"></div>"},
1658 FF_ESR = {"1", "2", "#HeHo", "<div id=\"div1\"></div>"})
1659 public void before_text_empty() throws Exception {
1660 modifySiblings("before", "before('HeHo');", "");
1661 }
1662
1663
1664
1665
1666 @Test
1667 @Alerts({"1", "2", "#HeHo", "#HtmlUnit",
1668 "childList", "1", "0", "null", "[object HTMLDivElement]"})
1669 @HtmlUnitNYI(CHROME = {"1", "2", "#HeHo", "#HtmlUnit"},
1670 EDGE = {"1", "2", "#HeHo", "#HtmlUnit"},
1671 FF = {"1", "2", "#HeHo", "#HtmlUnit"},
1672 FF_ESR = {"1", "2", "#HeHo", "#HtmlUnit"})
1673 public void before_text_notEmpty() throws Exception {
1674 modifySiblings("before", "before('HeHo');", "HtmlUnit");
1675 }
1676
1677
1678
1679
1680 @Test
1681 @Alerts({"1", "2", "<p></p>", "<div id=\"div1\"></div>",
1682 "childList", "1", "0", "null", "[object HTMLDivElement]"})
1683 @HtmlUnitNYI(CHROME = {"1", "2", "<p></p>", "<div id=\"div1\"></div>"},
1684 EDGE = {"1", "2", "<p></p>", "<div id=\"div1\"></div>"},
1685 FF = {"1", "2", "<p></p>", "<div id=\"div1\"></div>"},
1686 FF_ESR = {"1", "2", "<p></p>", "<div id=\"div1\"></div>"})
1687 public void before_p_empty() throws Exception {
1688 modifySiblings("before", "before(p0);", "");
1689 }
1690
1691
1692
1693
1694 @Test
1695 @Alerts({"1", "2", "<p></p>", "#HtmlUnit",
1696 "childList", "1", "0", "null", "[object HTMLDivElement]"})
1697 @HtmlUnitNYI(CHROME = {"1", "2", "<p></p>", "#HtmlUnit"},
1698 EDGE = {"1", "2", "<p></p>", "#HtmlUnit"},
1699 FF = {"1", "2", "<p></p>", "#HtmlUnit"},
1700 FF_ESR = {"1", "2", "<p></p>", "#HtmlUnit"})
1701 public void before_p_notEmpty() throws Exception {
1702 modifySiblings("before", "before(p0);", "HtmlUnit");
1703 }
1704
1705
1706
1707
1708 @Test
1709 @Alerts({"1", "2", "#[object Object]", "<div id=\"div1\"></div>",
1710 "childList", "1", "0", "null", "[object HTMLDivElement]"})
1711 @HtmlUnitNYI(CHROME = {"1", "2", "#[object Object]", "<div id=\"div1\"></div>"},
1712 EDGE = {"1", "2", "#[object Object]", "<div id=\"div1\"></div>"},
1713 FF = {"1", "2", "#[object Object]", "<div id=\"div1\"></div>"},
1714 FF_ESR = {"1", "2", "#[object Object]", "<div id=\"div1\"></div>"})
1715 public void before_o_empty() throws Exception {
1716 modifySiblings("before", "before({o: 1});", "");
1717 }
1718
1719
1720
1721
1722 @Test
1723 @Alerts({"1", "2", "#[object Object]", "#HtmlUnit",
1724 "childList", "1", "0", "null", "[object HTMLDivElement]"})
1725 @HtmlUnitNYI(CHROME = {"1", "2", "#[object Object]", "#HtmlUnit"},
1726 EDGE = {"1", "2", "#[object Object]", "#HtmlUnit"},
1727 FF = {"1", "2", "#[object Object]", "#HtmlUnit"},
1728 FF_ESR = {"1", "2", "#[object Object]", "#HtmlUnit"})
1729 public void before_o_notEmpty() throws Exception {
1730 modifySiblings("before", "before({o: 1});", "HtmlUnit");
1731 }
1732
1733
1734
1735
1736 @Test
1737 @Alerts({"1", "4", "#abcd", "<p></p>", "#[object Object]", "#HtmlUnit",
1738 "childList", "3", "0", "null", "[object HTMLDivElement]"})
1739 @HtmlUnitNYI(CHROME = {"1", "4", "#abcd", "<p></p>", "#[object Object]", "#HtmlUnit"},
1740 EDGE = {"1", "4", "#abcd", "<p></p>", "#[object Object]", "#HtmlUnit"},
1741 FF = {"1", "4", "#abcd", "<p></p>", "#[object Object]", "#HtmlUnit"},
1742 FF_ESR = {"1", "4", "#abcd", "<p></p>", "#[object Object]", "#HtmlUnit"})
1743 public void before_many_notEmpty() throws Exception {
1744 modifySiblings("before", "before(p0, 'abcd', p0, {o: 1});", "HtmlUnit");
1745 }
1746
1747
1748
1749
1750 @Test
1751 @Alerts({"1", "0",
1752 "childList", "0", "1", "null", "null"})
1753 @HtmlUnitNYI(CHROME = {"1", "0"},
1754 EDGE = {"1", "0"},
1755 FF = {"1", "0"},
1756 FF_ESR = {"1", "0"})
1757 public void replaceWith_noArgs_empty() throws Exception {
1758 modifySiblings("replaceWith", "replaceWith();", "");
1759 }
1760
1761
1762
1763
1764 @Test
1765 @Alerts({"1", "1", "#HeHo",
1766 "childList", "1", "1", "null", "null"})
1767 @HtmlUnitNYI(CHROME = {"1", "1", "#HeHo"},
1768 EDGE = {"1", "1", "#HeHo"},
1769 FF = {"1", "1", "#HeHo"},
1770 FF_ESR = {"1", "1", "#HeHo"})
1771 public void replaceWith_text_notEmpty() throws Exception {
1772 modifySiblings("replaceWith", "replaceWith('HeHo');", "HtmlUnit");
1773 }
1774
1775
1776
1777
1778 @Test
1779 @Alerts({"1", "1", "#HeHo",
1780 "childList", "1", "1", "null", "null"})
1781 @HtmlUnitNYI(CHROME = {"1", "1", "#HeHo"},
1782 EDGE = {"1", "1", "#HeHo"},
1783 FF = {"1", "1", "#HeHo"},
1784 FF_ESR = {"1", "1", "#HeHo"})
1785 public void replaceWith_text_empty() throws Exception {
1786 modifySiblings("replaceWith", "replaceWith('HeHo');", "");
1787 }
1788
1789
1790
1791
1792 @Test
1793 @Alerts({"1", "1", "<p></p>",
1794 "childList", "1", "1", "null", "null"})
1795 @HtmlUnitNYI(CHROME = {"1", "1", "<p></p>"},
1796 EDGE = {"1", "1", "<p></p>"},
1797 FF = {"1", "1", "<p></p>"},
1798 FF_ESR = {"1", "1", "<p></p>"})
1799 public void replaceWith_p_notEmpty() throws Exception {
1800 modifySiblings("replaceWith", "replaceWith(p0);", "HtmlUnit");
1801 }
1802
1803
1804
1805
1806 @Test
1807 @Alerts({"1", "1", "<p></p>",
1808 "childList", "1", "1", "null", "null"})
1809 @HtmlUnitNYI(CHROME = {"1", "1", "<p></p>"},
1810 EDGE = {"1", "1", "<p></p>"},
1811 FF = {"1", "1", "<p></p>"},
1812 FF_ESR = {"1", "1", "<p></p>"})
1813 public void replaceWith_p_empty() throws Exception {
1814 modifySiblings("replaceWith", "replaceWith(p0);", "");
1815 }
1816
1817
1818
1819
1820 @Test
1821 @Alerts({"1", "1", "#[object Object]",
1822 "childList", "1", "1", "null", "null"})
1823 @HtmlUnitNYI(CHROME = {"1", "1", "#[object Object]"},
1824 EDGE = {"1", "1", "#[object Object]"},
1825 FF = {"1", "1", "#[object Object]"},
1826 FF_ESR = {"1", "1", "#[object Object]"})
1827 public void replaceWith_o_notEmpty() throws Exception {
1828 modifySiblings("replaceWith", "replaceWith({o: 1});", "HtmlUnit");
1829 }
1830
1831
1832
1833
1834 @Test
1835 @Alerts({"1", "1", "#[object Object]",
1836 "childList", "1", "1", "null", "null"})
1837 @HtmlUnitNYI(CHROME = {"1", "1", "#[object Object]"},
1838 EDGE = {"1", "1", "#[object Object]"},
1839 FF = {"1", "1", "#[object Object]"},
1840 FF_ESR = {"1", "1", "#[object Object]"})
1841 public void replaceWith_o_empty() throws Exception {
1842 modifySiblings("replaceWith", "replaceWith({o: 1});", "");
1843 }
1844
1845
1846
1847
1848 @Test
1849 @Alerts({"1", "4", "<p></p>", "#abcd", "<div></div>", "#[object Object]",
1850 "childList", "4", "1", "null", "null"})
1851 @HtmlUnitNYI(CHROME = {"1", "4", "<p></p>", "#abcd", "<div></div>", "#[object Object]"},
1852 EDGE = {"1", "4", "<p></p>", "#abcd", "<div></div>", "#[object Object]"},
1853 FF = {"1", "4", "<p></p>", "#abcd", "<div></div>", "#[object Object]"},
1854 FF_ESR = {"1", "4", "<p></p>", "#abcd", "<div></div>", "#[object Object]"})
1855 public void replaceWith_many_notEmpty() throws Exception {
1856 modifySiblings("replaceWith", "replaceWith(p0, 'abcd', div1, {o: 1});", "HtmlUnit");
1857 }
1858
1859
1860
1861
1862 @Test
1863 @Alerts({"1", "3", "<p></p>", "#abcd", "<div></div>",
1864 "childList", "3", "1", "null", "null"})
1865 @HtmlUnitNYI(CHROME = {"1", "3", "<p></p>", "#abcd", "<div></div>"},
1866 EDGE = {"1", "3", "<p></p>", "#abcd", "<div></div>"},
1867 FF = {"1", "3", "<p></p>", "#abcd", "<div></div>"},
1868 FF_ESR = {"1", "3", "<p></p>", "#abcd", "<div></div>"})
1869 public void replaceWith_many_many() throws Exception {
1870 modifySiblings("replaceWith", "replaceWith(p0, 'abcd', div1);", "<p>a</p><p>b</p>");
1871 }
1872
1873 private void modifySiblings(final String check, final String call, final String content) throws Exception {
1874 final String html = DOCTYPE_HTML
1875 + "<html><head></head>\n"
1876 + "<body>\n"
1877 + " <div id='div0'><div id='div1'>" + content + "</div></div>\n"
1878
1879 + "<script>\n"
1880 + LOG_TITLE_FUNCTION
1881
1882 + " function test() {\n"
1883
1884 + " var config = { attributes: true, childList: true, characterData: true, subtree: true };\n"
1885 + " var observer = new MutationObserver(function(mutations) {\n"
1886 + " mutations.forEach(function(mutation) {\n"
1887 + " log(mutation.type);\n"
1888 + " log(mutation.addedNodes ? mutation.addedNodes.length : mutation.addedNodes);\n"
1889 + " log(mutation.removedNodes ? mutation.removedNodes.length : mutation.removedNodes);\n"
1890 + " log(mutation.previousSibling);\n"
1891 + " log(mutation.nextSibling);\n"
1892 + " });\n"
1893 + " });\n"
1894 + " observer.observe(document.getElementById('div0'), config);\n"
1895
1896 + " var d0 = document.getElementById('div0');\n"
1897 + " var d1 = document.getElementById('div1');\n"
1898
1899 + " if (!d1." + check + ") { log('" + check + " missing'); return; }\n"
1900
1901 + " var p0 = document.createElement('p');\n"
1902 + " var div1 = document.createElement('div');\n"
1903
1904 + " var children = d0.childNodes;\n"
1905 + " log(children.length);\n"
1906 + " d1." + call + "\n"
1907 + " log(children.length);\n"
1908 + " for(var i = 0; i < children.length; i++) {\n"
1909 + " var child = children[i];\n"
1910 + " if (child.textContent) {\n"
1911 + " log('#' + child.textContent);\n"
1912 + " } else {"
1913 + " log(child.outerHTML);\n"
1914 + " }\n"
1915 + " }\n"
1916
1917 + " }\n"
1918
1919 + " test();"
1920 + "</script>\n"
1921
1922 + "</body></html>";
1923
1924 loadPageVerifyTitle2(html);
1925 }
1926
1927
1928
1929
1930 @Test
1931 @Alerts({"0", "0"})
1932 public void append_noArgs_empty() throws Exception {
1933 modifyChildren("append", "append();", "");
1934 }
1935
1936
1937
1938
1939 @Test
1940 @Alerts({"1", "1", "#HtmlUnit"})
1941 public void append_noArgs_notEmpty() throws Exception {
1942 modifyChildren("append", "append();", "HtmlUnit");
1943 }
1944
1945
1946
1947
1948 @Test
1949 @Alerts({"0", "1", "#HeHo",
1950 "childList", "1", "0", "null", "null"})
1951 @HtmlUnitNYI(CHROME = {"0", "1", "#HeHo"},
1952 EDGE = {"0", "1", "#HeHo"},
1953 FF = {"0", "1", "#HeHo"},
1954 FF_ESR = {"0", "1", "#HeHo"})
1955 public void append_text_empty() throws Exception {
1956 modifyChildren("append", "append('HeHo');", "");
1957 }
1958
1959
1960
1961
1962 @Test
1963 @Alerts({"1", "2", "#HtmlUnit", "#HeHo",
1964 "childList", "1", "0", "[object Text]", "null"})
1965 @HtmlUnitNYI(CHROME = {"1", "2", "#HtmlUnit", "#HeHo"},
1966 EDGE = {"1", "2", "#HtmlUnit", "#HeHo"},
1967 FF = {"1", "2", "#HtmlUnit", "#HeHo"},
1968 FF_ESR = {"1", "2", "#HtmlUnit", "#HeHo"})
1969 public void append_text_notEmpty() throws Exception {
1970 modifyChildren("append", "append('HeHo');", "HtmlUnit");
1971 }
1972
1973
1974
1975
1976 @Test
1977 @Alerts({"0", "1", "<p></p>",
1978 "childList", "1", "0", "null", "null"})
1979 @HtmlUnitNYI(CHROME = {"0", "1", "<p></p>"},
1980 EDGE = {"0", "1", "<p></p>"},
1981 FF = {"0", "1", "<p></p>"},
1982 FF_ESR = {"0", "1", "<p></p>"})
1983 public void append_p_empty() throws Exception {
1984 modifyChildren("append", "append(p0);", "");
1985 }
1986
1987
1988
1989
1990 @Test
1991 @Alerts({"1", "2", "#HtmlUnit", "<p></p>",
1992 "childList", "1", "0", "[object Text]", "null"})
1993 @HtmlUnitNYI(CHROME = {"1", "2", "#HtmlUnit", "<p></p>"},
1994 EDGE = {"1", "2", "#HtmlUnit", "<p></p>"},
1995 FF = {"1", "2", "#HtmlUnit", "<p></p>"},
1996 FF_ESR = {"1", "2", "#HtmlUnit", "<p></p>"})
1997 public void append_p_notEmpty() throws Exception {
1998 modifyChildren("append", "append(p0);", "HtmlUnit");
1999 }
2000
2001
2002
2003
2004 @Test
2005 @Alerts({"0", "1", "#[object Object]",
2006 "childList", "1", "0", "null", "null"})
2007 @HtmlUnitNYI(CHROME = {"0", "1", "#[object Object]"},
2008 EDGE = {"0", "1", "#[object Object]"},
2009 FF = {"0", "1", "#[object Object]"},
2010 FF_ESR = {"0", "1", "#[object Object]"})
2011 public void append_o_empty() throws Exception {
2012 modifyChildren("append", "append({o: 1});", "");
2013 }
2014
2015
2016
2017
2018 @Test
2019 @Alerts({"1", "2", "#HtmlUnit", "#[object Object]",
2020 "childList", "1", "0", "[object Text]", "null"})
2021 @HtmlUnitNYI(CHROME = {"1", "2", "#HtmlUnit", "#[object Object]"},
2022 EDGE = {"1", "2", "#HtmlUnit", "#[object Object]"},
2023 FF = {"1", "2", "#HtmlUnit", "#[object Object]"},
2024 FF_ESR = {"1", "2", "#HtmlUnit", "#[object Object]"})
2025 public void append_o_notEmpty() throws Exception {
2026 modifyChildren("append", "append({o: 1});", "HtmlUnit");
2027 }
2028
2029
2030
2031
2032 @Test
2033 @Alerts({"1", "4", "#HtmlUnit", "#abcd", "<p></p>", "#[object Object]",
2034 "childList", "3", "0", "[object Text]", "null"})
2035 @HtmlUnitNYI(CHROME = {"1", "4", "#HtmlUnit", "#abcd", "<p></p>", "#[object Object]"},
2036 EDGE = {"1", "4", "#HtmlUnit", "#abcd", "<p></p>", "#[object Object]"},
2037 FF = {"1", "4", "#HtmlUnit", "#abcd", "<p></p>", "#[object Object]"},
2038 FF_ESR = {"1", "4", "#HtmlUnit", "#abcd", "<p></p>", "#[object Object]"})
2039 public void append_many_notEmpty() throws Exception {
2040 modifyChildren("append", "append(p0, 'abcd', p0, {o: 1});", "HtmlUnit");
2041 }
2042
2043
2044
2045
2046 @Test
2047 @Alerts({"0", "0"})
2048 public void prepend_noArgs_empty() throws Exception {
2049 modifyChildren("prepend", "prepend();", "");
2050 }
2051
2052
2053
2054
2055 @Test
2056 @Alerts({"1", "1", "#HtmlUnit"})
2057 public void prepend_noArgs_notEmpty() throws Exception {
2058 modifyChildren("prepend", "prepend();", "HtmlUnit");
2059 }
2060
2061
2062
2063
2064 @Test
2065 @Alerts({"0", "1", "#HeHo",
2066 "childList", "1", "0", "null", "null"})
2067 @HtmlUnitNYI(CHROME = {"0", "1", "#HeHo"},
2068 EDGE = {"0", "1", "#HeHo"},
2069 FF = {"0", "1", "#HeHo"},
2070 FF_ESR = {"0", "1", "#HeHo"})
2071 public void prepend_text_empty() throws Exception {
2072 modifyChildren("prepend", "prepend('HeHo');", "");
2073 }
2074
2075
2076
2077
2078 @Test
2079 @Alerts({"1", "2", "#HeHo", "#HtmlUnit",
2080 "childList", "1", "0", "null", "[object Text]"})
2081 @HtmlUnitNYI(CHROME = {"1", "2", "#HeHo", "#HtmlUnit"},
2082 EDGE = {"1", "2", "#HeHo", "#HtmlUnit"},
2083 FF = {"1", "2", "#HeHo", "#HtmlUnit"},
2084 FF_ESR = {"1", "2", "#HeHo", "#HtmlUnit"})
2085 public void prepend_text_notEmpty() throws Exception {
2086 modifyChildren("prepend", "prepend('HeHo');", "HtmlUnit");
2087 }
2088
2089
2090
2091
2092 @Test
2093 @Alerts({"0", "1", "<p></p>",
2094 "childList", "1", "0", "null", "null"})
2095 @HtmlUnitNYI(CHROME = {"0", "1", "<p></p>"},
2096 EDGE = {"0", "1", "<p></p>"},
2097 FF = {"0", "1", "<p></p>"},
2098 FF_ESR = {"0", "1", "<p></p>"})
2099 public void prepend_p_empty() throws Exception {
2100 modifyChildren("prepend", "prepend(p0);", "");
2101 }
2102
2103
2104
2105
2106 @Test
2107 @Alerts({"1", "2", "<p></p>", "#HtmlUnit",
2108 "childList", "1", "0", "null", "[object Text]"})
2109 @HtmlUnitNYI(CHROME = {"1", "2", "<p></p>", "#HtmlUnit"},
2110 EDGE = {"1", "2", "<p></p>", "#HtmlUnit"},
2111 FF = {"1", "2", "<p></p>", "#HtmlUnit"},
2112 FF_ESR = {"1", "2", "<p></p>", "#HtmlUnit"})
2113 public void prepend_p_notEmpty() throws Exception {
2114 modifyChildren("prepend", "prepend(p0);", "HtmlUnit");
2115 }
2116
2117
2118
2119
2120 @Test
2121 @Alerts({"0", "1", "#[object Object]",
2122 "childList", "1", "0", "null", "null"})
2123 @HtmlUnitNYI(CHROME = {"0", "1", "#[object Object]"},
2124 EDGE = {"0", "1", "#[object Object]"},
2125 FF = {"0", "1", "#[object Object]"},
2126 FF_ESR = {"0", "1", "#[object Object]"})
2127 public void prepend_o_empty() throws Exception {
2128 modifyChildren("prepend", "prepend({o: 1});", "");
2129 }
2130
2131
2132
2133
2134 @Test
2135 @Alerts({"1", "2", "#[object Object]", "#HtmlUnit",
2136 "childList", "1", "0", "null", "[object Text]"})
2137 @HtmlUnitNYI(CHROME = {"1", "2", "#[object Object]", "#HtmlUnit"},
2138 EDGE = {"1", "2", "#[object Object]", "#HtmlUnit"},
2139 FF = {"1", "2", "#[object Object]", "#HtmlUnit"},
2140 FF_ESR = {"1", "2", "#[object Object]", "#HtmlUnit"})
2141 public void prepend_o_notEmpty() throws Exception {
2142 modifyChildren("prepend", "prepend({o: 1});", "HtmlUnit");
2143 }
2144
2145
2146
2147
2148 @Test
2149 @Alerts({"1", "4", "#abcd", "<p></p>", "#[object Object]", "#HtmlUnit",
2150 "childList", "3", "0", "null", "[object Text]"})
2151 @HtmlUnitNYI(CHROME = {"1", "4", "#abcd", "<p></p>", "#[object Object]", "#HtmlUnit"},
2152 EDGE = {"1", "4", "#abcd", "<p></p>", "#[object Object]", "#HtmlUnit"},
2153 FF = {"1", "4", "#abcd", "<p></p>", "#[object Object]", "#HtmlUnit"},
2154 FF_ESR = {"1", "4", "#abcd", "<p></p>", "#[object Object]", "#HtmlUnit"})
2155 public void prepend_many_notEmpty() throws Exception {
2156 modifyChildren("prepend", "prepend(p0, 'abcd', p0, {o: 1});", "HtmlUnit");
2157 }
2158
2159
2160
2161
2162 @Test
2163 @Alerts({"0", "0"})
2164 public void replaceChildren_noArgs_empty() throws Exception {
2165 modifyChildren("replaceChildren", "replaceChildren();", "");
2166 }
2167
2168
2169
2170
2171 @Test
2172 @Alerts({"1", "1", "#HeHo",
2173 "childList", "1", "1", "null", "null"})
2174 @HtmlUnitNYI(CHROME = {"1", "1", "#HeHo"},
2175 EDGE = {"1", "1", "#HeHo"},
2176 FF = {"1", "1", "#HeHo"},
2177 FF_ESR = {"1", "1", "#HeHo"})
2178 public void replaceChildren_text_notEmpty() throws Exception {
2179 modifyChildren("replaceChildren", "replaceChildren('HeHo');", "HtmlUnit");
2180 }
2181
2182
2183
2184
2185 @Test
2186 @Alerts({"0", "1", "#HeHo",
2187 "childList", "1", "0", "null", "null"})
2188 @HtmlUnitNYI(CHROME = {"0", "1", "#HeHo"},
2189 EDGE = {"0", "1", "#HeHo"},
2190 FF = {"0", "1", "#HeHo"},
2191 FF_ESR = {"0", "1", "#HeHo"})
2192 public void replaceChildren_text_empty() throws Exception {
2193 modifyChildren("replaceChildren", "replaceChildren('HeHo');", "");
2194 }
2195
2196
2197
2198
2199 @Test
2200 @Alerts({"1", "1", "<p></p>",
2201 "childList", "1", "1", "null", "null"})
2202 @HtmlUnitNYI(CHROME = {"1", "1", "<p></p>"},
2203 EDGE = {"1", "1", "<p></p>"},
2204 FF = {"1", "1", "<p></p>"},
2205 FF_ESR = {"1", "1", "<p></p>"})
2206 public void replaceChildren_p_notEmpty() throws Exception {
2207 modifyChildren("replaceChildren", "replaceChildren(p0);", "HtmlUnit");
2208 }
2209
2210
2211
2212
2213 @Test
2214 @Alerts({"0", "1", "<p></p>",
2215 "childList", "1", "0", "null", "null"})
2216 @HtmlUnitNYI(CHROME = {"0", "1", "<p></p>"},
2217 EDGE = {"0", "1", "<p></p>"},
2218 FF = {"0", "1", "<p></p>"},
2219 FF_ESR = {"0", "1", "<p></p>"})
2220 public void replaceChildren_p_empty() throws Exception {
2221 modifyChildren("replaceChildren", "replaceChildren(p0);", "");
2222 }
2223
2224
2225
2226
2227 @Test
2228 @Alerts({"1", "1", "#[object Object]",
2229 "childList", "1", "1", "null", "null"})
2230 @HtmlUnitNYI(CHROME = {"1", "1", "#[object Object]"},
2231 EDGE = {"1", "1", "#[object Object]"},
2232 FF = {"1", "1", "#[object Object]"},
2233 FF_ESR = {"1", "1", "#[object Object]"})
2234 public void replaceChildren_o_notEmpty() throws Exception {
2235 modifyChildren("replaceChildren", "replaceChildren({o: 1});", "HtmlUnit");
2236 }
2237
2238
2239
2240
2241 @Test
2242 @Alerts({"0", "1", "#[object Object]",
2243 "childList", "1", "0", "null", "null"})
2244 @HtmlUnitNYI(CHROME = {"0", "1", "#[object Object]"},
2245 EDGE = {"0", "1", "#[object Object]"},
2246 FF = {"0", "1", "#[object Object]"},
2247 FF_ESR = {"0", "1", "#[object Object]"})
2248 public void replaceChildren_o_empty() throws Exception {
2249 modifyChildren("replaceChildren", "replaceChildren({o: 1});", "");
2250 }
2251
2252
2253
2254
2255 @Test
2256 @Alerts({"1", "4", "<p></p>", "#abcd", "<div></div>", "#[object Object]",
2257 "childList", "4", "1", "null", "null"})
2258 @HtmlUnitNYI(CHROME = {"1", "4", "<p></p>", "#abcd", "<div></div>", "#[object Object]"},
2259 EDGE = {"1", "4", "<p></p>", "#abcd", "<div></div>", "#[object Object]"},
2260 FF = {"1", "4", "<p></p>", "#abcd", "<div></div>", "#[object Object]"},
2261 FF_ESR = {"1", "4", "<p></p>", "#abcd", "<div></div>", "#[object Object]"})
2262 public void replaceChildren_many_notEmpty() throws Exception {
2263 modifyChildren("replaceChildren", "replaceChildren(p0, 'abcd', div1, {o: 1});", "HtmlUnit");
2264 }
2265
2266
2267
2268
2269 @Test
2270 @Alerts({"2", "3", "<p></p>", "#abcd", "<div></div>",
2271 "childList", "3", "2", "null", "null"})
2272 @HtmlUnitNYI(CHROME = {"2", "3", "<p></p>", "#abcd", "<div></div>"},
2273 EDGE = {"2", "3", "<p></p>", "#abcd", "<div></div>"},
2274 FF = {"2", "3", "<p></p>", "#abcd", "<div></div>"},
2275 FF_ESR = {"2", "3", "<p></p>", "#abcd", "<div></div>"})
2276 public void replaceChildren_many_many() throws Exception {
2277 modifyChildren("replaceChildren", "replaceChildren(p0, 'abcd', div1);", "<p>a</p><p>b</p>");
2278 }
2279
2280
2281
2282
2283 @Test
2284 @Alerts({"4", "3", "<p></p>", "#abcd", "<div></div>",
2285 "childList", "3", "4", "null", "null"})
2286 @HtmlUnitNYI(CHROME = {"4", "3", "<p></p>", "#abcd", "<div></div>"},
2287 EDGE = {"4", "3", "<p></p>", "#abcd", "<div></div>"},
2288 FF = {"4", "3", "<p></p>", "#abcd", "<div></div>"},
2289 FF_ESR = {"4", "3", "<p></p>", "#abcd", "<div></div>"})
2290 public void replaceChildren_many_many2() throws Exception {
2291 modifyChildren("replaceChildren", "replaceChildren(p0, 'abcd', div1);", "<p>a</p><p>b</p><p>c</p><p>d</p>");
2292 }
2293
2294 private void modifyChildren(final String check, final String call, final String content) throws Exception {
2295 final String html = DOCTYPE_HTML
2296 + "<html><head></head>\n"
2297 + "<body>\n"
2298 + " <div id='div0'>" + content + "</div>\n"
2299
2300 + "<script>\n"
2301 + LOG_TITLE_FUNCTION
2302
2303 + " function test() {\n"
2304
2305 + " var config = { attributes: true, childList: true, characterData: true, subtree: true };\n"
2306 + " var observer = new MutationObserver(function(mutations) {\n"
2307 + " mutations.forEach(function(mutation) {\n"
2308 + " log(mutation.type);\n"
2309 + " log(mutation.addedNodes ? mutation.addedNodes.length : mutation.addedNodes);\n"
2310 + " log(mutation.removedNodes ? mutation.removedNodes.length : mutation.removedNodes);\n"
2311 + " log(mutation.previousSibling);\n"
2312 + " log(mutation.nextSibling);\n"
2313 + " });\n"
2314 + " });\n"
2315 + " observer.observe(document.getElementById('div0'), config);\n"
2316
2317 + " var d0 = document.getElementById('div0');\n"
2318
2319 + " if (!d0." + check + ") { log('" + check + " missing'); return; }\n"
2320
2321 + " var p0 = document.createElement('p');\n"
2322 + " var div1 = document.createElement('div');\n"
2323
2324 + " var children = d0.childNodes;\n"
2325 + " log(children.length);\n"
2326 + " d0." + call + "\n"
2327 + " log(children.length);\n"
2328 + " for(var i = 0; i < children.length; i++) {\n"
2329 + " var child = children[i];\n"
2330 + " if (child.textContent) {\n"
2331 + " log('#' + child.textContent);\n"
2332 + " } else {"
2333 + " log(child.outerHTML);\n"
2334 + " }\n"
2335 + " }\n"
2336
2337 + " }\n"
2338
2339 + " test();"
2340 + "</script>\n"
2341
2342 + "</body></html>";
2343
2344 loadPageVerifyTitle2(html);
2345 }
2346
2347
2348
2349
2350 @Test
2351 @Alerts({"0,0", "10,30", "22,64", "5,0", "type error", "5,0", "onscroll 5,0"})
2352 @HtmlUnitNYI(CHROME = {"0,0", "onscroll 10,30", "10,30", "onscroll 22,64", "22,64",
2353 "onscroll 5,0", "5,0", "type error", "5,0"},
2354 EDGE = {"0,0", "onscroll 10,30", "10,30", "onscroll 22,64", "22,64",
2355 "onscroll 5,0", "5,0", "type error", "5,0"},
2356 FF = {"0,0", "onscroll 10,30", "10,30", "onscroll 22,64", "22,64",
2357 "onscroll 5,0", "5,0", "type error", "5,0"},
2358 FF_ESR = {"0,0", "onscroll 10,30", "10,30", "onscroll 22,64", "22,64",
2359 "onscroll 5,0", "5,0", "type error", "5,0"})
2360 public void scrollBy() throws Exception {
2361 final String html = DOCTYPE_HTML
2362 + "<html><body onload='test()'>\n"
2363 + "<div id='d' style='width: 100px;height: 99px;overflow: scroll;'>\n"
2364 + "<div style='width:10000px;height:10000px;background-color:blue;'></div>\n"
2365 + "</div>"
2366 + "<script>\n"
2367 + LOG_TITLE_FUNCTION
2368 + "function test() {\n"
2369 + " var d = document.getElementById('d');\n"
2370 + " d.onscroll = (event) => { log('onscroll ' + d.scrollLeft + ',' + d.scrollTop); };"
2371
2372 + " log(d.scrollLeft + ',' + d.scrollTop);\n"
2373
2374 + " d.scrollBy(10, 30);\n"
2375 + " log(d.scrollLeft + ',' + d.scrollTop);\n"
2376
2377 + " d.scrollBy(12, 34);\n"
2378 + " log(d.scrollLeft + ',' + d.scrollTop);\n"
2379
2380 + " d.scrollBy(-17, -100);\n"
2381 + " log(d.scrollLeft + ',' + d.scrollTop);\n"
2382
2383 + " try { d.scrollBy(44); } catch(e) { log('type error'); }\n"
2384 + " log(d.scrollLeft + ',' + d.scrollTop);\n"
2385 + "}\n"
2386 + "</script></body></html>";
2387 loadPageVerifyTitle2(html);
2388 }
2389
2390
2391
2392
2393 @Test
2394 @Alerts({"0,0", "10,30", "22,64", "5,0", "49,0", "49,0", "onscroll 49,0"})
2395 @HtmlUnitNYI(CHROME = {"0,0", "onscroll 10,30", "10,30", "onscroll 22,64", "22,64",
2396 "onscroll 5,0", "5,0", "onscroll 49,0", "49,0", "onscroll 49,0", "49,0"},
2397 EDGE = {"0,0", "onscroll 10,30", "10,30", "onscroll 22,64", "22,64",
2398 "onscroll 5,0", "5,0", "onscroll 49,0", "49,0", "onscroll 49,0", "49,0"},
2399 FF = {"0,0", "onscroll 10,30", "10,30", "onscroll 22,64", "22,64",
2400 "onscroll 5,0", "5,0", "onscroll 49,0", "49,0", "onscroll 49,0", "49,0"},
2401 FF_ESR = {"0,0", "onscroll 10,30", "10,30", "onscroll 22,64", "22,64",
2402 "onscroll 5,0", "5,0", "onscroll 49,0", "49,0", "onscroll 49,0", "49,0"})
2403 public void scrollByOptions() throws Exception {
2404 final String html = DOCTYPE_HTML
2405 + "<html><body onload='test()'>\n"
2406 + "<div id='d' style='width: 100px;height: 99px;overflow: scroll;'>\n"
2407 + "<div style='width:10000px;height:10000px;background-color:blue;'></div>\n"
2408 + "</div>"
2409 + "<script>\n"
2410 + LOG_TITLE_FUNCTION
2411 + "function test() {\n"
2412 + " var d = document.getElementById('d');\n"
2413 + " d.onscroll = (event) => { log('onscroll ' + d.scrollLeft + ',' + d.scrollTop); };"
2414
2415 + " log(d.scrollLeft + ',' + d.scrollTop);\n"
2416
2417 + " d.scrollBy({left: 10, top: 30});\n"
2418 + " log(d.scrollLeft + ',' + d.scrollTop);\n"
2419
2420 + " d.scrollBy({left: 12, top: 34});\n"
2421 + " log(d.scrollLeft + ',' + d.scrollTop);\n"
2422
2423 + " d.scrollBy({left: -17, top: -100});\n"
2424 + " log(d.scrollLeft + ',' + d.scrollTop);\n"
2425
2426 + " d.scrollBy({left: 44});\n"
2427 + " log(d.scrollLeft + ',' + d.scrollTop);\n"
2428
2429 + " d.scrollBy({abcd: 7});\n"
2430 + " log(d.scrollLeft + ',' + d.scrollTop);\n"
2431 + "}\n"
2432 + "</script></body></html>";
2433 loadPageVerifyTitle2(html);
2434 }
2435
2436
2437
2438
2439 @Test
2440 @Alerts({"0,0", "10,30", "12,34", "0,0", "type error", "0,0", "onscroll 0,0"})
2441 @HtmlUnitNYI(CHROME = {"0,0", "onscroll 10,30", "10,30", "onscroll 12,34", "12,34",
2442 "onscroll 0,0", "0,0", "type error", "0,0"},
2443 EDGE = {"0,0", "onscroll 10,30", "10,30", "onscroll 12,34", "12,34",
2444 "onscroll 0,0", "0,0", "type error", "0,0"},
2445 FF = {"0,0", "onscroll 10,30", "10,30", "onscroll 12,34", "12,34",
2446 "onscroll 0,0", "0,0", "type error", "0,0"},
2447 FF_ESR = {"0,0", "onscroll 10,30", "10,30", "onscroll 12,34", "12,34",
2448 "onscroll 0,0", "0,0", "type error", "0,0"})
2449 public void scrollTo() throws Exception {
2450 final String html = DOCTYPE_HTML
2451 + "<html><body onload='test()'>\n"
2452 + "<div id='d' style='width: 100px;height: 99px;overflow: scroll;'>\n"
2453 + "<div style='width:10000px;height:10000px;background-color:blue;'></div>\n"
2454 + "</div>"
2455 + "<script>\n"
2456 + LOG_TITLE_FUNCTION
2457 + "function test() {\n"
2458 + " var d = document.getElementById('d');\n"
2459 + " d.onscroll = (event) => { log('onscroll ' + d.scrollLeft + ',' + d.scrollTop); };"
2460
2461 + " log(d.scrollLeft + ',' + d.scrollTop);\n"
2462
2463 + " d.scrollTo(10, 30);\n"
2464 + " log(d.scrollLeft + ',' + d.scrollTop);\n"
2465
2466 + " d.scrollTo(12, 34);\n"
2467 + " log(d.scrollLeft + ',' + d.scrollTop);\n"
2468
2469 + " d.scrollTo(-17, -100);\n"
2470 + " log(d.scrollLeft + ',' + d.scrollTop);\n"
2471
2472 + " try { d.scrollTo(44); } catch(e) { log('type error'); }\n"
2473 + " log(d.scrollLeft + ',' + d.scrollTop);\n"
2474 + "}\n"
2475 + "</script></body></html>";
2476 loadPageVerifyTitle2(html);
2477 }
2478
2479
2480
2481
2482 @Test
2483 @Alerts({"0,0", "10,30", "12,34", "0,0", "44,0", "44,0", "onscroll 44,0"})
2484 @HtmlUnitNYI(CHROME = {"0,0", "onscroll 10,30", "10,30", "onscroll 12,34", "12,34",
2485 "onscroll 0,0", "0,0", "onscroll 44,0", "44,0", "onscroll 44,0", "44,0"},
2486 EDGE = {"0,0", "onscroll 10,30", "10,30", "onscroll 12,34", "12,34",
2487 "onscroll 0,0", "0,0", "onscroll 44,0", "44,0", "onscroll 44,0", "44,0"},
2488 FF = {"0,0", "onscroll 10,30", "10,30", "onscroll 12,34", "12,34",
2489 "onscroll 0,0", "0,0", "onscroll 44,0", "44,0", "onscroll 44,0", "44,0"},
2490 FF_ESR = {"0,0", "onscroll 10,30", "10,30", "onscroll 12,34", "12,34",
2491 "onscroll 0,0", "0,0", "onscroll 44,0", "44,0", "onscroll 44,0", "44,0"})
2492 public void scrollToOptions() throws Exception {
2493 final String html = DOCTYPE_HTML
2494 + "<html><body onload='test()'>\n"
2495 + "<div id='d' style='width: 100px;height: 99px;overflow: scroll;'>\n"
2496 + "<div style='width:10000px;height:10000px;background-color:blue;'></div>\n"
2497 + "</div>"
2498 + "<script>\n"
2499 + LOG_TITLE_FUNCTION
2500 + "function test() {\n"
2501 + " var d = document.getElementById('d');\n"
2502 + " d.onscroll = (event) => { log('onscroll ' + d.scrollLeft + ',' + d.scrollTop); };"
2503
2504 + " log(d.scrollLeft + ',' + d.scrollTop);\n"
2505
2506 + " d.scrollTo({left: 10, top: 30});\n"
2507 + " log(d.scrollLeft + ',' + d.scrollTop);\n"
2508
2509 + " d.scrollTo({left: 12, top: 34});\n"
2510 + " log(d.scrollLeft + ',' + d.scrollTop);\n"
2511
2512 + " d.scrollTo({left: -17, top: -100});\n"
2513 + " log(d.scrollLeft + ',' + d.scrollTop);\n"
2514
2515 + " d.scrollTo({left: 44});\n"
2516 + " log(d.scrollLeft + ',' + d.scrollTop);\n"
2517
2518 + " d.scrollTo({abcd: 7});\n"
2519 + " log(d.scrollLeft + ',' + d.scrollTop);\n"
2520 + "}\n"
2521 + "</script></body></html>";
2522 loadPageVerifyTitle2(html);
2523 }
2524
2525
2526
2527
2528 @Test
2529 @Alerts({"0,0", "10,30", "12,34", "0,0", "type error", "0,0", "onscroll 0,0"})
2530 @HtmlUnitNYI(CHROME = {"0,0", "onscroll 10,30", "10,30", "onscroll 12,34", "12,34",
2531 "onscroll 0,0", "0,0", "type error", "0,0"},
2532 EDGE = {"0,0", "onscroll 10,30", "10,30", "onscroll 12,34", "12,34",
2533 "onscroll 0,0", "0,0", "type error", "0,0"},
2534 FF = {"0,0", "onscroll 10,30", "10,30", "onscroll 12,34", "12,34",
2535 "onscroll 0,0", "0,0", "type error", "0,0"},
2536 FF_ESR = {"0,0", "onscroll 10,30", "10,30", "onscroll 12,34", "12,34",
2537 "onscroll 0,0", "0,0", "type error", "0,0"})
2538 public void scroll() throws Exception {
2539 final String html = DOCTYPE_HTML
2540 + "<html><body onload='test()'>\n"
2541 + "<div id='d' style='width: 100px;height: 99px;overflow: scroll;'>\n"
2542 + "<div style='width:10000px;height:10000px;background-color:blue;'></div>\n"
2543 + "</div>"
2544 + "<script>\n"
2545 + LOG_TITLE_FUNCTION
2546 + "function test() {\n"
2547 + " var d = document.getElementById('d');\n"
2548 + " d.onscroll = (event) => { log('onscroll ' + d.scrollLeft + ',' + d.scrollTop); };"
2549
2550 + " log(d.scrollLeft + ',' + d.scrollTop);\n"
2551
2552 + " d.scroll(10, 30);\n"
2553 + " log(d.scrollLeft + ',' + d.scrollTop);\n"
2554
2555 + " d.scroll(12, 34);\n"
2556 + " log(d.scrollLeft + ',' + d.scrollTop);\n"
2557
2558 + " d.scroll(-17, -100);\n"
2559 + " log(d.scrollLeft + ',' + d.scrollTop);\n"
2560
2561 + " try { d.scroll(44); } catch(e) { log('type error'); }\n"
2562 + " log(d.scrollLeft + ',' + d.scrollTop);\n"
2563 + "}\n"
2564 + "</script></body></html>";
2565 loadPageVerifyTitle2(html);
2566 }
2567
2568
2569
2570
2571 @Test
2572 @Alerts({"0,0", "10,30", "12,34", "0,0", "44,0", "44,0", "onscroll 44,0"})
2573 @HtmlUnitNYI(CHROME = {"0,0", "onscroll 10,30", "10,30", "onscroll 12,34", "12,34",
2574 "onscroll 0,0", "0,0", "onscroll 44,0", "44,0", "onscroll 44,0", "44,0"},
2575 EDGE = {"0,0", "onscroll 10,30", "10,30", "onscroll 12,34", "12,34",
2576 "onscroll 0,0", "0,0", "onscroll 44,0", "44,0", "onscroll 44,0", "44,0"},
2577 FF = {"0,0", "onscroll 10,30", "10,30", "onscroll 12,34", "12,34",
2578 "onscroll 0,0", "0,0", "onscroll 44,0", "44,0", "onscroll 44,0", "44,0"},
2579 FF_ESR = {"0,0", "onscroll 10,30", "10,30", "onscroll 12,34", "12,34",
2580 "onscroll 0,0", "0,0", "onscroll 44,0", "44,0", "onscroll 44,0", "44,0"})
2581 public void scrollOptions() throws Exception {
2582 final String html = DOCTYPE_HTML
2583 + "<html><body onload='test()'>\n"
2584 + "<div id='d' style='width: 100px;height: 99px;overflow: scroll;'>\n"
2585 + "<div style='width:10000px;height:10000px;background-color:blue;'></div>\n"
2586 + "</div>"
2587 + "<script>\n"
2588 + LOG_TITLE_FUNCTION
2589 + "function test() {\n"
2590 + " var d = document.getElementById('d');\n"
2591 + " d.onscroll = (event) => { log('onscroll ' + d.scrollLeft + ',' + d.scrollTop); };"
2592
2593 + " log(d.scrollLeft + ',' + d.scrollTop);\n"
2594
2595 + " d.scroll({left: 10, top: 30});\n"
2596 + " log(d.scrollLeft + ',' + d.scrollTop);\n"
2597
2598 + " d.scroll({left: 12, top: 34});\n"
2599 + " log(d.scrollLeft + ',' + d.scrollTop);\n"
2600
2601 + " d.scroll({left: -17, top: -100});\n"
2602 + " log(d.scrollLeft + ',' + d.scrollTop);\n"
2603
2604 + " d.scroll({left: 44});\n"
2605 + " log(d.scrollLeft + ',' + d.scrollTop);\n"
2606
2607 + " d.scroll({abcd: 7});\n"
2608 + " log(d.scrollLeft + ',' + d.scrollTop);\n"
2609 + "}\n"
2610 + "</script></body></html>";
2611 loadPageVerifyTitle2(html);
2612 }
2613 }