<!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;
}
#target {
  display: inline-block;
  width: 100px;
  height: 100px;
  background-color: green;
}
.vertical-spacer {
  height: calc(100vh + 100px);
}
.horizontal-spacer {
  display: inline-block;
  width: 120vw;
}
</style>

<div class="vertical-spacer"></div>
<div style="white-space:nowrap;">
  <div class="horizontal-spacer"></div>
  <div id="target"></div>
  <div class="horizontal-spacer"></div>
</div>
<div class="vertical-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)
  }, { rootMargin: "10px 20% 40% 30px" });
  observer.observe(target);
  entries = entries.concat(observer.takeRecords());
  assert_equals(entries.length, 0, "No initial notifications.");
  runTestCycle(step0, "First rAF.");
}, "Root margin tests");

function step0() {
  var targetBounds = clientBounds(target);
  document.scrollingElement.scrollLeft = 100;
  runTestCycle(step1, "document.scrollingElement.scrollLeft = 100");
  checkLastEntry(entries, 0, targetBounds.concat(0, 0, 0, 0, -30, vw * 1.2, -10, vh * 1.4, false));
}

function step1() {
  var targetBounds = clientBounds(target);
  var sw = window.innerWidth - document.documentElement.clientWidth;
  var sh = window.innerHeight - document.documentElement.clientHeight;
  document.scrollingElement.scrollTop = vh + 200;
  runTestCycle(step2, "document.scrollingElement.scrollTop = document.documentElement.clientHeight + 200");
  checkLastEntry(entries, 1, targetBounds.concat(
    targetBounds[0], Math.min(targetBounds[1], vw * 1.2), vh + 108 + sh, Math.min(vh + 208 + sw, vh * 1.4),
    -30, vw * 1.2, -10, vh * 1.4,
    true
  ));
}

function step2() {
  document.scrollingElement.scrollTop = vh + 300;
  runTestCycle(step3, "document.scrollingElement.scrollTop = document.documentElement.clientHeight + 300");
  checkLastEntry(entries, 1);
}

function step3() {
  var targetBounds = clientBounds(target);
  document.scrollingElement.scrollLeft = 0;
  document.scrollingElement.scrollTop = 0;
  checkLastEntry(entries, 2, targetBounds.concat(0, 0, 0, 0, -30, vw * 1.2, -10, vh * 1.4, false));
}
</script>
