summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/selection/selection-range-after-textcontrol-removed.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/selection/selection-range-after-textcontrol-removed.html')
-rw-r--r--testing/web-platform/tests/selection/selection-range-after-textcontrol-removed.html55
1 files changed, 55 insertions, 0 deletions
diff --git a/testing/web-platform/tests/selection/selection-range-after-textcontrol-removed.html b/testing/web-platform/tests/selection/selection-range-after-textcontrol-removed.html
new file mode 100644
index 0000000000..e618f10f1d
--- /dev/null
+++ b/testing/web-platform/tests/selection/selection-range-after-textcontrol-removed.html
@@ -0,0 +1,55 @@
+<!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>