<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Selection range in an editing host after the host is removed</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script>
"use strict";

addEventListener("load", () => {
  const container = document.querySelector("div");
  test(() => {
    const editingHost = document.createElement("div");
    editingHost.contentEditable = true;
    editingHost.innerHTML = "ABC<br>";
    container.appendChild(editingHost);
    editingHost.focus();
    getSelection().collapse(editingHost, 0);
    editingHost.remove();
    assert_equals(getSelection().focusNode, container, "focusNode should be the container");
    assert_equals(getSelection().focusOffset, 0, "focusOffset should be 0");
  }, "Selection range in an editing host should be collapsed where the host was after it's removed");

  test(() => {
    const wrapper = document.createElement("div");
    wrapper.id = "wrapper";
    const editingHost = document.createElement("div");
    editingHost.contentEditable = true;
    editingHost.innerHTML = "ABC<br>";
    wrapper.appendChild(editingHost);
    container.appendChild(wrapper);
    editingHost.focus();
    getSelection().collapse(editingHost, 0);
    wrapper.remove();
    assert_equals(getSelection().focusNode, container, "focusNode should be the container");
    assert_equals(getSelection().focusOffset, 0, "focusOffset should be 0");
  }, "Selection range in an editing host should be collapsed where the host was after its parent is removed");

  test(() => {
    const editingHost = document.createElement("div");
    editingHost.contentEditable = true;
    editingHost.innerHTML = "ABC<br>";
    container.appendChild(editingHost);
    editingHost.focus();
    getSelection().collapse(editingHost, 0);
    editingHost.replaceWith(editingHost);
    assert_equals(getSelection().focusNode, container, "focusNode should be the container");
    assert_equals(getSelection().focusOffset, 0, "focusOffset should be 0");
    editingHost.remove();
  }, "Selection range in an editing host should be collapsed where the host was after it's replaced with itself (.replaceWith)");

  test(() => {
    const editingHost = document.createElement("div");
    editingHost.contentEditable = true;
    editingHost.innerHTML = "ABC<br>";
    container.appendChild(editingHost);
    editingHost.focus();
    getSelection().collapse(editingHost, 0);
    container.replaceChild(editingHost, editingHost);
    assert_equals(getSelection().focusNode, container, "focusNode should be the container");
    assert_equals(getSelection().focusOffset, 0, "focusOffset should be 0");
    editingHost.remove();
  }, "Selection range in an editing host should be collapsed where the host was after it's replaced with itself (.replaceChild)");
}, {once: true});
</script>
</head>
<body><div id="container"></div></body>
</html>
