Bug 1770047 [wpt PR 34117] - [Clipboard API] Clipboard Web Custom Formats implementat...
[gecko.git] / testing / web-platform / tests / dom / ranges / StaticRange-constructor.html
blob6aae93f49b94afaf5eb87831f16367bdd5b3b41a
1 <!doctype html>
2 <title>StaticRange constructor test</title>
3 <link rel='author' title='Sanket Joshi' href='mailto:sajos@microsoft.com'>
4 <div id='log'></div>
5 <script src='/resources/testharness.js'></script>
6 <script src='/resources/testharnessreport.js'></script>
7 <div id='testDiv'>abc<span>def</span>ghi</div>
8 <script>
9 'use strict';
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);
17 test(function() {
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');
26 test(function() {
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');
35 test(function() {
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');
44 test(function() {
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');
53 test(function() {
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');
62 test(function() {
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');
71 test(function() {
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');
82 test(function() {
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');
91 test(function() {
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');
102 test(function() {
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');
111 test(function() {
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');
120 test(function() {
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');
129 test(function() {
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');
139 test(function() {
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');
150 test(function() {
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');
160 test(function() {
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');
171 test(function () {
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');
200 </script>