<!DOCTYPE html>
<title>Selection.removeRange tests</title>
<body>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="common.js"></script>
<script>
"use strict";

testRanges.forEach(function(rangeData, index) {
    var endpoints = eval(rangeData);
    if (!isSelectableNode(endpoints[0]) || !isSelectableNode(endpoints[2]))
        return;
    test(function() {
        var selection = getSelection();
        selection.removeAllRanges();
        var range = ownerDocument(endpoints[0]).createRange();
        range.setStart(endpoints[0], endpoints[1]);
        range.setEnd(endpoints[2], endpoints[3]);

        selection.addRange(range);
        assert_equals(selection.rangeCount, 1);
        selection.removeRange(range);
        assert_equals(selection.rangeCount, 0, 'Range should be correctly removed.');
        assert_equals(selection.anchorNode, null);
        assert_equals(selection.focusNode, null);

        selection.addRange(range);
        assert_equals(selection.rangeCount, 1);
        var equivalentRange = ownerDocument(endpoints[0]).createRange();
        equivalentRange.setStart(endpoints[0], endpoints[1]);
        equivalentRange.setEnd(endpoints[2], endpoints[3]);
        assert_throws_dom("NotFoundError",
                          function() { selection.removeRange(equivalentRange) },
                          "Removing a different range should throw");
        assert_equals(selection.rangeCount, 1, 'Equivalent Range should not remove the registered Range.');

    }, 'removeRange() with Range ' + index);
});

test(function() {
    var selection = getSelection();
    assert_throws_js(TypeError, function() { selection.removeRange(null); });
    assert_throws_js(TypeError, function() { selection.removeRange(selection); });
}, 'removeRange() argument is non-optional Range');
</script>
</body>
