<!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;
}
#root {
  overflow: visible;
  height: 200px;
  width: 160px;
  border: 8px solid black;
}
#target {
  margin: 10px;
  width: 100px;
  height: 100px;
  padding: 10px;
  background-color: green;
}
</style>

<div id="root">
  <div id="target" style="transform: translateY(300px)"></div>
</div>

<script>
var entries = [];
var target;

runTestCycle(function() {
  target = document.getElementById("target");
  assert_true(!!target, "target exists");
  var 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.");
}, "Test that the target's border bounding box is used to calculate intersection.");

function step0() {
  var targetBounds = clientBounds(target);
  target.style.transform = "translateY(195px)";
  runTestCycle(step1, "target.style.transform = 'translateY(195px)'");
  checkLastEntry(entries, 0, targetBounds.concat(0, 0, 0, 0, 8, 184, 8, 224, false));
}

function step1() {
  var targetBounds = clientBounds(target);
  target.style.transform = "translateY(300px)";
  runTestCycle(step2, "target.style.transform = 'translateY(300px)'");
  checkLastEntry(entries, 1, targetBounds.concat(26, 146, 221, 224, 8, 184, 8, 224, true));
}

function step2() {
  var targetBounds = clientBounds(target);
  target.style.transform = "";
  target.style.zoom = "2";
  runTestCycle(step3, "target.style.zoom = 2");
  checkLastEntry(entries, 2, targetBounds.concat(0, 0, 0, 0, 8, 184, 8, 224, false));
}

function step3() {
  var targetBounds = clientBounds(target);
  var intersectionWidth = (
      176  // root width including border
      -8   // root left border
      -20  // target left margin * target zoom
  ) / 2;   // convert to target's zoom factor.
  var intersectionHeight = (216 - 8 - 20) / 2;
  var intersectionRect = [targetBounds[0], targetBounds[0] + intersectionWidth,
                          targetBounds[2], targetBounds[2] + intersectionHeight];
  checkLastEntry(entries, 3, targetBounds.concat(intersectionRect).concat(8, 184, 8, 224, true));
}

</script>
