diff options
Diffstat (limited to 'testing/web-platform/tests/selection/onselectionchange-on-document.html')
-rw-r--r-- | testing/web-platform/tests/selection/onselectionchange-on-document.html | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/testing/web-platform/tests/selection/onselectionchange-on-document.html b/testing/web-platform/tests/selection/onselectionchange-on-document.html new file mode 100644 index 0000000000..4e06165377 --- /dev/null +++ b/testing/web-platform/tests/selection/onselectionchange-on-document.html @@ -0,0 +1,73 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<link rel="help" href="https://w3c.github.io/selection-api/#selectionchange-event"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<body> +<div id="container"><br><br></div> +<script> + +promise_test(() => { + return new Promise(resolve => { + let didFireSelectionChangeEvent = false; + document.addEventListener("selectionchange", () => { didFireSelectionChangeEvent = true; resolve(); }, {once: true}); + getSelection().setPosition(container, 0); + assert_false(didFireSelectionChangeEvent); + }); +}, "selectionchange event on document fires"); + +promise_test(() => { + return (async function() { + let selectionChangeCount = 0; + document.addEventListener("selectionchange", () => ++selectionChangeCount); + container.innerHTML = '<span><br></span><span><br></span>'; + getSelection().setPosition(container, 0); + assert_equals(selectionChangeCount, 0); + getSelection().setPosition(container, 2); + assert_equals(selectionChangeCount, 0); + await new Promise(setTimeout); + assert_equals(selectionChangeCount, 1); + })(); +}, "selectionchange event on document fires once"); + +promise_test(() => { + return (async function() { + let selectionChangeCount = 0; + document.addEventListener("selectionchange", () => ++selectionChangeCount); + container.innerHTML = '<span><br></span><span><br></span>'; + getSelection().setPosition(container, 0); + assert_equals(selectionChangeCount, 0); + getSelection().setPosition(container, 2); + assert_equals(selectionChangeCount, 0); + await new Promise(setTimeout); + assert_equals(selectionChangeCount, 1); + getSelection().setPosition(container, 0); + assert_equals(selectionChangeCount, 1); + getSelection().setPosition(container, 2); + assert_equals(selectionChangeCount, 1); + await new Promise(setTimeout); + assert_equals(selectionChangeCount, 2); + })(); +}, "task to fire selectionchange event gets queued each time selection is mutated"); + +promise_test(() => { + return (async function() { + let selectionChangeCount = 0; + document.addEventListener("selectionchange", () => { + if (!selectionChangeCount) { + getSelection().setPosition(container, 2); + getSelection().setPosition(container, 0); + } + ++selectionChangeCount; + }); + container.innerHTML = '<b><br></b><b><br></b>'; + getSelection().setPosition(container, 0); + assert_equals(selectionChangeCount, 0); + await new Promise(setTimeout); + assert_equals(selectionChangeCount, 1); + await new Promise(setTimeout); + assert_equals(selectionChangeCount, 2); + })(); +}, "has scheduled selectionchange event is set to false at the beginning of a task to fire selectionchange event"); + +</script> |