tor-browser

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

Range-isPointInRange.html (3108B)


      1 <!doctype html>
      2 <title>Range.isPointInRange() 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 var testRangesCached = [];
     13 test(function() {
     14  for (var j = 0; j < testRanges.length; j++) {
     15    test(function() {
     16      testRangesCached[j] = rangeFromEndpoints(eval(testRanges[j]));
     17    }, "Set up for range " + j + " " + testRanges[j]);
     18  }
     19  var detachedRange = document.createRange();
     20  detachedRange.detach();
     21  testRanges.push("detached");
     22  testRangesCached.push(detachedRange);
     23 }, "Setup");
     24 
     25 for (var i = 0; i < testPoints.length; i++) {
     26  var node = eval(testPoints[i])[0];
     27  var offset = eval(testPoints[i])[1];
     28 
     29  // isPointInRange is an unsigned long, so per WebIDL, we need to treat it
     30  // as though it wrapped to an unsigned 32-bit integer.
     31  var normalizedOffset = offset % Math.pow(2, 32);
     32  if (normalizedOffset < 0) {
     33    normalizedOffset += Math.pow(2, 32);
     34  }
     35 
     36  for (var j = 0; j < testRanges.length; j++) {
     37    test(function() {
     38      var range = testRangesCached[j].cloneRange();
     39 
     40      // "If node's root is different from the context object's root,
     41      // return false and terminate these steps."
     42      if (furthestAncestor(node) !== furthestAncestor(range.startContainer)) {
     43        assert_false(range.isPointInRange(node, offset),
     44          "Must return false if node has a different root from the context object");
     45        return;
     46      }
     47 
     48      // "If node is a doctype, throw an "InvalidNodeTypeError" exception
     49      // and terminate these steps."
     50      if (node.nodeType == Node.DOCUMENT_TYPE_NODE) {
     51        assert_throws_dom("INVALID_NODE_TYPE_ERR", function() {
     52          range.isPointInRange(node, offset);
     53        }, "Must throw InvalidNodeTypeError if node is a doctype");
     54        return;
     55      }
     56 
     57      // "If offset is greater than node's length, throw an
     58      // "IndexSizeError" exception and terminate these steps."
     59      if (normalizedOffset > nodeLength(node)) {
     60        assert_throws_dom("INDEX_SIZE_ERR", function() {
     61          range.isPointInRange(node, offset);
     62        }, "Must throw IndexSizeError if offset is greater than  length");
     63        return;
     64      }
     65 
     66      // "If (node, offset) is before start or after end, return false
     67      // and terminate these steps."
     68      if (getPosition(node, normalizedOffset, range.startContainer, range.startOffset) === "before"
     69      || getPosition(node, normalizedOffset, range.endContainer, range.endOffset) === "after") {
     70        assert_false(range.isPointInRange(node, offset),
     71          "Must return false if point is before start or after end");
     72        return;
     73      }
     74 
     75      // "Return true."
     76      assert_true(range.isPointInRange(node, offset),
     77        "Must return true if point is not before start, after end, or in different tree");
     78    }, "Point " + i + " " + testPoints[i] + ", range " + j + " " + testRanges[j]);
     79  }
     80 }
     81 
     82 testDiv.style.display = "none";
     83 </script>