tor-browser

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

dir-manual.html (4490B)


      1 <!doctype html>
      2 <title>Selection direction tests</title>
      3 <meta charset=utf-8>
      4 <div id=test>
      5    <p>This is a manual test, since there's no way to synthesize keyboard or
      6    mouse input.  Click after the letter "c" in the following paragraph and
      7    drag backwards so that both the "b" and the "c" are highlighted, then click
      8    the "Test" button:
      9 
     10    <p>abcd <button onclick=testDirection()>Test</button>
     11 
     12    <p>efghi
     13 </div>
     14 <div id=log></div>
     15 <script src=/resources/testharness.js></script>
     16 <script src=/resources/testharnessreport.js></script>
     17 <script>
     18 setup({explicit_done: true});
     19 
     20 function testDirection() {
     21    var testDiv = document.getElementById("test");
     22    var p = testDiv.getElementsByTagName("p")[1].firstChild;
     23    var selection = getSelection();
     24    var range = selection.getRangeAt(0);
     25    test(function() {
     26        assert_equals(range.toString(), "bc");
     27    }, "The expected range is selected");
     28    test(function() {
     29        assert_equals(selection.anchorNode, p);
     30        assert_equals(selection.focusNode, p);
     31    }, "Expected node is initially selected");
     32    test(function() {
     33        assert_array_equals([selection.anchorOffset, selection.focusOffset].sort(), [1, 3]);
     34    }, "Expected offsets are initially selected (maybe not in order)");
     35    test(function() {
     36        assert_equals(selection.anchorOffset, 3);
     37        assert_equals(selection.focusOffset, 1);
     38    }, "Offsets are backwards for initial selection"),
     39    test(function() {
     40        assert_equals(selection.anchorNode, range.endContainer);
     41        assert_equals(selection.anchorOffset, range.endOffset);
     42        assert_equals(selection.focusNode, range.startContainer);
     43        assert_equals(selection.focusOffset, range.startOffset);
     44    }, "Offsets match the range for initial selection");
     45 
     46    // Per spec, the direction of the selection remains even if you zap a range
     47    // and add a new one.
     48    test(function() {
     49        selection.removeRange(range);
     50        range = document.createRange();
     51        p = testDiv.getElementsByTagName("p")[0].firstChild;
     52        range.setStart(p, 0);
     53        range.setEnd(p, 4);
     54        assert_equals(range.toString(), "This");
     55        selection.addRange(range);
     56    }, "removeRange()/addRange() successful");
     57    test(function() {
     58        assert_equals(selection.anchorNode, p);
     59        assert_equals(selection.focusNode, p);
     60    }, "Expected node is selected after remove/addRange()");
     61    test(function() {
     62        assert_array_equals([selection.anchorOffset, selection.focusOffset].sort(), [0, 4]);
     63    }, "Expected offsets are selected after remove/addRange() (maybe not in order)");
     64    test(function() {
     65        assert_equals(selection.anchorOffset, 4);
     66        assert_equals(selection.focusOffset, 0);
     67    }, "Offsets are backwards after remove/addRange()"),
     68    test(function() {
     69        assert_equals(selection.anchorNode, range.endContainer);
     70        assert_equals(selection.anchorOffset, range.endOffset);
     71        assert_equals(selection.focusNode, range.startContainer);
     72        assert_equals(selection.focusOffset, range.startOffset);
     73    }, "Offsets match the range after remove/addRange()");
     74 
     75    // But if you call removeAllRanges(), the direction should reset to
     76    // forwards.
     77    test(function() {
     78        selection.removeAllRanges();
     79        range = document.createRange();
     80        p = testDiv.getElementsByTagName("p")[2].firstChild;
     81        range.setStart(p, 2);
     82        range.setEnd(p, 5);
     83        assert_equals(range.toString(), "ghi");
     84        selection.addRange(range);
     85    }, "removeAllRanges() successful");
     86    test(function() {
     87        assert_equals(selection.anchorNode, p);
     88        assert_equals(selection.focusNode, p);
     89    }, "Expected node is selected after removeAllRanges()");
     90    test(function() {
     91        assert_array_equals([selection.anchorOffset, selection.focusOffset].sort(), [2, 5]);
     92    }, "Expected offsets are selected after removeAllRanges() (maybe not in order)");
     93    test(function() {
     94        assert_equals(selection.anchorOffset, 2);
     95        assert_equals(selection.focusOffset, 5);
     96    }, "Offsets are forwards after removeAllRanges()");
     97    test(function() {
     98        assert_equals(selection.anchorNode, range.startContainer);
     99        assert_equals(selection.anchorOffset, range.startOffset);
    100        assert_equals(selection.focusNode, range.endContainer);
    101        assert_equals(selection.focusOffset, range.endOffset);
    102    }, "Offsets match the range after removeAllRanges()");
    103 
    104    done();
    105 }
    106 </script>