FormControlRange-validation.html (2463B)
1 <!DOCTYPE html> 2 <script src="/resources/testharness.js"></script> 3 <script src="/resources/testharnessreport.js"></script> 4 <body> 5 <textarea>Hello</textarea> 6 </body> 7 <script> 8 test(() => { 9 const textarea = document.querySelector('textarea'); 10 const range = new FormControlRange(); 11 12 range.setFormControlRange(textarea, 1, 4); 13 assert_equals(range.toString(), "ell"); 14 15 assert_throws_dom("IndexSizeError", () => range.setFormControlRange(textarea, 10, 15)); 16 assert_equals(range.toString(), "ell", "State preserved after error"); 17 assert_equals(range.startOffset, 1, "Start offset preserved"); 18 assert_equals(range.endOffset, 4, "End offset preserved"); 19 }, "FormControlRange preserves state when setFormControlRange throws."); 20 21 test(() => { 22 const textarea = document.querySelector('textarea'); 23 const range = new FormControlRange(); 24 25 // [start, end, shouldThrow, expectedStart, expectedEnd, expectedText, expectedCollapsed]. 26 [ 27 // Valid forward ranges. 28 [0, 5, false, 0, 5, "Hello", false], 29 [1, 4, false, 1, 4, "ell", false], 30 [0, 0, false, 0, 0, "", true], 31 [5, 5, false, 5, 5, "", true], 32 33 // Backwards ranges that auto-collapse, but don't throw. 34 [5, 2, false, 5, 5, "", true], 35 [4, 1, false, 4, 4, "", true], 36 [3, 0, false, 3, 3, "", true], 37 38 // Ranges that are out-of-bounds and should throw. 39 // End offset exceeds value length. 40 [0, 6, true], 41 // Start offset exceeds value length. 42 [6, 6, true], 43 // Both start and end offset exceeds length in a backwards range. 44 [10, 5, true], 45 // Both start and end offsets exceeds value length in a forward range. 46 [10, 15, true], 47 ].forEach(([start, end, shouldThrow, expectedStart, expectedEnd, expectedText, expectedCollapsed]) => { 48 if (shouldThrow) { 49 assert_throws_dom("IndexSizeError", () => range.setFormControlRange(textarea, start, end), 50 `[${start}, ${end}] should throw`); 51 } else { 52 range.setFormControlRange(textarea, start, end); 53 assert_equals(range.startOffset, expectedStart, `[${start}, ${end}] startOffset`); 54 assert_equals(range.endOffset, expectedEnd, `[${start}, ${end}] endOffset`); 55 assert_equals(range.toString(), expectedText, `[${start}, ${end}] toString`); 56 assert_equals(range.collapsed, expectedCollapsed, `[${start}, ${end}] collapsed`); 57 } 58 }); 59 }, "FormControlRange handles all range types correctly: forward, backwards, and out-of-bounds."); 60 </script>