blob: 02f0f0a2eed9e1495500da03164c83b9591ca10f [file] [log] [blame]
<!doctype html>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="../assert_selection.js"></script>
<script>
function swapMarks(string) {
return string.replace('^', '$').replace('|', '^').replace('$', '|');
}
function test_selection(sample, closure, expected, description) {
test(() => assert_selection(sample, closure, expected),
description + '; anchor is first');
test(() => assert_selection(swapMarks(sample), closure, swapMarks(expected)),
description + '; focus is first');
}
test_selection(
'<div contenteditable><span>he^llo</span> wo|rld</div>',
selection => selection.document.querySelector('span').remove(),
'<div contenteditable>^ wo|rld</div>',
'Remove the parent of startContainer');
// set nodeValue
test_selection(
'<div contenteditable><span>he^llo</span> wo|rld</div>',
selection => selection.document.querySelector('span').firstChild.nodeValue = 'a',
'<div contenteditable><span>^a</span> wo|rld</div>',
'Replace nodeValue of startContainer');
test_selection(
'<div contenteditable><span>he^llo</span> wo|rld</div>',
selection => selection.document.querySelector('div').lastChild.nodeValue = 'a',
'<div contenteditable><span>he^llo</span>|a</div>',
'Replace nodeValue of endContainer');
// appendData
test_selection(
'<div contenteditable><span>he^llo</span> wo|rld</div>',
selection => selection.document.querySelector('span').firstChild.appendData(' xyz'),
'<div contenteditable><span>he^llo xyz</span> wo|rld</div>',
'Appending " xyz" to startContainer');
test_selection(
'<div contenteditable><span>he^llo</span> wo|rld</div>',
selection => selection.document.querySelector('div').lastChild.appendData(' xyz'),
'<div contenteditable><span>he^llo</span> wo|rld xyz</div>',
'Appending " xyz" to endContainer');
// insertData
test_selection(
'<div contenteditable><span>he^llo</span> wo|rld</div>',
selection => selection.document.querySelector('span').firstChild.insertData(2, ' xyz'),
'<div contenteditable><span>he^ xyzllo</span> wo|rld</div>',
'Inserting " xyz" to startContainer before the end point');
test_selection(
'<div contenteditable><span>he^llo</span> wo|rld</div>',
selection => selection.document.querySelector('div').lastChild.insertData(2, ' xyz'),
'<div contenteditable><span>he^llo</span> w xyzo|rld</div>',
'Inserting " xyz" to endContainer before the end point');
test_selection(
'<div contenteditable><span>he^llo</span> wo|rld</div>',
selection => selection.document.querySelector('span').firstChild.insertData(3, ' xyz'),
'<div contenteditable><span>he^l xyzlo</span> wo|rld</div>',
'Inserting " xyz" to startContainer before the after point');
test_selection(
'<div contenteditable><span>he^llo</span> wo|rld</div>',
selection => selection.document.querySelector('div').lastChild.insertData(3, ' xyz'),
'<div contenteditable><span>he^llo</span> wo| xyzrld</div>',
'Inserting " xyz" to endContainer before the after point');
// deleteData
test_selection(
'<div contenteditable><span>he^llo</span> wo|rld</div>',
selection => selection.document.querySelector('span').firstChild.deleteData(1, 4),
'<div contenteditable><span>h^</span> wo|rld</div>',
'deleteData(1, 4) in startContainer');
test_selection(
'<div contenteditable><span>he^llo</span> wo|rld</div>',
selection => selection.document.querySelector('div').lastChild.deleteData(1, 4),
'<div contenteditable><span>he^llo</span> |d</div>',
'deleteData(1, 4) in endContainer');
test_selection(
'<div contenteditable><span>he^llo</span> wo|rld</div>',
selection => selection.document.querySelector('span').firstChild.deleteData(0, 3),
'<div contenteditable><span>^lo</span> wo|rld</div>',
'deleteData(0, 3) in startContainer');
test_selection(
'<div contenteditable><span>he^llo</span> wo|rld</div>',
selection => selection.document.querySelector('div').lastChild.deleteData(0, 3),
'<div contenteditable><span>he^llo</span>|rld</div>',
'deleteData(0, 3) in endContainer');
test_selection(
'<div contenteditable><span>he^llo</span> wo|rld</div>',
selection => selection.document.querySelector('span').firstChild.deleteData(0, 2),
'<div contenteditable><span>^llo</span> wo|rld</div>',
'deleteData(0, 2) in startContainer');
test_selection(
'<div contenteditable><span>he^llo</span> wo|rld</div>',
selection => selection.document.querySelector('div').lastChild.deleteData(0, 2),
'<div contenteditable><span>he^llo</span>o|rld</div>',
'deleteData(0, 2) in endContainer');
test_selection(
'<div contenteditable><span>he^llo</span> wo|rld</div>',
selection => selection.document.querySelector('span').firstChild.deleteData(3, 2),
'<div contenteditable><span>he^l</span> wo|rld</div>',
'deleteData(3, 2) in startContainer');
test_selection(
'<div contenteditable><span>he^llo</span> wo|rld</div>',
selection => selection.document.querySelector('div').lastChild.deleteData(3, 2),
'<div contenteditable><span>he^llo</span> wo|d</div>',
'deleteData(3, 2) in endContainer');
// replaceData
test_selection(
'<div contenteditable><span>he^llo</span> wo|rld</div>',
selection => selection.document.querySelector('span').firstChild
.replaceData(1, 4, '1234'),
'<div contenteditable><span>h^1234</span> wo|rld</div>',
'replaceData(1, 4, "1234") in startContainer');
test_selection(
'<div contenteditable><span>he^llo</span> wo|rld</div>',
selection => selection.document.querySelector('div').lastChild
.replaceData(1, 4, '1234'),
'<div contenteditable><span>he^llo</span> |1234d</div>',
'replaceData(1, 4, "1234") in endContainer');
test_selection(
'<div contenteditable><span>he^llo</span> wo|rld</div>',
selection => selection.document.querySelector('span').firstChild
.replaceData(0, 2, '12'),
'<div contenteditable><span>^12llo</span> wo|rld</div>',
'replaceData(0, 2, "12") in startContainer');
test_selection(
'<div contenteditable><span>he^llo</span> wo|rld</div>',
selection => selection.document.querySelector('div').lastChild
.replaceData(0, 2, '12'),
'<div contenteditable><span>he^llo</span>12o|rld</div>',
'replaceData(0, 2, "12") in endContainer');
test_selection(
'<div contenteditable><span>he^llo</span> wo|rld</div>',
selection => selection.document.querySelector('span').firstChild
.replaceData(0, 2, '1'),
'<div contenteditable><span>^1llo</span> wo|rld</div>',
'replaceData(0, 2, "1") in startContainer');
test_selection(
'<div contenteditable><span>he^llo</span> wo|rld</div>',
selection => selection.document.querySelector('div').lastChild
.replaceData(0, 2, '1'),
'<div contenteditable><span>he^llo</span>1o|rld</div>',
'replaceData(0, 2, "1") in endContainer');
test_selection(
'<div contenteditable><span>he^llo</span> wo|rld</div>',
selection => selection.document.querySelector('span').firstChild
.replaceData(3, 2, '12'),
'<div contenteditable><span>he^l12</span> wo|rld</div>',
'replaceData(3, 2, "12") in startContainer');
test_selection(
'<div contenteditable><span>he^llo</span> wo|rld</div>',
selection => selection.document.querySelector('div').lastChild
.replaceData(3, 2, '12'),
'<div contenteditable><span>he^llo</span> wo|12d</div>',
'replaceData(3, 2, "12") in endContainer');
</script>