StaticRange-constructor.html (11745B)
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'; 10 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); 16 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'); 25 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'); 34 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'); 43 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'); 52 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'); 61 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'); 70 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'); 81 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'); 90 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'); 101 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'); 110 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'); 119 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'); 128 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'); 138 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'); 149 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'); 159 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'); 164 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'); 170 171 test(function () { 172 assert_throws_js(TypeError, function () { 173 const staticRange = new StaticRange(); 174 }, 'throw a TypeError when no argument is passed'); 175 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'); 179 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'); 183 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'); 187 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'); 191 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'); 195 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>