chromium/third_party/blink/web_tests/fast/dom/shadow/selection-in-nested-shadow.html

<!doctype html>
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<script src="../../../editing/assert_selection.js"></script>
<script>
function selectInElement(document, element) {
  eventSender.mouseMoveTo(document.offsetLeft + element.offsetLeft + 2,
                          document.offsetTop + element.offsetTop +
                              element.offsetHeight / 2);
  eventSender.mouseDown();
  eventSender.mouseMoveTo(document.offsetLeft + element.offsetLeft +
                              element.offsetWidth - 2,
                          document.offsetTop + element.offsetTop +
                              element.offsetHeight / 2);
  eventSender.mouseUp();
}

test(() => {
  assert_not_equals(window.eventSender, undefined,
    'This test requires eventSender.');

  assert_selection(
    [
        '<div>',
        '  <div id="host"></div>',
        '</div>',
    ].join('\n'),
    selection => {
      const document = selection.document;
      const host = document.getElementById('host');
      const shadowRoot1 = host.attachShadow({mode: 'open'});
      shadowRoot1.innerHTML = '<div id="target">abc</div>';
      const target = shadowRoot1.getElementById('target');

      selectInElement(document, target);
      host.remove();
    },
    [
        '<div>',
        '  |',
        '</div>',
    ].join('\n'),
    {dumpAs: 'flattree'});
}, 'Remove shadow host containing selection');

test(() => {
  assert_not_equals(window.eventSender, undefined,
    'This test requires eventSender.');

  assert_selection(
    [
        '<div>',
        '  <div id="host"></div>',
        '</div>',
    ].join('\n'),
    selection => {
      const document = selection.document;
      const host = document.getElementById('host');
      const shadowRoot1 = host.attachShadow({mode: 'open'});
      shadowRoot1.innerHTML = '<div id="host2"></div>';
      const host2 = shadowRoot1.getElementById('host2');
      const shadowRoot2 = host2.attachShadow({mode: 'open'});
      shadowRoot2.innerHTML = '<div id="target">abc</div>';
      const target = shadowRoot2.getElementById('target');

      selectInElement(document, target);
      host.remove();
    },
    [
        '<div>',
        '  |',
        '</div>',
    ].join('\n'),
    {dumpAs: 'flattree'});
}, 'Remove shadow host containing selection in nested shadow tree');
</script>