tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>