Index: LayoutTests/editing/editing.js |
diff --git a/LayoutTests/editing/editing.js b/LayoutTests/editing/editing.js |
index be20a1c4150c6bf2c1ea547317aaf8f0dd36baca..fb9a5ecc4945262521801d1f8c71f1d8c8bd0e71 100644 |
--- a/LayoutTests/editing/editing.js |
+++ b/LayoutTests/editing/editing.js |
@@ -893,16 +893,55 @@ function forwardDeleteCommand() { |
window.queueCommand = queueCommand; |
})(); |
+function focusOnFirstTextInTestElementIfExists() { |
+ var elem = document.getElementById("test"); |
+ var selection = window.getSelection(); |
+ if (elem) { |
+ var traverse = function (node, offset, condition) { |
+ var obj = condition(node, offset); |
+ if (obj) |
+ return obj; |
+ |
+ var children = node.childNodes; |
+ var len = children.length; |
+ for (var i = 0; i < len; i++) { |
+ var child = children[i]; |
+ obj = traverse(child, i, condition); |
+ if (obj) |
+ return obj; |
+ } |
+ return null; |
+ } |
+ |
+ var firstVisiblePosition = traverse(elem, 0, function (node, offset) { |
+ if (node.nodeName == '#text') { |
+ offset = 0; |
+ while (offset < node.textContent.length && node.textContent[offset] == '\n') |
+ offset++; |
+ return { 'node': node, 'offset': offset }; |
+ } |
+ |
+ if (node.nodeName == 'BR' || node.nodeName == 'IMG') |
+ return { 'node': node.parentNode, 'offset': offset }; |
+ |
+ return null; |
+ }); |
+ |
+ if (firstVisiblePosition) |
+ selection.collapse(firstVisiblePosition.node, firstVisiblePosition.offset); |
+ else |
+ selection.collapse(elem, 0); |
+ } else { |
+ selection.removeAllRanges(); |
+ } |
+} |
+ |
function runEditingTest() { |
if (window.testRunner) |
testRunner.dumpEditingCallbacks(); |
- var elem = document.getElementById("test"); |
- var selection = window.getSelection(); |
- if (elem) |
- selection.collapse(elem, 0); |
- else |
- selection.removeAllRanges(); |
+ focusOnFirstTextInTestElementIfExists(); |
+ |
editingTest(); |
} |
@@ -918,12 +957,8 @@ function runDumpAsTextEditingTest(enableCallbacks) { |
dumpAsText = true; |
- var elem = document.getElementById("test"); |
- var selection = window.getSelection(); |
- if (elem) |
- selection.collapse(elem, 0); |
- else |
- selection.removeAllRanges(); |
+ focusOnFirstTextInTestElementIfExists(); |
+ |
editingTest(); |
for (var i = 0; i < elementsForDumpingMarkupList.length; i++) |