modify.tentative.html (3053B)
1 <!DOCTYPE html> 2 <meta charset="utf-8"> 3 <title>Selection.modify() tests</title> 4 <script src=/resources/testharness.js></script> 5 <script src=/resources/testharnessreport.js></script> 6 7 <div>Test, these are <strong id="strong"> strong </strong> <em id="em"> italic </em> normal.</div> 8 9 <pre id="preLinefeed"> 10 foo 11 bar 12 </pre> 13 14 <pre id="preBr"> 15 foo<br>bar 16 </pre> 17 18 <pre id="preLinefeedBr"> 19 foo 20 <br> 21 bar 22 </pre> 23 24 <script> 25 const selection = getSelection(); 26 test(() => { 27 selection.collapse(strong.childNodes[0], 4); 28 selection.modify("extend", "backward", "word") 29 assert_equals(selection.focusNode, strong.childNodes[0]); 30 assert_equals(selection.focusOffset, 1); 31 selection.collapse(em.childNodes[0], 4); 32 selection.modify("extend", "backward", "word") 33 assert_equals(selection.focusNode, em.childNodes[0]); 34 assert_equals(selection.focusOffset, 1); 35 }, "Stop at previous word boundary when whitespaces are trimmed"); 36 37 test(() => { 38 const preLinefeed = document.getElementById("preLinefeed"); 39 const textChild = preLinefeed.childNodes[0]; 40 selection.collapse(textChild, 3); 41 selection.modify("move", "forward", "character"); 42 assert_equals(selection.focusNode, textChild); 43 assert_equals(selection.focusOffset, 4); 44 }, "Jump linefeed forward"); 45 46 test(() => { 47 const preLinefeed = document.getElementById("preLinefeed"); 48 const textChild = preLinefeed.childNodes[0]; 49 selection.collapse(textChild, 4); 50 selection.modify("move", "backward", "character"); 51 assert_equals(selection.focusNode, textChild); 52 assert_equals(selection.focusOffset, 3); 53 }, "Jump linefeed backward"); 54 55 test(() => { 56 const preBr = document.getElementById("preBr"); 57 const [firstTextChild, br, secondTextChild] = preBr.childNodes; 58 selection.collapse(firstTextChild, 3); 59 selection.modify("move", "forward", "character"); 60 assert_equals(selection.focusNode, secondTextChild); 61 assert_equals(selection.focusOffset, 0); 62 }, "Jump <br> forward"); 63 64 test(() => { 65 const preBr = document.getElementById("preBr"); 66 const [firstTextChild, br, secondTextChild] = preBr.childNodes; 67 selection.collapse(secondTextChild, 0); 68 selection.modify("move", "backward", "character"); 69 assert_equals(selection.focusNode, firstTextChild); 70 assert_equals(selection.focusOffset, 3); 71 }, "Jump <br> backward"); 72 73 test(() => { 74 const preLinefeedBr = document.getElementById("preLinefeedBr"); 75 selection.collapse(preLinefeedBr, 1); 76 selection.modify("move", "forward", "character"); 77 const secondTextChild = preLinefeedBr.childNodes[2]; 78 assert_equals(selection.focusNode, secondTextChild); 79 assert_equals(selection.focusOffset, 0); 80 }, "Jump <br> forward which follows a linefeed"); 81 82 test(() => { 83 const preLinefeedBr = document.getElementById("preLinefeedBr"); 84 selection.collapse(preLinefeedBr, 2); 85 selection.modify("move", "backward", "character"); 86 const textChild = preLinefeedBr.childNodes[0]; 87 assert_equals(selection.focusNode, textChild); 88 assert_equals(selection.focusOffset, textChild.textContent.length); 89 }, "Jump <br> backward which follows a linefeed"); 90 </script>