<!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);
}
#root {
  display: inline-block;
  overflow-y: scroll;
  height: 200px;
  border: 3px solid black;
}
#target {
  width: 100px;
  height: 100px;
  background-color: green;
}
</style>

<div class="spacer"></div>
<div id="root">
  <div style="height: 300px;"></div>
  <div id="target"></div>
</div>
<div class="spacer"></div>

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

var entries = [];
var root, target;

runTestCycle(function() {
  target = document.getElementById("target");
  assert_true(!!target, "target exists");
  root = document.getElementById("root");
  assert_true(!!root, "root exists");
  var observer = new IntersectionObserver(function(changes) {
    entries = entries.concat(changes)
  }, { root: root });
  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 with explicit root.");

function step0() {
  document.scrollingElement.scrollTop = vh;
  runTestCycle(step1, "document.scrollingElement.scrollTop = window.innerHeight.");
  checkLastEntry(entries, 0, [ 11, 111, vh + 411, vh + 511, 0, 0, 0, 0, 11, 111, vh + 111, vh + 311, false]);
}

function step1() {
  root.scrollTop = 150;
  runTestCycle(step2, "root.scrollTop = 150 with root scrolled into view.");
  assert_equals(entries.length, 1, "No notifications after scrolling frame.");
}

function step2() {
  document.scrollingElement.scrollTop = 0;
  runTestCycle(step3, "document.scrollingElement.scrollTop = 0.");
  checkLastEntry(entries, 1, [11, 111, 261, 361, 11, 111, 261, 311, 11, 111, 111, 311, true]);
}

function step3() {
  root.scrollTop = 0;
  runTestCycle(step4, "root.scrollTop = 0");
  checkLastEntry(entries, 1);
}

function step4() {
  root.scrollTop = 150;
  runTestCycle(step5, "root.scrollTop = 150 with root scrolled out of view.");
  checkLastEntry(entries, 2, [11, 111, vh + 411, vh + 511, 0, 0, 0, 0, 11, 111, vh + 111, vh + 311, false]);
}

// This tests that notifications are generated even when the root element is off screen.
function step5() {
  checkLastEntry(entries, 3, [11, 111, vh + 261, vh + 361, 11, 111, vh + 261, vh + 311, 11, 111, vh + 111, vh + 311, true]);
}
</script>
