<!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, 1);
    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, 1);
    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, 1);
    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, 1);
    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>
