tor-browser

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

Range-comparePoint.html (3347B)


      1 <!doctype html>
      2 <title>Range.comparePoint() 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 // Will be filled in on the first run for that range
     13 var testRangesCached = [];
     14 
     15 for (var i = 0; i < testPoints.length; i++) {
     16  var node = eval(testPoints[i])[0];
     17  var offset = eval(testPoints[i])[1];
     18 
     19  // comparePoint is an unsigned long, so per WebIDL, we need to treat it as
     20  // though it wrapped to an unsigned 32-bit integer.
     21  var normalizedOffset = offset % Math.pow(2, 32);
     22  if (normalizedOffset < 0) {
     23    normalizedOffset += Math.pow(2, 32);
     24  }
     25 
     26  for (var j = 0; j < testRanges.length; j++) {
     27    test(function() {
     28      if (testRangesCached[j] === undefined) {
     29        try {
     30          testRangesCached[j] = rangeFromEndpoints(eval(testRanges[i]));
     31        } catch(e) {
     32          testRangesCached[j] = null;
     33        }
     34      }
     35      assert_not_equals(testRangesCached[j], null,
     36        "Setting up the range failed");
     37 
     38      var range = testRangesCached[j].cloneRange();
     39 
     40      // "If node's root is different from the context object's root,
     41      // throw a "WrongDocumentError" exception and terminate these
     42      // steps."
     43      if (furthestAncestor(node) !== furthestAncestor(range.startContainer)) {
     44        assert_throws_dom("WRONG_DOCUMENT_ERR", function() {
     45          range.comparePoint(node, offset);
     46        }, "Must throw WrongDocumentError if node and range have different roots");
     47        return;
     48      }
     49 
     50      // "If node is a doctype, throw an "InvalidNodeTypeError" exception
     51      // and terminate these steps."
     52      if (node.nodeType == Node.DOCUMENT_TYPE_NODE) {
     53        assert_throws_dom("INVALID_NODE_TYPE_ERR", function() {
     54          range.comparePoint(node, offset);
     55        }, "Must throw InvalidNodeTypeError if node is a doctype");
     56        return;
     57      }
     58 
     59      // "If offset is greater than node's length, throw an
     60      // "IndexSizeError" exception and terminate these steps."
     61      if (normalizedOffset > nodeLength(node)) {
     62        assert_throws_dom("INDEX_SIZE_ERR", function() {
     63          range.comparePoint(node, offset);
     64        }, "Must throw IndexSizeError if offset is greater than  length");
     65        return;
     66      }
     67 
     68      // "If (node, offset) is before start, return −1 and terminate
     69      // these steps."
     70      if (getPosition(node, normalizedOffset, range.startContainer, range.startOffset) === "before") {
     71        assert_equals(range.comparePoint(node, offset), -1,
     72          "Must return -1 if point is before start");
     73        return;
     74      }
     75 
     76      // "If (node, offset) is after end, return 1 and terminate these
     77      // steps."
     78      if (getPosition(node, normalizedOffset, range.endContainer, range.endOffset) === "after") {
     79        assert_equals(range.comparePoint(node, offset), 1,
     80          "Must return 1 if point is after end");
     81        return;
     82      }
     83 
     84      // "Return 0."
     85      assert_equals(range.comparePoint(node, offset), 0,
     86        "Must return 0 if point is neither before start nor after end");
     87    }, "Point " + i + " " + testPoints[i] + ", range " + j + " " + testRanges[j]);
     88  }
     89 }
     90 
     91 testDiv.style.display = "none";
     92 </script>