tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>