/* Any copyright is dedicated to the Public Domain.
 http://creativecommons.org/publicdomain/zero/1.0/ */

"use strict";

// Test that dragging a node near the top or bottom edge of the markup-view
// auto-scrolls the view on a large toolbox.

const TEST_URL = URL_ROOT + "doc_markup_dragdrop_autoscroll_01.html";

add_task(async function () {
  // Set the toolbox as large as it would get. The toolbox automatically shrinks
  // to not overflow to window.
  await pushPref("devtools.toolbox.footer.height", 10000);

  const { inspector } = await openInspectorForURL(TEST_URL);
  const markup = inspector.markup;
  const viewHeight = markup.doc.documentElement.clientHeight;

  info("Pretend the markup-view is dragging");
  markup.isDragging = true;

  info("Simulate a mousemove on the view, at the bottom, and expect scrolling");

  markup._onMouseMove({
    preventDefault: () => {},
    target: markup.doc.body,
    pageY: viewHeight + markup.doc.defaultView.scrollY,
  });

  const bottomScrollPos = await waitForScrollStop(markup.doc);
  Assert.greater(bottomScrollPos, 0, "The view was scrolled down");

  info("Simulate a mousemove at the top and expect more scrolling");

  markup._onMouseMove({
    preventDefault: () => {},
    target: markup.doc.body,
    pageY: markup.doc.defaultView.scrollY,
  });

  const topScrollPos = await waitForScrollStop(markup.doc);
  Assert.less(topScrollPos, bottomScrollPos, "The view was scrolled up");
  is(topScrollPos, 0, "The view was scrolled up to the top");

  info("Simulate a mouseup to stop dragging");
  markup._onMouseUp();
});
