OLD | NEW |
| (Empty) |
1 <!doctype html> | |
2 <title>Range.selectNode() and .selectNodeContents() tests</title> | |
3 <link rel="author" title="Aryeh Gregor" href=ayg@aryeh.name> | |
4 <meta name=timeout content=long> | |
5 <div id=log></div> | |
6 <script src=../../../../resources/testharness.js></script> | |
7 <script src=../../../../resources/testharnessreport.js></script> | |
8 <script src=../common.js></script> | |
9 <script> | |
10 "use strict"; | |
11 | |
12 function testSelectNode(range, node) { | |
13 try { | |
14 range.collapsed; | |
15 } catch (e) { | |
16 // Range is detached | |
17 assert_throws("INVALID_STATE_ERR", function () { | |
18 range.selectNode(node); | |
19 }, "selectNode() on a detached node must throw INVALID_STATE_ERR"); | |
20 assert_throws("INVALID_STATE_ERR", function () { | |
21 range.selectNodeContents(node); | |
22 }, "selectNodeContents() on a detached node must throw INVALID_STATE_ERR
"); | |
23 return; | |
24 } | |
25 | |
26 if (!node.parentNode) { | |
27 assert_throws("INVALID_NODE_TYPE_ERR", function() { | |
28 range.selectNode(node); | |
29 }, "selectNode() on a node with no parent must throw INVALID_NODE_TYPE_E
RR"); | |
30 } else { | |
31 var index = 0; | |
32 while (node.parentNode.childNodes[index] != node) { | |
33 index++; | |
34 } | |
35 | |
36 range.selectNode(node); | |
37 assert_equals(range.startContainer, node.parentNode, | |
38 "After selectNode(), startContainer must equal parent node"); | |
39 assert_equals(range.endContainer, node.parentNode, | |
40 "After selectNode(), endContainer must equal parent node"); | |
41 assert_equals(range.startOffset, index, | |
42 "After selectNode(), startOffset must be index of node in parent ("
+ index + ")"); | |
43 assert_equals(range.endOffset, index + 1, | |
44 "After selectNode(), endOffset must be one plus index of node in par
ent (" + (index + 1) + ")"); | |
45 } | |
46 | |
47 if (node.nodeType == Node.DOCUMENT_TYPE_NODE) { | |
48 assert_throws("INVALID_NODE_TYPE_ERR", function () { | |
49 range.selectNodeContents(node); | |
50 }, "selectNodeContents() on a doctype must throw INVALID_NODE_TYPE_ERR")
; | |
51 } else { | |
52 range.selectNodeContents(node); | |
53 assert_equals(range.startContainer, node, | |
54 "After selectNodeContents(), startContainer must equal node"); | |
55 assert_equals(range.endContainer, node, | |
56 "After selectNodeContents(), endContainer must equal node"); | |
57 assert_equals(range.startOffset, 0, | |
58 "After selectNodeContents(), startOffset must equal 0"); | |
59 var len = nodeLength(node); | |
60 assert_equals(range.endOffset, len, | |
61 "After selectNodeContents(), endOffset must equal node length (" + l
en + ")"); | |
62 } | |
63 } | |
64 | |
65 var range = document.createRange(); | |
66 var foreignRange = foreignDoc.createRange(); | |
67 var xmlRange = xmlDoc.createRange(); | |
68 var detachedRange = document.createRange(); | |
69 detachedRange.detach(); | |
70 var tests = []; | |
71 function testTree(root, marker) { | |
72 if (root.nodeType == Node.ELEMENT_NODE && root.id == "log") { | |
73 // This is being modified during the tests, so let's not test it. | |
74 return; | |
75 } | |
76 tests.push([marker + root.nodeName.toLowerCase() + " node, current doc's ran
ge, type " + root.nodeType, range, root]); | |
77 tests.push([marker + root.nodeName.toLowerCase() + " node, foreign doc's ran
ge, type " + root.nodeType, foreignRange, root]); | |
78 tests.push([marker + root.nodeName.toLowerCase() + " node, XML doc's range,
type " + root.nodeType, xmlRange, root]); | |
79 tests.push([marker + root.nodeName.toLowerCase() + " node, detached range, t
ype " + root.nodeType, detachedRange, root]); | |
80 for (var i = 0; i < root.childNodes.length; i++) { | |
81 testTree(root.childNodes[i], "**" + marker); | |
82 } | |
83 } | |
84 testTree(document, " current doc: "); | |
85 testTree(foreignDoc, " foreign doc: "); | |
86 testTree(detachedDiv, " detached div in current doc: "); | |
87 | |
88 var otherTests = [xmlDoc, xmlElement, detachedTextNode, foreignTextNode, | |
89 xmlTextNode, processingInstruction, comment, foreignComment, xmlComment, | |
90 docfrag, foreignDocfrag, xmlDocfrag]; | |
91 | |
92 for (var i = 0; i < otherTests.length; i++) { | |
93 testTree(otherTests[i], " "); | |
94 } | |
95 | |
96 generate_tests(testSelectNode, tests); | |
97 | |
98 testDiv.style.display = "none"; | |
99 </script> | |
OLD | NEW |