| <head> |
| <script> |
| if (window.testRunner) |
| testRunner.dumpEditingCallbacks(); |
| </script> |
| |
| <style> |
| table, td { |
| border: 1px solid #aaa; |
| } |
| </style> |
| |
| <script> |
| function log(str) { |
| var li = document.createElement("li"); |
| li.appendChild(document.createTextNode(str)); |
| var console = document.getElementById("console"); |
| console.appendChild(li); |
| } |
| |
| function assert(bool) { |
| if (!bool) |
| log("Failure"); |
| else |
| log("Success"); |
| } |
| </script> |
| </head> |
| |
| <body contentEditable="true"> |
| <p>This tests moving the caret in content of mixed editability. The caret should jump to the next editable region that shares a common editable ancestor when it reaches non-editable content.</p> |
| <div id="e1">editable content</div> |
| <table cellpadding="5" contentEditable="false"> |
| <tr> |
| <td>non-editable content</td> |
| <td>non-editable content</td> |
| <td id="e2" contentEditable="true">editable content</td> |
| </table> |
| <div id="e3">editable content</div> |
| |
| <ul id="console"></ul> |
| </body> |
| |
| <script> |
| if (window.testRunner) |
| window.testRunner.dumpAsText(); |
| |
| var s = window.getSelection(); |
| var e1 = document.getElementById("e1"); |
| var e2 = document.getElementById("e2"); |
| var e3 = document.getElementById("e3"); |
| |
| s.setPosition(e1.firstChild, e1.firstChild.length); |
| s.modify("move", "forward", "character"); |
| s.modify("move", "forward", "character"); |
| assert(s.anchorNode == e2.firstChild && s.anchorOffset == 0); |
| |
| s.modify("move", "backward", "character"); |
| s.modify("move", "backward", "character"); |
| assert(s.anchorNode == e1.firstChild && s.anchorOffset == e1.firstChild.length); |
| |
| s.setPosition(e2.firstChild, e2.firstChild.length); |
| s.modify("move", "forward", "character"); |
| s.modify("move", "forward", "character"); |
| assert(s.anchorNode == e3.firstChild && s.anchorOffset == 0); |
| |
| s.modify("move", "backward", "character"); |
| s.modify("move", "backward", "character"); |
| assert(s.anchorNode == e2.firstChild && s.anchorOffset == e2.firstChild.length) |
| </script> |