tor-browser

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

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>