tor-browser

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

Range-cloneRange.html (4696B)


      1 <!doctype html>
      2 <title>Range.cloneRange() and document.createRange() 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 testCloneRange(rangeEndpoints) {
     13  var range;
     14  if (rangeEndpoints == "detached") {
     15    range = document.createRange();
     16    range.detach();
     17    var clonedRange = range.cloneRange();
     18    assert_equals(clonedRange.startContainer, range.startContainer,
     19      "startContainers must be equal after cloneRange()");
     20    assert_equals(clonedRange.startOffset, range.startOffset,
     21      "startOffsets must be equal after cloneRange()");
     22    assert_equals(clonedRange.endContainer, range.endContainer,
     23      "endContainers must be equal after cloneRange()");
     24    assert_equals(clonedRange.endOffset, range.endOffset,
     25      "endOffsets must be equal after cloneRange()");
     26    return;
     27  }
     28 
     29  // Have to account for Ranges involving Documents!  We could just create
     30  // the Range from the current document unconditionally, but some browsers
     31  // (WebKit) don't implement setStart() and setEnd() per spec and will throw
     32  // spurious exceptions at the time of this writing.  No need to mask other
     33  // bugs.
     34  var ownerDoc = rangeEndpoints[0].nodeType == Node.DOCUMENT_NODE
     35    ? rangeEndpoints[0]
     36    : rangeEndpoints[0].ownerDocument;
     37  range = ownerDoc.createRange();
     38  // Here we throw in some createRange() tests, because why not.  Have to
     39  // test it someplace.
     40  assert_equals(range.startContainer, ownerDoc,
     41    "doc.createRange() must create Range whose startContainer is doc");
     42  assert_equals(range.endContainer, ownerDoc,
     43    "doc.createRange() must create Range whose endContainer is doc");
     44  assert_equals(range.startOffset, 0,
     45    "doc.createRange() must create Range whose startOffset is 0");
     46  assert_equals(range.endOffset, 0,
     47    "doc.createRange() must create Range whose endOffset is 0");
     48 
     49  range.setStart(rangeEndpoints[0], rangeEndpoints[1]);
     50  range.setEnd(rangeEndpoints[2], rangeEndpoints[3]);
     51 
     52  // Make sure we bail out now if setStart or setEnd are buggy, so it doesn't
     53  // create misleading failures later.
     54  assert_equals(range.startContainer, rangeEndpoints[0],
     55    "Sanity check on setStart()");
     56  assert_equals(range.startOffset, rangeEndpoints[1],
     57    "Sanity check on setStart()");
     58  assert_equals(range.endContainer, rangeEndpoints[2],
     59    "Sanity check on setEnd()");
     60  assert_equals(range.endOffset, rangeEndpoints[3],
     61    "Sanity check on setEnd()");
     62 
     63  var clonedRange = range.cloneRange();
     64 
     65  assert_equals(clonedRange.startContainer, range.startContainer,
     66    "startContainers must be equal after cloneRange()");
     67  assert_equals(clonedRange.startOffset, range.startOffset,
     68    "startOffsets must be equal after cloneRange()");
     69  assert_equals(clonedRange.endContainer, range.endContainer,
     70    "endContainers must be equal after cloneRange()");
     71  assert_equals(clonedRange.endOffset, range.endOffset,
     72    "endOffsets must be equal after cloneRange()");
     73 
     74  // Make sure that modifying one doesn't affect the other.
     75  var testNode1 = ownerDoc.createTextNode("testing");
     76  var testNode2 = ownerDoc.createTextNode("testing with different length");
     77 
     78  range.setStart(testNode1, 1);
     79  range.setEnd(testNode1, 2);
     80  assert_equals(clonedRange.startContainer, rangeEndpoints[0],
     81    "Modifying a Range must not modify its clone's startContainer");
     82  assert_equals(clonedRange.startOffset, rangeEndpoints[1],
     83    "Modifying a Range must not modify its clone's startOffset");
     84  assert_equals(clonedRange.endContainer, rangeEndpoints[2],
     85    "Modifying a Range must not modify its clone's endContainer");
     86  assert_equals(clonedRange.endOffset, rangeEndpoints[3],
     87    "Modifying a Range must not modify its clone's endOffset");
     88 
     89  clonedRange.setStart(testNode2, 3);
     90  clonedRange.setStart(testNode2, 4);
     91 
     92  assert_equals(range.startContainer, testNode1,
     93    "Modifying a clone must not modify the original Range's startContainer");
     94  assert_equals(range.startOffset, 1,
     95    "Modifying a clone must not modify the original Range's startOffset");
     96  assert_equals(range.endContainer, testNode1,
     97    "Modifying a clone must not modify the original Range's endContainer");
     98  assert_equals(range.endOffset, 2,
     99    "Modifying a clone must not modify the original Range's endOffset");
    100 }
    101 
    102 var tests = [];
    103 for (var i = 0; i < testRanges.length; i++) {
    104  tests.push([
    105    "Range " + i + " " + testRanges[i],
    106    eval(testRanges[i])
    107  ]);
    108 }
    109 generate_tests(testCloneRange, tests);
    110 
    111 testDiv.style.display = "none";
    112 </script>