| Index: LayoutTests/editing/selection/character-data-mutation.html
|
| diff --git a/LayoutTests/editing/selection/character-data-mutation.html b/LayoutTests/editing/selection/character-data-mutation.html
|
| index 25d3cbd90b00c6779e94cf94ad9f978c9bd10f0b..2b3e50bc611461eb0ac02f5820a7c36e45b834cf 100644
|
| --- a/LayoutTests/editing/selection/character-data-mutation.html
|
| +++ b/LayoutTests/editing/selection/character-data-mutation.html
|
| @@ -1,107 +1,107 @@
|
| -<!DOCTYPE html>
|
| -<html>
|
| -<body>
|
| -<p>This test ensures WebKit adjusts or clears the selection when either the start or the end container was modified.</p>
|
| -<div id="test" contenteditable></div>
|
| -<pre>
|
| -<script>
|
| -
|
| -var test = document.getElementById('test');
|
| -test.focus();
|
| -
|
| -if (window.testRunner)
|
| - testRunner.dumpAsText();
|
| -
|
| -var baseIsFirst = true;
|
| -
|
| -function runSingleTest(actor, isStart, expectedOffset) {
|
| - test.innerHTML = '<span>hello</span> world';
|
| -
|
| - // Select "llo wo"
|
| - var selection = window.getSelection();
|
| - if (baseIsFirst)
|
| - selection.setBaseAndExtent(test.firstChild.firstChild, 2, test.lastChild, 3);
|
| - else
|
| - selection.setBaseAndExtent(test.lastChild, 3, test.firstChild.firstChild, 2);
|
| - var originalOffset = isStart ? selection.getRangeAt(0).startOffset : selection.getRangeAt(0).endOffset;
|
| - var action = isStart ? actor(test.firstChild.firstChild, 'startContainer') : actor(test.lastChild, 'endContainer');
|
| - var message = null;
|
| - var passed = false;
|
| - if (typeof(expectedOffset) == 'undefined') {
|
| - if (selection.rangeCount)
|
| - message = 'did not clear selection';
|
| - else {
|
| - message = 'cleared selection';
|
| - passed = true;
|
| - }
|
| - } else if (!selection.rangeCount)
|
| - message = 'cleared selection unexpectedly';
|
| - else if ((selection.getRangeAt(0).startContainer == selection.baseNode
|
| - && selection.getRangeAt(0).startOffset == selection.baseOffset) ^ baseIsFirst)
|
| - message = 'exchanged base and extent';
|
| - else {
|
| - var actualOffset = isStart ? selection.getRangeAt(0).startOffset : selection.getRangeAt(0).endOffset;
|
| - message = actualOffset == originalOffset ? 'did not move selection' : 'moved the offset from ' +
|
| - originalOffset + ' to ' + actualOffset;
|
| -
|
| - if (actualOffset != expectedOffset)
|
| - message += ' but expected ' + expectedOffset;
|
| - else
|
| - passed = true;
|
| - }
|
| -
|
| - document.write((passed ? 'PASS: ' : 'FAIL: ') + action + ' ' + message + '\n');
|
| -}
|
| -
|
| -function runTestPairs(actor, expectedStartOffset, expectedEndOffset, skipEnd) {
|
| - runSingleTest(actor, true, expectedStartOffset);
|
| - if (!skipEnd)
|
| - runSingleTest(actor, false, expectedEndOffset);
|
| -}
|
| -
|
| -function runTests() {
|
| - runTestPairs(function() { test.removeChild(test.firstChild); return 'Removing the parent of startContainer'; }, 0, undefined, true);
|
| - runTestPairs(function(node, nodeName) { node.nodeValue = 'a'; return 'Replacing nodeValue of ' + nodeName; }, 0, 0);
|
| - runTestPairs(function(node, nodeName) { node.appendData(' WebKit'); return 'Appending " WebKit" to ' + nodeName; }, 2, 3);
|
| -
|
| - runTestPairs(function(node, nodeName) { node.insertData(2, 'WebKit ');
|
| - return 'Inserting " WebKit" to ' + nodeName + ' before the end point'; }, 2, 10);
|
| - runTestPairs(function(node, nodeName) { node.insertData(3, 'WebKit ');
|
| - return 'Inserting " WebKit" to ' + nodeName + ' after the end point'; }, 2, 3);
|
| -
|
| - runTestPairs(function(node, nodeName) { node.deleteData(1, 4);
|
| - return 'Removing text in ' + nodeName + ' containing the end point'; }, 1, 1);
|
| - runTestPairs(function(node, nodeName) { node.deleteData(0, 3);
|
| - return 'Removing text in ' + nodeName + ' containing the start point'; }, 0, 0);
|
| - runTestPairs(function(node, nodeName) { node.deleteData(0, 2);
|
| - return 'Removing 2 characters in ' + nodeName + ' before the end point'; }, 0, 1);
|
| - runTestPairs(function(node, nodeName) { node.deleteData(0, 3);
|
| - return 'Removing 3 characters at the beginning of ' + nodeName; }, 0, 0);
|
| - runTestPairs(function(node, nodeName) { node.deleteData(3, 2);
|
| - return 'Removing text in ' + nodeName + ' after the end point'; }, 2, 3);
|
| -
|
| - runTestPairs(function(node, nodeName) { node.replaceData(1, 4, '1234');
|
| - return 'Replacing text in ' + nodeName + ' containing the end point'; }, 1, 1);
|
| - runTestPairs(function(node, nodeName) { node.replaceData(0, 2, '12');
|
| - return 'Replacing 2 characters in ' + nodeName + ' by 2 characters before the end point'; }, 0, 3);
|
| - runTestPairs(function(node, nodeName) { node.replaceData(0, 2, '1');
|
| - return 'Replacing 2 characters in ' + nodeName + ' by 1 characters before the end point'; }, 0, 2);
|
| - runTestPairs(function(node, nodeName) { node.replaceData(3, 2, '12');
|
| - return 'Replacing 2 characters in ' + nodeName + ' by 2 characters after the end point'; }, 2, 3);
|
| -}
|
| -
|
| -document.write('Base is first:\n');
|
| -runTests();
|
| -
|
| -baseIsFirst = false;
|
| -
|
| -document.write('\nExtent is first:\n');
|
| -runTests();
|
| -
|
| -test.style.display = 'none';
|
| -
|
| -document.write('\nDONE');
|
| -</script>
|
| -</pre>
|
| -</body>
|
| -</html>
|
| +<!DOCTYPE html>
|
| +<html>
|
| +<body>
|
| +<p>This test ensures WebKit adjusts or clears the selection when either the start or the end container was modified.</p>
|
| +<div id="test" contenteditable></div>
|
| +<pre>
|
| +<script>
|
| +
|
| +var test = document.getElementById('test');
|
| +test.focus();
|
| +
|
| +if (window.testRunner)
|
| + testRunner.dumpAsText();
|
| +
|
| +var baseIsFirst = true;
|
| +
|
| +function runSingleTest(actor, isStart, expectedOffset) {
|
| + test.innerHTML = '<span>hello</span> world';
|
| +
|
| + // Select "llo wo"
|
| + var selection = window.getSelection();
|
| + if (baseIsFirst)
|
| + selection.setBaseAndExtent(test.firstChild.firstChild, 2, test.lastChild, 3);
|
| + else
|
| + selection.setBaseAndExtent(test.lastChild, 3, test.firstChild.firstChild, 2);
|
| + var originalOffset = isStart ? selection.getRangeAt(0).startOffset : selection.getRangeAt(0).endOffset;
|
| + var action = isStart ? actor(test.firstChild.firstChild, 'startContainer') : actor(test.lastChild, 'endContainer');
|
| + var message = null;
|
| + var passed = false;
|
| + if (typeof(expectedOffset) == 'undefined') {
|
| + if (selection.rangeCount)
|
| + message = 'did not clear selection';
|
| + else {
|
| + message = 'cleared selection';
|
| + passed = true;
|
| + }
|
| + } else if (!selection.rangeCount)
|
| + message = 'cleared selection unexpectedly';
|
| + else if ((selection.getRangeAt(0).startContainer == selection.baseNode
|
| + && selection.getRangeAt(0).startOffset == selection.baseOffset) ^ baseIsFirst)
|
| + message = 'exchanged base and extent';
|
| + else {
|
| + var actualOffset = isStart ? selection.getRangeAt(0).startOffset : selection.getRangeAt(0).endOffset;
|
| + message = actualOffset == originalOffset ? 'did not move selection' : 'moved the offset from ' +
|
| + originalOffset + ' to ' + actualOffset;
|
| +
|
| + if (actualOffset != expectedOffset)
|
| + message += ' but expected ' + expectedOffset;
|
| + else
|
| + passed = true;
|
| + }
|
| +
|
| + document.write((passed ? 'PASS: ' : 'FAIL: ') + action + ' ' + message + '\n');
|
| +}
|
| +
|
| +function runTestPairs(actor, expectedStartOffset, expectedEndOffset, skipEnd) {
|
| + runSingleTest(actor, true, expectedStartOffset);
|
| + if (!skipEnd)
|
| + runSingleTest(actor, false, expectedEndOffset);
|
| +}
|
| +
|
| +function runTests() {
|
| + runTestPairs(function() { test.removeChild(test.firstChild); return 'Removing the parent of startContainer'; }, 0, undefined, true);
|
| + runTestPairs(function(node, nodeName) { node.nodeValue = 'a'; return 'Replacing nodeValue of ' + nodeName; }, 0, 0);
|
| + runTestPairs(function(node, nodeName) { node.appendData(' WebKit'); return 'Appending " WebKit" to ' + nodeName; }, 2, 3);
|
| +
|
| + runTestPairs(function(node, nodeName) { node.insertData(2, 'WebKit ');
|
| + return 'Inserting " WebKit" to ' + nodeName + ' before the end point'; }, 2, 10);
|
| + runTestPairs(function(node, nodeName) { node.insertData(3, 'WebKit ');
|
| + return 'Inserting " WebKit" to ' + nodeName + ' after the end point'; }, 2, 3);
|
| +
|
| + runTestPairs(function(node, nodeName) { node.deleteData(1, 4);
|
| + return 'Removing text in ' + nodeName + ' containing the end point'; }, 1, 1);
|
| + runTestPairs(function(node, nodeName) { node.deleteData(0, 3);
|
| + return 'Removing text in ' + nodeName + ' containing the start point'; }, 0, 0);
|
| + runTestPairs(function(node, nodeName) { node.deleteData(0, 2);
|
| + return 'Removing 2 characters in ' + nodeName + ' before the end point'; }, 0, 1);
|
| + runTestPairs(function(node, nodeName) { node.deleteData(0, 3);
|
| + return 'Removing 3 characters at the beginning of ' + nodeName; }, 0, 0);
|
| + runTestPairs(function(node, nodeName) { node.deleteData(3, 2);
|
| + return 'Removing text in ' + nodeName + ' after the end point'; }, 2, 3);
|
| +
|
| + runTestPairs(function(node, nodeName) { node.replaceData(1, 4, '1234');
|
| + return 'Replacing text in ' + nodeName + ' containing the end point'; }, 1, 1);
|
| + runTestPairs(function(node, nodeName) { node.replaceData(0, 2, '12');
|
| + return 'Replacing 2 characters in ' + nodeName + ' by 2 characters before the end point'; }, 0, 3);
|
| + runTestPairs(function(node, nodeName) { node.replaceData(0, 2, '1');
|
| + return 'Replacing 2 characters in ' + nodeName + ' by 1 characters before the end point'; }, 0, 2);
|
| + runTestPairs(function(node, nodeName) { node.replaceData(3, 2, '12');
|
| + return 'Replacing 2 characters in ' + nodeName + ' by 2 characters after the end point'; }, 2, 3);
|
| +}
|
| +
|
| +document.write('Base is first:\n');
|
| +runTests();
|
| +
|
| +baseIsFirst = false;
|
| +
|
| +document.write('\nExtent is first:\n');
|
| +runTests();
|
| +
|
| +test.style.display = 'none';
|
| +
|
| +document.write('\nDONE');
|
| +</script>
|
| +</pre>
|
| +</body>
|
| +</html>
|
|
|