tor-browser

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

Range-selectNode.html (4218B)


      1 <!doctype html>
      2 <title>Range.selectNode() and .selectNodeContents() 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 testSelectNode(range, node) {
     13    try {
     14        range.collapsed;
     15    } catch (e) {
     16        // Range is detached
     17        assert_throws_dom("INVALID_STATE_ERR", function () {
     18            range.selectNode(node);
     19        }, "selectNode() on a detached node must throw INVALID_STATE_ERR");
     20        assert_throws_dom("INVALID_STATE_ERR", function () {
     21            range.selectNodeContents(node);
     22        }, "selectNodeContents() on a detached node must throw INVALID_STATE_ERR");
     23        return;
     24    }
     25 
     26    if (!node.parentNode) {
     27        assert_throws_dom("INVALID_NODE_TYPE_ERR", function() {
     28            range.selectNode(node);
     29        }, "selectNode() on a node with no parent must throw INVALID_NODE_TYPE_ERR");
     30    } else {
     31        var index = 0;
     32        while (node.parentNode.childNodes[index] != node) {
     33            index++;
     34        }
     35 
     36        range.selectNode(node);
     37        assert_equals(range.startContainer, node.parentNode,
     38            "After selectNode(), startContainer must equal parent node");
     39        assert_equals(range.endContainer, node.parentNode,
     40            "After selectNode(), endContainer must equal parent node");
     41        assert_equals(range.startOffset, index,
     42            "After selectNode(), startOffset must be index of node in parent (" + index + ")");
     43        assert_equals(range.endOffset, index + 1,
     44            "After selectNode(), endOffset must be one plus index of node in parent (" + (index + 1) + ")");
     45    }
     46 
     47    if (node.nodeType == Node.DOCUMENT_TYPE_NODE) {
     48        assert_throws_dom("INVALID_NODE_TYPE_ERR", function () {
     49            range.selectNodeContents(node);
     50        }, "selectNodeContents() on a doctype must throw INVALID_NODE_TYPE_ERR");
     51    } else {
     52        range.selectNodeContents(node);
     53        assert_equals(range.startContainer, node,
     54            "After selectNodeContents(), startContainer must equal node");
     55        assert_equals(range.endContainer, node,
     56            "After selectNodeContents(), endContainer must equal node");
     57        assert_equals(range.startOffset, 0,
     58            "After selectNodeContents(), startOffset must equal 0");
     59        var len = nodeLength(node);
     60        assert_equals(range.endOffset, len,
     61            "After selectNodeContents(), endOffset must equal node length (" + len + ")");
     62    }
     63 }
     64 
     65 var range = document.createRange();
     66 var foreignRange = foreignDoc.createRange();
     67 var xmlRange = xmlDoc.createRange();
     68 var detachedRange = document.createRange();
     69 detachedRange.detach();
     70 var tests = [];
     71 function testTree(root, marker) {
     72    if (root.nodeType == Node.ELEMENT_NODE && root.id == "log") {
     73        // This is being modified during the tests, so let's not test it.
     74        return;
     75    }
     76    tests.push([marker + ": " + root.nodeName.toLowerCase() + " node, current doc's range, type " + root.nodeType, range, root]);
     77    tests.push([marker + ": " + root.nodeName.toLowerCase() + " node, foreign doc's range, type " + root.nodeType, foreignRange, root]);
     78    tests.push([marker + ": " + root.nodeName.toLowerCase() + " node, XML doc's range, type " + root.nodeType, xmlRange, root]);
     79    tests.push([marker + ": " + root.nodeName.toLowerCase() + " node, detached range, type " + root.nodeType, detachedRange, root]);
     80    for (var i = 0; i < root.childNodes.length; i++) {
     81        testTree(root.childNodes[i], marker + "[" + i + "]");
     82    }
     83 }
     84 testTree(document, "current doc");
     85 testTree(foreignDoc, "foreign doc");
     86 testTree(detachedDiv, "detached div in current doc");
     87 
     88 var otherTests = ["xmlDoc", "xmlElement", "detachedTextNode",
     89 "foreignTextNode", "xmlTextNode", "processingInstruction", "comment",
     90 "foreignComment", "xmlComment", "docfrag", "foreignDocfrag", "xmlDocfrag"];
     91 
     92 for (var i = 0; i < otherTests.length; i++) {
     93    testTree(window[otherTests[i]], otherTests[i]);
     94 }
     95 
     96 generate_tests(testSelectNode, tests);
     97 
     98 testDiv.style.display = "none";
     99 </script>