<!DOCTYPE html>
<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>
