<!DOCTYPE html>
<link rel="help" href="https://drafts.csswg.org/css-overflow-5/#scroll-buttons">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../support/common.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/resources/testdriver-actions.js"></script>
<script src="/dom/events/scrolling/scroll_support.js"></script>
<style>
.container {
  position: relative;
  height: 150px;
  /* Ensure width is sufficiently different than height to ensure that
   * the directional scroll is using the scrollport size in the associated
   * direction. */
  width: 400px;
  position: relative;
}
.scroller {
  height: 100%;
  overflow: auto;
  position: relative;
  counter-reset: page;
}
.scroller.right {
  /* Flow content horizontally. */
  white-space: nowrap;
}
.scroller::scroll-button(*) {
  width: 100px;
  height: 50px;
  background: green;
  position: absolute;
  /* Center the button within the scroller so that the call to
   * test_driver.click(scroller) hits the button. */
  left: calc(50% - 50px);
  top: calc(50% - 25px);
}
/* Create scroll buttons for test scrollers. */
.scroller.test.down::scroll-button(down) {
  content: "";
}
.scroller.test.right::scroll-button(right) {
  content: "";
}
.page {
  box-sizing: border-box;
  height: 100%;
}
.scroller.right .page {
  /* Flow horizontally in horizontal scroller */
  display: inline-block;
  width: 100%;
}

/* Make pages visible for manual testing. */
.page:nth-child(2*n) {
  background: lightgray;
}
.page::before {
  counter-increment: page;
  content: "Page " counter(page);
}
</style>

<div class="container">
  <div class="scroller test down" id="scroller1">
    <div class="page"></div>
    <div class="page"></div>
    <div class="page"></div>
    <div class="page"></div>
  </div>
</div>
<div class="container">
  <div class="scroller test right" id="scroller2">
    <div class="page"></div>
    <div class="page"></div>
    <div class="page"></div>
    <div class="page"></div>
  </div>
</div>

<script>

async function clickButtonAndWaitForScroll(scroller) {
  const scrollEndPromise = waitForScrollEndFallbackToDelayWithoutScrollEvent(scroller);
  let wait_click = new Promise(resolve => scroller.addEventListener("click", resolve, {once: true}));
  await test_driver.click(scroller);
  await wait_click;
  await scrollEndPromise;
}

promise_test(async () => {
  const scroller = document.querySelector('.scroller.test.down');
  await clickButtonAndWaitForScroll(scroller);

  // Activating the scroll button scrolls the originating element by
  // one "page" in the associated direction. For most implementations this is
  // 85% of the optimal viewing region. We could consider issuing page down
  // and asserting the same distance here.
  const pageHeight = scroller.clientHeight;
  assert_greater_than(scroller.scrollTop, 0.5 * pageHeight);
  assert_less_than_equal(scroller.scrollTop, pageHeight);
}, "::scroll-button(down) scrolls about a page when clicked");

promise_test(async () => {
  const scroller = document.querySelector('.scroller.test.right');
  await clickButtonAndWaitForScroll(scroller);

  // Activating the scroll button scrolls the originating element by
  // one "page" in the associated direction. For most implementations this is
  // 85% of the optimal viewing region in that dimension, however the
  // proportion is not precisely specified nor do we have a "Page Right" key
  // we could compare with so we assert it is in the range
  // [0.5, 1] * scrollport width.
  const pageWidth = scroller.clientWidth;
  assert_greater_than(scroller.scrollLeft, 0.5 * pageWidth);
  assert_less_than_equal(scroller.scrollLeft, pageWidth);
}, "::scroll-button(right) scrolls about a page when clicked");
</script>
