<!doctype html>
<title>Selection.removeAllRanges() tests</title>
<div id=log></div>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=common.js></script>
<script>
"use strict";

// Also test a selection with no ranges
testRanges.unshift("[]");

var range = rangeFromEndpoints([paras[0].firstChild, 0, paras[0].firstChild, 1]);

for (var i = 0; i < testRanges.length; i++) {
    test(function() {
        setSelectionForwards(eval(testRanges[i]));
        selection.removeAllRanges();
        assert_equals(selection.rangeCount, 0,
            "After removeAllRanges(), rangeCount must be 0");
        // Test that it's forwards
        selection.addRange(range);
        assert_equals(selection.anchorOffset, selection.getRangeAt(0).startOffset,
            "After removeAllRanges(), addRange() must be forwards, so anchorOffset must equal startOffset rather than endOffset");
        assert_equals(selection.focusOffset, selection.getRangeAt(0).endOffset,
            "After removeAllRanges(), addRange() must be forwards, so focusOffset must equal endOffset rather than startOffset");
    }, "Range " + i + " " + testRanges[i] + " forwards");

    // Copy-pasted from above
    test(function() {
        setSelectionBackwards(eval(testRanges[i]));
        selection.removeAllRanges();
        assert_equals(selection.rangeCount, 0,
            "After removeAllRanges(), rangeCount must be 0");
        // Test that it's forwards
        selection.addRange(range);
        assert_equals(selection.anchorOffset, selection.getRangeAt(0).startOffset,
            "After removeAllRanges(), addRange() must be forwards, so anchorOffset must equal startOffset rather than endOffset");
        assert_equals(selection.focusOffset, selection.getRangeAt(0).endOffset,
            "After removeAllRanges(), addRange() must be forwards, so focusOffset must equal endOffset rather than startOffset");
    }, "Range " + i + " " + testRanges[i] + " backwards");
}

testDiv.style.display = "none";
</script>
