| <!DOCTYPE html> | |
| <meta charset="utf-8"> | |
| <title>Selection.modify() tests</title> | |
| <script src=/resources/testharness.js></script> | |
| <script src=/resources/testharnessreport.js></script> | |
| <div>Test, these are <strong id="strong"> strong </strong> <em id="em"> italic </em> normal.</div> | |
| <pre id="preLinefeed"> | |
| foo | |
| bar | |
| </pre> | |
| <pre id="preBr"> | |
| foo<br>bar | |
| </pre> | |
| <pre id="preLinefeedBr"> | |
| foo | |
| <br> | |
| bar | |
| </pre> | |
| <script> | |
| const selection = getSelection(); | |
| test(() => { | |
| selection.collapse(strong.childNodes[0], 4); | |
| selection.modify("extend", "backward", "word") | |
| assert_equals(selection.focusNode, strong.childNodes[0]); | |
| assert_equals(selection.focusOffset, 1); | |
| selection.collapse(em.childNodes[0], 4); | |
| selection.modify("extend", "backward", "word") | |
| assert_equals(selection.focusNode, em.childNodes[0]); | |
| assert_equals(selection.focusOffset, 1); | |
| }, "Stop at previous word boundary when whitespaces are trimmed"); | |
| test(() => { | |
| const preLinefeed = document.getElementById("preLinefeed"); | |
| const textChild = preLinefeed.childNodes[0]; | |
| selection.collapse(textChild, 3); | |
| selection.modify("move", "forward", "character"); | |
| assert_equals(selection.focusNode, textChild); | |
| assert_equals(selection.focusOffset, 4); | |
| }, "Jump linefeed forward"); | |
| test(() => { | |
| const preLinefeed = document.getElementById("preLinefeed"); | |
| const textChild = preLinefeed.childNodes[0]; | |
| selection.collapse(textChild, 4); | |
| selection.modify("move", "backward", "character"); | |
| assert_equals(selection.focusNode, textChild); | |
| assert_equals(selection.focusOffset, 3); | |
| }, "Jump linefeed backward"); | |
| test(() => { | |
| const preBr = document.getElementById("preBr"); | |
| const [firstTextChild, br, secondTextChild] = preBr.childNodes; | |
| selection.collapse(firstTextChild, 3); | |
| selection.modify("move", "forward", "character"); | |
| assert_equals(selection.focusNode, secondTextChild); | |
| assert_equals(selection.focusOffset, 0); | |
| }, "Jump <br> forward"); | |
| test(() => { | |
| const preBr = document.getElementById("preBr"); | |
| const [firstTextChild, br, secondTextChild] = preBr.childNodes; | |
| selection.collapse(secondTextChild, 0); | |
| selection.modify("move", "backward", "character"); | |
| assert_equals(selection.focusNode, firstTextChild); | |
| assert_equals(selection.focusOffset, 3); | |
| }, "Jump <br> backward"); | |
| test(() => { | |
| const preLinefeedBr = document.getElementById("preLinefeedBr"); | |
| selection.collapse(preLinefeedBr, 1); | |
| selection.modify("move", "forward", "character"); | |
| const secondTextChild = preLinefeedBr.childNodes[2]; | |
| assert_equals(selection.focusNode, secondTextChild); | |
| assert_equals(selection.focusOffset, 0); | |
| }, "Jump <br> forward which follows a linefeed"); | |
| test(() => { | |
| const preLinefeedBr = document.getElementById("preLinefeedBr"); | |
| selection.collapse(preLinefeedBr, 2); | |
| selection.modify("move", "backward", "character"); | |
| const textChild = preLinefeedBr.childNodes[0]; | |
| assert_equals(selection.focusNode, textChild); | |
| assert_equals(selection.focusOffset, textChild.textContent.length); | |
| }, "Jump <br> backward which follows a linefeed"); | |
| </script> |