<!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");
  assert_true(!!target, "target exists");
  var observer = new IntersectionObserver(function(changes) {
    entries = entries.concat(changes)
  });
  observer.observe(target);
  entries = entries.concat(observer.takeRecords());
  assert_equals(entries.length, 0, "No initial notifications.");
  runTestCycle(step0, "First rAF.");
}, "IntersectionObserver in a single document using the implicit root.");

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

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

function step2() {
  document.scrollingElement.scrollTop = 0;
  checkLastEntry(entries, 2, [8, 108, vh + 8, vh + 108, 0, 0, 0, 0, 0, vw, 0, vh, false]);
}
</script>
