<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="variant" content="?textControl=text">
<meta name="variant" content="?textControl=password">
<meta name="variant" content="?textControl=number">
<meta name="variant" content="?textControl=textarea">
<title>Selection range after text control is removed</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script>
"use strict";

/**
 * Browsers may use internal Selection and/or Range to implement the selection
 * in text controls.  They should not be appear outside the host text control
 * after the host is removed.
 */
addEventListener("load", () => {
  const textControlType = (new URLSearchParams(document.location.search)).get("mode");
  function createTextControlElement() {
    const textControl =
      document.createElement(textControlType == "textarea" ? "textarea" : "input");
    if (textControlType != "textarea") {
      textControl.type = textControlType;
    }
    return textControl;
  }

  test(() => {
    const textControl = createTextControlElement();
    document.body.appendChild(textControl);
    textControl.select();
    getSelection().removeAllRanges();
    textControl.remove();
    assert_equals(getSelection().rangeCount, 0);
  }, "Removing the text control should not add selection range");

  test(() => {
    const wrapper = document.createElement("div");
    wrapper.id = "wrapper";
    const textControl = createTextControlElement();
    wrapper.appendChild(textControl);
    document.body.appendChild(wrapper);
    textControl.select();
    getSelection().removeAllRanges();
    wrapper.remove();
    assert_equals(getSelection().rangeCount, 0);
  }, "Removing the text control parent should not add selection range");
}, {once: true});
</script>
</head>
<body></body>
</html>
