2 <title>StaticRange constructor test
</title>
3 <link rel='author' title='Sanket Joshi' href='mailto:sajos@microsoft.com'
>
5 <script src='/resources/testharness.js'
></script>
6 <script src='/resources/testharnessreport.js'
></script>
7 <div id='testDiv'
>abc
<span>def
</span>ghi
</div>
11 const testDiv
= document
.getElementById('testDiv');
12 const testTextNode
= testDiv
.firstChild
;
13 const testPINode
= document
.createProcessingInstruction('foo', 'abc');
14 const testCommentNode
= document
.createComment('abc');
15 document
.body
.append(testPINode
, testCommentNode
);
18 const staticRange
= new StaticRange({startContainer
: testDiv
, startOffset
: 1, endContainer
: testDiv
, endOffset
: 2});
19 assert_equals(staticRange
.startContainer
, testDiv
, 'valid startContainer');
20 assert_equals(staticRange
.startOffset
, 1, 'valid startOffset');
21 assert_equals(staticRange
.endContainer
, testDiv
, 'valid endContainer');
22 assert_equals(staticRange
.endOffset
, 2, 'valid endOffset');
23 assert_false(staticRange
.collapsed
, 'not collapsed');
24 }, 'Construct static range with Element container');
27 const staticRange
= new StaticRange({startContainer
: testTextNode
, startOffset
: 1, endContainer
: testTextNode
, endOffset
: 2});
28 assert_equals(staticRange
.startContainer
, testTextNode
, 'valid startContainer');
29 assert_equals(staticRange
.startOffset
, 1, 'valid startOffset');
30 assert_equals(staticRange
.endContainer
, testTextNode
, 'valid endContainer');
31 assert_equals(staticRange
.endOffset
, 2, 'valid endOffset');
32 assert_false(staticRange
.collapsed
, 'not collapsed');
33 }, 'Construct static range with Text container');
36 const staticRange
= new StaticRange({startContainer
: testDiv
, startOffset
: 0, endContainer
: testTextNode
, endOffset
: 1});
37 assert_equals(staticRange
.startContainer
, testDiv
, 'valid startContainer');
38 assert_equals(staticRange
.startOffset
, 0, 'valid startOffset');
39 assert_equals(staticRange
.endContainer
, testTextNode
, 'valid endContainer');
40 assert_equals(staticRange
.endOffset
, 1, 'valid endOffset');
41 assert_false(staticRange
.collapsed
, 'not collapsed');
42 }, 'Construct static range with Element startContainer and Text endContainer');
45 const staticRange
= new StaticRange({startContainer
: testTextNode
, startOffset
: 0, endContainer
: testDiv
, endOffset
: 3});
46 assert_equals(staticRange
.startContainer
, testTextNode
, 'valid startContainer');
47 assert_equals(staticRange
.startOffset
, 0, 'valid startOffset');
48 assert_equals(staticRange
.endContainer
, testDiv
, 'valid endContainer');
49 assert_equals(staticRange
.endOffset
, 3, 'valid endOffset');
50 assert_false(staticRange
.collapsed
, 'not collapsed');
51 }, 'Construct static range with Text startContainer and Element endContainer');
54 const staticRange
= new StaticRange({startContainer
: testPINode
, startOffset
: 1, endContainer
: testPINode
, endOffset
: 2});
55 assert_equals(staticRange
.startContainer
, testPINode
, 'valid startContainer');
56 assert_equals(staticRange
.startOffset
, 1, 'valid startOffset');
57 assert_equals(staticRange
.endContainer
, testPINode
, 'valid endContainer');
58 assert_equals(staticRange
.endOffset
, 2, 'valid endOffset');
59 assert_false(staticRange
.collapsed
, 'not collapsed');
60 }, 'Construct static range with ProcessingInstruction container');
63 const staticRange
= new StaticRange({startContainer
: testCommentNode
, startOffset
: 1, endContainer
: testCommentNode
, endOffset
: 2});
64 assert_equals(staticRange
.startContainer
, testCommentNode
, 'valid startContainer');
65 assert_equals(staticRange
.startOffset
, 1, 'valid startOffset');
66 assert_equals(staticRange
.endContainer
, testCommentNode
, 'valid endContainer');
67 assert_equals(staticRange
.endOffset
, 2, 'valid endOffset');
68 assert_false(staticRange
.collapsed
, 'not collapsed');
69 }, 'Construct static range with Comment container');
72 const xmlDoc
= new DOMParser().parseFromString('<xml></xml>', 'application/xml');
73 const testCDATASection
= xmlDoc
.createCDATASection('abc');
74 const staticRange
= new StaticRange({startContainer
: testCDATASection
, startOffset
: 1, endContainer
: testCDATASection
, endOffset
: 2});
75 assert_equals(staticRange
.startContainer
, testCDATASection
, 'valid startContainer');
76 assert_equals(staticRange
.startOffset
, 1, 'valid startOffset');
77 assert_equals(staticRange
.endContainer
, testCDATASection
, 'valid endContainer');
78 assert_equals(staticRange
.endOffset
, 2, 'valid endOffset');
79 assert_false(staticRange
.collapsed
, 'not collapsed');
80 }, 'Construct static range with CDATASection container');
83 const staticRange
= new StaticRange({startContainer
: document
, startOffset
: 0, endContainer
: document
, endOffset
: 1});
84 assert_equals(staticRange
.startContainer
, document
, 'valid startContainer');
85 assert_equals(staticRange
.startOffset
, 0, 'valid startOffset');
86 assert_equals(staticRange
.endContainer
, document
, 'valid endContainer');
87 assert_equals(staticRange
.endOffset
, 1, 'valid endOffset');
88 assert_false(staticRange
.collapsed
, 'not collapsed');
89 }, 'Construct static range with Document container');
92 const testDocFrag
= document
.createDocumentFragment();
93 testDocFrag
.append('a','b','c');
94 const staticRange
= new StaticRange({startContainer
: testDocFrag
, startOffset
: 0, endContainer
: testDocFrag
, endOffset
: 1});
95 assert_equals(staticRange
.startContainer
, testDocFrag
, 'valid startContainer');
96 assert_equals(staticRange
.startOffset
, 0, 'valid startOffset');
97 assert_equals(staticRange
.endContainer
, testDocFrag
, 'valid endContainer');
98 assert_equals(staticRange
.endOffset
, 1, 'valid endOffset');
99 assert_false(staticRange
.collapsed
, 'not collapsed');
100 }, 'Construct static range with DocumentFragment container');
103 const staticRange
= new StaticRange({startContainer
: testDiv
, startOffset
: 0, endContainer
: testDiv
, endOffset
: 0});
104 assert_equals(staticRange
.startContainer
, testDiv
, 'valid startContainer');
105 assert_equals(staticRange
.startOffset
, 0, 'valid startOffset');
106 assert_equals(staticRange
.endContainer
, testDiv
, 'valid endContainer');
107 assert_equals(staticRange
.endOffset
, 0, 'valid endOffset');
108 assert_true(staticRange
.collapsed
, 'collapsed');
109 }, 'Construct collapsed static range');
112 const staticRange
= new StaticRange({startContainer
: testDiv
, startOffset
: 1, endContainer
: document
.body
, endOffset
: 0});
113 assert_equals(staticRange
.startContainer
, testDiv
, 'valid startContainer');
114 assert_equals(staticRange
.startOffset
, 1, 'valid startOffset');
115 assert_equals(staticRange
.endContainer
, document
.body
, 'valid endContainer');
116 assert_equals(staticRange
.endOffset
, 0, 'valid endOffset');
117 assert_false(staticRange
.collapsed
, 'not collapsed');
118 }, 'Construct inverted static range');
121 const staticRange
= new StaticRange({startContainer
: testDiv
, startOffset
: 0, endContainer
: testDiv
, endOffset
: 15});
122 assert_equals(staticRange
.startContainer
, testDiv
, 'valid startContainer');
123 assert_equals(staticRange
.startOffset
, 0, 'valid startOffset');
124 assert_equals(staticRange
.endContainer
, testDiv
, 'valid endContainer');
125 assert_equals(staticRange
.endOffset
, 15, 'valid endOffset');
126 assert_false(staticRange
.collapsed
, 'not collapsed');
127 }, 'Construct static range with offset greater than length');
130 const testNode
= document
.createTextNode('abc');
131 const staticRange
= new StaticRange({startContainer
: testNode
, startOffset
: 1, endContainer
: testNode
, endOffset
: 2});
132 assert_equals(staticRange
.startContainer
, testNode
, 'valid startContainer');
133 assert_equals(staticRange
.startOffset
, 1, 'valid startOffset');
134 assert_equals(staticRange
.endContainer
, testNode
, 'valid endContainer');
135 assert_equals(staticRange
.endOffset
, 2, 'valid endOffset');
136 assert_false(staticRange
.collapsed
, 'not collapsed');
137 }, 'Construct static range with standalone Node container');
140 const testRoot
= document
.createElement('div');
141 testRoot
.append('a','b');
142 const staticRange
= new StaticRange({startContainer
: testDiv
, startOffset
: 1, endContainer
: testRoot
, endOffset
: 2});
143 assert_equals(staticRange
.startContainer
, testDiv
, 'valid startContainer');
144 assert_equals(staticRange
.startOffset
, 1, 'valid startOffset');
145 assert_equals(staticRange
.endContainer
, testRoot
, 'valid endContainer');
146 assert_equals(staticRange
.endOffset
, 2, 'valid endOffset');
147 assert_false(staticRange
.collapsed
, 'not collapsed');
148 }, 'Construct static range with endpoints in disconnected trees');
151 const testDocNode
= document
.implementation
.createDocument('about:blank', 'html', null);
152 const staticRange
= new StaticRange({startContainer
: document
, startOffset
: 0, endContainer
: testDocNode
.documentElement
, endOffset
: 0});
153 assert_equals(staticRange
.startContainer
, document
, 'valid startContainer');
154 assert_equals(staticRange
.startOffset
, 0, 'valid startOffset');
155 assert_equals(staticRange
.endContainer
, testDocNode
.documentElement
, 'valid endContainer');
156 assert_equals(staticRange
.endOffset
, 0, 'valid endOffset');
157 assert_false(staticRange
.collapsed
, 'not collapsed');
158 }, 'Construct static range with endpoints in disconnected documents');
161 assert_throws_dom('INVALID_NODE_TYPE_ERR', function() {
162 const staticRange
= new StaticRange({startContainer
: document
.doctype
, startOffset
: 0, endContainer
: document
.doctype
, endOffset
: 0});
163 }, 'throw a InvalidNodeTypeError when a DocumentType is passed as a startContainer or endContainer');
165 assert_throws_dom('INVALID_NODE_TYPE_ERR', function() {
166 const testAttrNode
= testDiv
.getAttributeNode('id');
167 const staticRange
= new StaticRange({startContainer
: testAttrNode
, startOffset
: 0, endContainer
: testAttrNode
, endOffset
: 0});
168 }, 'throw a InvalidNodeTypeError when a Attr is passed as a startContainer or endContainer');
169 }, 'Throw on DocumentType or Attr container');
172 assert_throws_js(TypeError
, function () {
173 const staticRange
= new StaticRange();
174 }, 'throw a TypeError when no argument is passed');
176 assert_throws_js(TypeError
, function () {
177 const staticRange
= new StaticRange({startOffset
: 0, endContainer
: testDiv
, endOffset
: 0});
178 }, 'throw a TypeError when a startContainer is not passed');
180 assert_throws_js(TypeError
, function () {
181 const staticRange
= new StaticRange({startContainer
: testDiv
, endContainer
: testDiv
, endOffset
: 0});
182 }, 'throw a TypeError when a startOffset is not passed');
184 assert_throws_js(TypeError
, function () {
185 const staticRange
= new StaticRange({startContainer
: testDiv
, startOffset
: 0, endOffset
: 0});
186 }, 'throw a TypeError when an endContainer is not passed');
188 assert_throws_js(TypeError
, function () {
189 const staticRange
= new StaticRange({startContainer
: testDiv
, startOffset
: 0, endContainer
: testDiv
});
190 }, 'throw a TypeError when an endOffset is not passed');
192 assert_throws_js(TypeError
, function () {
193 const staticRange
= new StaticRange({startContainer
: null, startOffset
: 0, endContainer
: testDiv
, endOffset
: 0});
194 }, 'throw a TypeError when a null startContainer is passed');
196 assert_throws_js(TypeError
, function () {
197 const staticRange
= new StaticRange({startContainer
: testDiv
, startOffset
: 0, endContainer
: null, endOffset
: 0});
198 }, 'throw a TypeError when a null endContainer is passed');
199 }, 'Throw on missing or invalid arguments');