chromium/third_party/blink/web_tests/fast/events/autoscroll-keeps-selection.html

<!DOCTYPE HTML>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="../../resources/gesture-util.js"></script>
<script>
function start() {
  promise_test(async () => {
    assert_equals(document.getSelection().type,"None");

    var scrollable = document.getElementById('scrollable');
    // Highlight some of the text
    document.getSelection().setBaseAndExtent(scrollable,0,scrollable,2);
    assert_equals(document.getSelection().toString(),
        "This is highlightable and scrollable text");

    const middle_click_autoscroll_radius = 15; // from middleClickAutoscroll.js
    const middle_button = 1;
    const waitTimeBeforeMoveInMilliseconds = 100;

    // X can be the same for start and end because only vertical autoscrolling
    // is being tested
    var start_x = end_x = scrollable.offsetLeft + 5;
    var start_y = scrollable.offsetTop + 5;
    var end_y = scrollable.offsetTop + middle_click_autoscroll_radius + 6;
    await mouseDragAndDrop(start_x, start_y, end_x, end_y, middle_button,
        waitTimeBeforeMoveInMilliseconds);

    // Confirm that scrolling did happen and the same text is selected.
    assert_true(scrollable.scrollTop > 0);
    assert_equals(document.getSelection().toString(),
        "This is highlightable and scrollable text");
  }, 'Holding middle button to autoscroll does not clear selected text');
}
</script>

<style>
  #scrollable {
    height: 100px;
    width: 400px;
    overflow: scroll;
  }
</style>

<body onload="start()">
  <div id="scrollable">
    <span>This is highlightable and scrollable text</span>
    <span>Different scrollable and highlightable text</span>
    <span>Different scrollable and highlightable text</span>
    <span>Different scrollable and highlightable text</span>
    <span>Different scrollable and highlightable text</span>
    <span>Different scrollable and highlightable text</span>
    <span>Different scrollable and highlightable text</span>
    <span>Different scrollable and highlightable text</span>
    <span>Different scrollable and highlightable text</span>
    <span>Different scrollable and highlightable text</span>
    <span>Different scrollable and highlightable text</span>
    <span>Different scrollable and highlightable text</span>
  </div>
</body>