FormControlRange-range-updates.html (4047B)
1 <!DOCTYPE html> 2 <script src="/resources/testharness.js"></script> 3 <script src="/resources/testharnessreport.js"></script> 4 <body></body> 5 <script> 6 test(() => { 7 document.body.innerHTML = '<textarea>Hello World</textarea>'; 8 const textarea = document.body.firstElementChild; 9 const range = new FormControlRange(); 10 11 range.setFormControlRange(textarea, 0, 5); 12 assert_equals(range.toString(), "Hello"); 13 14 range.setFormControlRange(textarea, 6, 11); 15 assert_equals(range.toString(), "World"); 16 assert_equals(range.startOffset, 6); 17 assert_equals(range.endOffset, 11); 18 }, "FormControlRange allows updating range on same element."); 19 20 test(() => { 21 document.body.innerHTML = '<input type="text" value="Test"><textarea>Other</textarea>'; 22 const input = document.body.children[0]; 23 const textarea = document.body.children[1]; 24 const range = new FormControlRange(); 25 26 // Set range on <input>. 27 range.setFormControlRange(input, 0, 4); 28 assert_equals(range.startContainer, input); 29 assert_equals(range.endContainer, input); 30 assert_equals(range.toString(), "Test"); 31 32 // Switch to different element <textarea>. 33 range.setFormControlRange(textarea, 0, 5); 34 assert_equals(range.startContainer, textarea); 35 assert_equals(range.endContainer, textarea); 36 assert_equals(range.toString(), "Other"); 37 }, "FormControlRange can switch between different form controls."); 38 39 test(() => { 40 // Create disconnected form controls (not in document). 41 const container = document.createElement("div"); 42 container.innerHTML = '<input type="text" value="Disconnected"><textarea>NotConnected</textarea>'; 43 const input = container.children[0]; 44 const textarea = container.children[1]; 45 const range = new FormControlRange(); 46 47 // Verify disconnected <input>. 48 range.setFormControlRange(input, 0, 12); 49 assert_equals(range.startContainer, input); 50 assert_equals(range.endContainer, input); 51 assert_equals(range.toString(), "Disconnected"); 52 53 // Verify disconnected <textarea>. 54 range.setFormControlRange(textarea, 3, 12); 55 assert_equals(range.startContainer, textarea); 56 assert_equals(range.endContainer, textarea); 57 assert_equals(range.toString(), "Connected"); 58 59 // Connect to document. 60 document.body.appendChild(container); 61 62 range.setFormControlRange(input, 0, 4); 63 assert_equals(range.toString(), "Disc"); 64 65 range.setFormControlRange(textarea, 0, 3); 66 assert_equals(range.toString(), "Not"); 67 }, "FormControlRange works with disconnected and then connected form controls."); 68 69 test(() => { 70 document.body.innerHTML = '<textarea>Connected</textarea>'; 71 const connectedTextarea = document.body.firstElementChild; 72 73 const disconnectedInput = document.createElement("input"); 74 disconnectedInput.type = "text"; 75 disconnectedInput.value = "Floating"; 76 77 const range = new FormControlRange(); 78 79 // Start verifying with connected element. 80 range.setFormControlRange(connectedTextarea, 0, 9); 81 assert_equals(range.toString(), "Connected"); 82 83 // Switch to disconnected element. 84 range.setFormControlRange(disconnectedInput, 0, 8); 85 assert_equals(range.toString(), "Floating"); 86 assert_equals(range.startContainer, disconnectedInput); 87 88 // Switch back to connected element. 89 range.setFormControlRange(connectedTextarea, 3, 6); 90 assert_equals(range.toString(), "nec"); 91 assert_equals(range.startContainer, connectedTextarea); 92 }, "FormControlRange can switch between connected and disconnected form controls."); 93 94 test(() => { 95 document.body.innerHTML = '<textarea>Original</textarea>'; 96 const textarea = document.body.firstElementChild; 97 const range = new FormControlRange(); 98 99 range.setFormControlRange(textarea, 1, 5); 100 assert_equals(range.toString(), "rigi"); 101 102 // Full .value= replacement collapses the range to the start (0,0). 103 textarea.value = "Modified"; 104 assert_true(range.collapsed, "range collapses on full-value replacement"); 105 assert_equals(range.startOffset, 0); 106 assert_equals(range.endOffset, 0); 107 assert_equals(range.toString(), ""); 108 }, "FormControlRange collapses on full .value= replacement."); 109 </script>