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

"use strict";

// Test whether the scrubber was working in case of negative playback rate.

add_task(async function () {
  await addTab(URL_ROOT + "doc_negative_playback_rate.html");
  await removeAnimatedElementsExcept([".normal"]);
  const { animationInspector, panel } = await openAnimationInspector();

  info("Set initial state");
  clickOnCurrentTimeScrubberController(animationInspector, panel, 0);
  await waitUntilAnimationsPlayState(animationInspector, "paused");
  const initialCurrentTime =
    animationInspector.state.animations[0].state.currentTime;
  const initialProgressBarX = getProgressBarX(panel);

  info("Check whether the animation currentTime was decreased");
  clickOnCurrentTimeScrubberController(animationInspector, panel, 0.5);
  await waitUntilCurrentTimeChangedAt(
    animationInspector,
    animationInspector.state.timeScale.getDuration() * 0.5
  );
  Assert.greater(
    initialCurrentTime,
    animationInspector.state.animations[0].state.currentTime,
    "currentTime should be decreased"
  );

  info("Check whether the progress bar was moved to left");
  Assert.greater(
    initialProgressBarX,
    getProgressBarX(panel),
    "Progress bar should be moved to left"
  );
});

function getProgressBarX(panel) {
  const areaEl = panel.querySelector(".keyframes-progress-bar-area");
  const barEl = areaEl.querySelector(".keyframes-progress-bar");
  const controllerBounds = areaEl.getBoundingClientRect();
  const barBounds = barEl.getBoundingClientRect();
  const barX = barBounds.x + barBounds.width / 2 - controllerBounds.x;
  return barX;
}
