<!DOCTYPE html>
<script src="../resources/js-test.js"></script>
<script src="helper-functions.js"></script>
<div id="root" style="display: inline-block; overflow-y: scroll; height: 200px; border: 3px solid black">
  <div style="width:100px; height: 300px;"></div>
  <div id="target" style="background-color: green; width:100px; height:100px"></div>
  <div id="afterTarget" style="width:100px; height: 300px;"></div>
</div>

<script>
description("Test that notifications are sent correctly when root and/or target are removed from the DOM tree.");
var target = document.getElementById("target");
var afterTarget = document.getElementById("afterTarget");
var root = document.getElementById("root");
var entries = [];
var observer = new IntersectionObserver(
    changes => { entries = entries.concat(changes) },
    { root: document.getElementById("root") }
);

onload = function() {
  observer.observe(target);
  entries = entries.concat(observer.takeRecords());
  shouldBeEqualToNumber("entries.length", 0);
  root.scrollTop = 150;
  requestAnimationFrame(() => { requestAnimationFrame(step1) });
}

function step1() {
  entries = entries.concat(observer.takeRecords());
  shouldBeEqualToNumber("entries.length", 1);
  if (entries.length > 0) {
    shouldBeEqualToNumber("entries[0].boundingClientRect.left", 11);
    shouldBeEqualToNumber("entries[0].boundingClientRect.right", 111);
    shouldBeEqualToNumber("entries[0].boundingClientRect.top", 161);
    shouldBeEqualToNumber("entries[0].boundingClientRect.bottom", 261);
    shouldBeEqualToNumber("entries[0].intersectionRect.left", 11);
    shouldBeEqualToNumber("entries[0].intersectionRect.right", 111);
    shouldBeEqualToNumber("entries[0].intersectionRect.top", 161);
    shouldBeEqualToNumber("entries[0].intersectionRect.bottom", 211);
    shouldBeEqualToNumber("entries[0].rootBounds.left", 11);
    shouldBeEqualToNumber("entries[0].rootBounds.right", 111);
    shouldBeEqualToNumber("entries[0].rootBounds.top", 11);
    shouldBeEqualToNumber("entries[0].rootBounds.bottom", 211);
    shouldEvaluateToSameObject("entries[0].target", target);
  }
  root.removeChild(target);
  requestAnimationFrame(step2);
}

function step2() {
  entries = entries.concat(observer.takeRecords());
  shouldBeEqualToNumber("entries.length", 2);
  if (entries.length > 1) {
    shouldBeEqualToNumber("entries[1].boundingClientRect.left", 0);
    shouldBeEqualToNumber("entries[1].boundingClientRect.right", 0);
    shouldBeEqualToNumber("entries[1].boundingClientRect.top", 0);
    shouldBeEqualToNumber("entries[1].boundingClientRect.bottom", 0)
    shouldBeEqualToNumber("entries[1].intersectionRect.left", 0);
    shouldBeEqualToNumber("entries[1].intersectionRect.right", 0);
    shouldBeEqualToNumber("entries[1].intersectionRect.top", 0);
    shouldBeEqualToNumber("entries[1].intersectionRect.bottom", 0);
    shouldBeEqualToNumber("entries[1].rootBounds.left", 0);
    shouldBeEqualToNumber("entries[1].rootBounds.right", 0);
    shouldBeEqualToNumber("entries[1].rootBounds.top", 0);
    shouldBeEqualToNumber("entries[1].rootBounds.bottom", 0);
    shouldEvaluateToSameObject("entries[1].target", target);
  }
  root.scrollTop = 0;
  root.insertBefore(target, afterTarget);
  requestAnimationFrame(step3);
}

function step3() {
  entries = entries.concat(observer.takeRecords());
  shouldBeEqualToNumber("entries.length", 2);
  root.scrollTop = 150;
  requestAnimationFrame(step4);
}

function step4() {
  entries = entries.concat(observer.takeRecords());
  shouldBeEqualToNumber("entries.length", 3);
  if (entries.length > 2) {
    shouldBeEqualToNumber("entries[2].boundingClientRect.left", 11);
    shouldBeEqualToNumber("entries[2].boundingClientRect.right", 111);
    shouldBeEqualToNumber("entries[2].boundingClientRect.top", 161);
    shouldBeEqualToNumber("entries[2].boundingClientRect.bottom", 261);
    shouldBeEqualToNumber("entries[2].intersectionRect.left", 11);
    shouldBeEqualToNumber("entries[2].intersectionRect.right", 111);
    shouldBeEqualToNumber("entries[2].intersectionRect.top", 161);
    shouldBeEqualToNumber("entries[2].intersectionRect.bottom", 211);
    shouldBeEqualToNumber("entries[2].rootBounds.left", 11);
    shouldBeEqualToNumber("entries[2].rootBounds.right", 111);
    shouldBeEqualToNumber("entries[2].rootBounds.top", 11);
    shouldBeEqualToNumber("entries[2].rootBounds.bottom", 211);
    shouldEvaluateToSameObject("entries[2].target", target);
  }
  finishJSTest();
}
</script>
