<!DOCTYPE html>
<title>Layout Instability: shift in pointerdown becoming tap</title>
<link rel="help" href="https://wicg.github.io/layout-instability/" />
<style>

body { margin: 0; height: 2000px; }
#box {
  left: 0px;
  top: 0px;
  width: 400px;
  height: 500px;
  background: yellow;
  position: relative;
}

</style>
<div id="box"></div>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-actions.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="resources/util.js"></script>
<script>

const box = document.querySelector("#box");
box.addEventListener("pointerdown", (e) => {
  // Generate a layout shift before we know what type of input this pointer
  // event sequence will become.
  box.style.top = "100px";
  e.preventDefault();
});

generateTapSequence = () => new test_driver.Actions()
    .addPointer("tp1", "touch")
    .pointerMove(0, 0, {sourceName: "tp1"})
    .pointerDown({sourceName: "tp1"})
    .pause(100)
    .pointerUp({sourceName: "tp1"})
    .pause(100);

promise_test(async () => {
  const watcher = new ScoreWatcher;

  // Wait for the initial render to complete.
  await waitForAnimationFrames(2);

  // Send pointer events for a tap.
  await generateTapSequence().send();

  // The box is 400 x 500 and moves by 100px.
  const expectedExcludedScore = computeExpectedScore(400 * (500 + 100), 100);

  // Only the score that ignores hadRecentInput should increase.
  assert_equals(watcher.score, expectedExcludedScore);
  assert_equals(watcher.scoreWithInputExclusion, 0);

}, "Shift in pointerdown excluded when it becomes a tap.");

</script>
