<!DOCTYPE html>
<meta name="viewport" content="width=device-width,initial-scale=1">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="./resources/intersection-observer-test-utils.js"></script>

<style>
pre, #log {
  position: absolute;
  top: 0;
  left: 200px;
}
.spacer {
  height: calc(100vh + 100px);
}
#target {
  width: 100px;
  height: 100px;
  background-color: green;
}
</style>

<div class="spacer"></div>
<div id="target"></div>
<div class="spacer"></div>

<script>
var vw = document.documentElement.clientWidth;
var vh = document.documentElement.clientHeight;

var entries = [];
var target;

runTestCycle(function() {
  target = document.getElementById("target");
  var observer = new IntersectionObserver(function(changes) {
    entries = entries.concat(changes)
  }, { threshold: [0, 0.25, 0.5, 0.75, 1] });
  observer.observe(target);
  entries = entries.concat(observer.takeRecords());
  assert_equals(entries.length, 0, "No initial notifications.");
  runTestCycle(step0, "First rAF.");
}, "Observer with multiple thresholds.");

function step0() {
  document.scrollingElement.scrollTop = 120;
  runTestCycle(step1, "document.scrollingElement.scrollTop = 120");
  checkLastEntry(entries, 0, [8, 108, vh + 108, vh + 208, 0, 0, 0, 0, 0, vw, 0, vh, false]);
}

function step1() {
  document.scrollingElement.scrollTop = 160;
  runTestCycle(step2, "document.scrollingElement.scrollTop = 160");
  checkLastEntry(entries, 1, [8, 108, vh - 12, vh + 88, 8, 108, vh - 12, vh, 0, vw, 0, vh, true]);
}

function step2() {
  document.scrollingElement.scrollTop = 200;
  runTestCycle(step3, "document.scrollingElement.scrollTop = 200");
  checkLastEntry(entries, 2, [8, 108, vh - 52, vh + 48, 8, 108, vh - 52, vh, 0, vw, 0, vh, true]);
}

function step3() {
  document.scrollingElement.scrollTop = 240;
  runTestCycle(step4, "document.scrollingElement.scrollTop = 240");
  checkLastEntry(entries, 3, [8, 108, vh - 92, vh + 8, 8, 108, vh - 92, vh, 0, vw, 0, vh, true]);
}

function step4() {
  document.scrollingElement.scrollTop = vh + 140;
  runTestCycle(step5, "document.scrollingElement.scrollTop = window.innerHeight + 140");
  checkLastEntry(entries, 4, [8, 108, vh - 132, vh - 32, 8, 108, vh - 132, vh - 32, 0, vw, 0, vh, true]);
}

function step5() {
  document.scrollingElement.scrollTop = vh + 160;
  runTestCycle(step6, "document.scrollingElement.scrollTop = window.innerHeight + 160");
  checkLastEntry(entries, 5, [8, 108, -32, 68, 8, 108, 0, 68, 0, vw, 0, vh, true]);
}

function step6() {
  document.scrollingElement.scrollTop = vh + 200;
  runTestCycle(step7, "document.scrollingElement.scrollTop = window.innerHeight + 200");
  checkLastEntry(entries, 6, [8, 108, -52, 48, 8, 108, 0, 48, 0, vw, 0, vh, true]);
}

function step7() {
  checkLastEntry(entries, 7, [8, 108, -92, 8, 8, 108, 0, 8, 0, vw, 0, vh, true]);
  document.scrollingElement.scrollTop = vh + 220;
  runTestCycle(step8, "document.scrollingElement.scrollTop = window.innerHeight + 220");
}

function step8() {
  checkLastEntry(entries, 8, [8, 108, -112, -12, 0, 0, 0, 0, 0, vw, 0, vh, false]);
  document.scrollingElement.scrollTop = 0;
}
</script>
