<!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>
/* Cobalt does not implement HTML5 spec for body margin. */
body {
  margin: 8px;
}
pre, #log {
  position: absolute;
  top: 0;
  left: 200px;
}
.spacer {
  /* Cobalt does not support calc */
  height: 100vh;
}
.target {
  width: 100px;
  height: 100px;
  margin: 10px;
  background-color: green;
}
</style>

<div class="spacer"></div>
<div id="target1" class="target" style="margin-top:100px;"></div>
<div id="target2" class="target"></div>
<div id="target3" class="target"></div>

<script>
var entries = [];
var target1, target2, target3;

runTestCycle(function() {
  target1 = document.getElementById("target1");
  assert_true(!!target1, "target1 exists.");
  target2 = document.getElementById("target2");
  assert_true(!!target2, "target2 exists.");
  target3 = document.getElementById("target3");
  assert_true(!!target3, "target3 exists.");
  var observer = new IntersectionObserver(function(changes) {
    entries = entries.concat(changes);
    window.testRunner.DoNonMeasuredLayout();
  });
  observer.observe(target1);
  observer.observe(target2);
  observer.observe(target3);
  entries = entries.concat(observer.takeRecords());
  assert_equals(entries.length, 0, "No initial notifications.");
  runTestCycle(step0, "First rAF.");
}, "One observer with multiple targets.");
window.testRunner.DoNonMeasuredLayout();
window.testRunner.DoNonMeasuredLayout();

function step0() {
  target1.style.marginTop = "-50px";
  //document.scrollingElement.scrollTop = 150;
  runTestCycle(step1, "document.scrollingElement.scrollTop = 150");
  assert_equals(entries.length, 3, "Three initial notifications.");
  assert_equals(entries[0].target, target1, "entries[0].target === target1");
  assert_equals(entries[1].target, target2, "entries[1].target === target2");
  assert_equals(entries[2].target, target3, "entries[2].target === target3");
}

function step1() {
  // document.scrollingElement.scrollTop = 10000 indicates that the page should
  // scroll just far down enough to include all the elements in the DOM tree.
  // Since we are using marginTop as a workaround, we need to adjust the value.
  target1.style.marginTop = "-330px";
  //document.scrollingElement.scrollTop = 10000;
  runTestCycle(step2, "document.scrollingElement.scrollTop = 10000");
  assert_equals(entries.length, 4, "Four notifications.");
  assert_equals(entries[3].target, target1, "entries[3].target === target1");
}

function step2() {
  target1.style.marginTop = "100px";
  //document.scrollingElement.scrollTop = 0;
  runTestCycle(step3, "document.scrollingElement.scrollTop = 0");
  assert_equals(entries.length, 6, "Six notifications.");
  assert_equals(entries[4].target, target2, "entries[4].target === target2");
  assert_equals(entries[5].target, target3, "entries[5].target === target3");
}

function step3() {
  assert_equals(entries.length, 9, "Nine notifications.");
  assert_equals(entries[6].target, target1, "entries[6].target === target1");
  assert_equals(entries[7].target, target2, "entries[7].target === target2");
  assert_equals(entries[8].target, target3, "entries[8].target === target3");
}
</script>
