Revision bca58b0cef32b342eece2c135fdc62e32b69e557 authored by moz-wptsync-bot on 16 March 2018, 13:38:52 UTC, committed by moz-wptsync-bot on 20 March 2018, 02:29:46 UTC
bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1445883
gecko-commit: 0f81334efa0a008db8931a41eef2d26a77d0e800
gecko-integration-branch: mozilla-inbound
gecko-reviewers: smaug
1 parent c51eaff
Raw File
dir-manual.html
<!doctype html>
<title>Selection direction tests</title>
<meta charset=utf-8>
<div id=test>
    <p>This is a manual test, since there's no way to synthesize keyboard or
    mouse input.  Click after the letter "c" in the following paragraph and
    drag backwards so that both the "b" and the "c" are highlighted, then click
    the "Test" button:

    <p>abcd <button onclick=testDirection()>Test</button>

    <p>efghi
</div>
<div id=log></div>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script>
setup({explicit_done: true});

function testDirection() {
    var testDiv = document.getElementById("test");
    var p = testDiv.getElementsByTagName("p")[1].firstChild;
    var selection = getSelection();
    var range = selection.getRangeAt(0);
    test(function() {
        assert_equals(range.toString(), "bc");
    }, "The expected range is selected");
    test(function() {
        assert_equals(selection.anchorNode, p);
        assert_equals(selection.focusNode, p);
    }, "Expected node is initially selected");
    test(function() {
        assert_array_equals([selection.anchorOffset, selection.focusOffset].sort(), [1, 3]);
    }, "Expected offsets are initially selected (maybe not in order)");
    test(function() {
        assert_equals(selection.anchorOffset, 3);
        assert_equals(selection.focusOffset, 1);
    }, "Offsets are backwards for initial selection"),
    test(function() {
        assert_equals(selection.anchorNode, range.endContainer);
        assert_equals(selection.anchorOffset, range.endOffset);
        assert_equals(selection.focusNode, range.startContainer);
        assert_equals(selection.focusOffset, range.startOffset);
    }, "Offsets match the range for initial selection");

    // Per spec, the direction of the selection remains even if you zap a range
    // and add a new one.
    test(function() {
        selection.removeRange(range);
        range = document.createRange();
        p = testDiv.getElementsByTagName("p")[0].firstChild;
        range.setStart(p, 0);
        range.setEnd(p, 4);
        assert_equals(range.toString(), "This");
        selection.addRange(range);
    }, "removeRange()/addRange() successful");
    test(function() {
        assert_equals(selection.anchorNode, p);
        assert_equals(selection.focusNode, p);
    }, "Expected node is selected after remove/addRange()");
    test(function() {
        assert_array_equals([selection.anchorOffset, selection.focusOffset].sort(), [0, 4]);
    }, "Expected offsets are selected after remove/addRange() (maybe not in order)");
    test(function() {
        assert_equals(selection.anchorOffset, 4);
        assert_equals(selection.focusOffset, 0);
    }, "Offsets are backwards after remove/addRange()"),
    test(function() {
        assert_equals(selection.anchorNode, range.endContainer);
        assert_equals(selection.anchorOffset, range.endOffset);
        assert_equals(selection.focusNode, range.startContainer);
        assert_equals(selection.focusOffset, range.startOffset);
    }, "Offsets match the range after remove/addRange()");

    // But if you call removeAllRanges(), the direction should reset to
    // forwards.
    test(function() {
        selection.removeAllRanges();
        range = document.createRange();
        p = testDiv.getElementsByTagName("p")[2].firstChild;
        range.setStart(p, 2);
        range.setEnd(p, 5);
        assert_equals(range.toString(), "ghi");
        selection.addRange(range);
    }, "removeAllRanges() successful");
    test(function() {
        assert_equals(selection.anchorNode, p);
        assert_equals(selection.focusNode, p);
    }, "Expected node is selected after removeAllRanges()");
    test(function() {
        assert_array_equals([selection.anchorOffset, selection.focusOffset].sort(), [2, 5]);
    }, "Expected offsets are selected after removeAllRanges() (maybe not in order)");
    test(function() {
        assert_equals(selection.anchorOffset, 2);
        assert_equals(selection.focusOffset, 5);
    }, "Offsets are forwards after removeAllRanges()");
    test(function() {
        assert_equals(selection.anchorNode, range.startContainer);
        assert_equals(selection.anchorOffset, range.startOffset);
        assert_equals(selection.focusNode, range.endContainer);
        assert_equals(selection.focusOffset, range.endOffset);
    }, "Offsets match the range after removeAllRanges()");

    done();
}
</script>
back to top