blob: 973864c657171d92f63afab96fdf95632bb87177 [file] [log] [blame]
<!DOCTYPE html>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<p>abcdef</p>
<script>
test(() => {
let selection = getSelection();
selection.removeAllRanges();
let range = document.createRange();
let text = document.querySelector('p').firstChild;
range.setStart(text, 1);
range.setEnd(text, 2);
selection.addRange(range);
assert_equals(selection.anchorNode, text);
assert_equals(selection.anchorOffset, 1);
assert_equals(selection.focusNode, text);
assert_equals(selection.focusOffset, 2);
range.setStart(text, 0);
assert_equals(selection.anchorOffset, 0);
}, 'Mutation of Range after adding it to Selection should update Selection attributes.');
test(() => {
let selection = getSelection();
selection.removeAllRanges();
let range = document.createRange();
let text = document.querySelector('p').firstChild;
range.setStart(text, 1);
range.setEnd(text, 2);
selection.addRange(range);
assert_equals(selection.anchorNode, text);
assert_equals(selection.anchorOffset, 1);
assert_equals(selection.focusNode, text);
assert_equals(selection.focusOffset, 2);
text.parentNode.contentEditable = true;
range.setStart(text, 0);
assert_equals(selection.anchorOffset, 0);
assert_not_equals(document.activeElement, text.parentNode);
}, 'Mutation of Range after adding it to Selection should not focus on editable anchor.');
test(() => {
let selection = getSelection();
selection.removeAllRanges();
let range = document.createRange();
range.selectNode(document.body);
selection.addRange(range);
assert_equals(selection.rangeCount, 1);
let document2 = document.implementation.createHTMLDocument();
document2.innerHTML = '<html><body>abc</body></html>';
range.selectNode(document2.body);
// TODO(tkent): The specification says nothing about such case. For now, we
// unregister the Range from the Selection for ease of implementation
// though Firefox and Edge keep |selection.getRangeAt(0) == range|.
assert_equals(selection.rangeCount, 0);
}, 'Switching Range document should clear registered Selection.');
test(() => {
let selection = getSelection();
selection.removeAllRanges();
let range = document.createRange();
range.selectNode(document.body);
selection.addRange(range);
assert_equals(selection.rangeCount, 1);
let span = document.createElement('span');
span.innerHTML = 'text';
range.selectNode(span.firstChild);
// TODO(tkent): The specification says nothing about such case. For now, we
// unregister the Range from the Selection for ease of implementation
// though Firefox and Edge keep |selection.getRangeAt(0) == range|.
assert_equals(selection.rangeCount, 0);
}, 'Updating Range for another root should clear registered Selection.');
</script>