<!DOCTYPE html>
<script src="../resources/js-test.js"></script>
<script src="helper-functions.js"></script>
<div style="width:100%; height:700px;"></div>
<div id="target" style="background-color: green; width:100px; height:100px"></div>
<div style="width:100%; height:700px;"></div>

<script>
  description("Simple intersection observer test with no explicit root and one document.");
  var target = document.getElementById("target");
  var entries = [];

  observer_callback = function(changes) {
    for (var i in changes)
      entries.push(changes[i]);
  };
  var observer = new IntersectionObserver(observer_callback, {});
  observer.observe(target);

  // TODO(szager): It shouldn't be necessary to RAF after the call to observer()
  // and before changing the scroll position, but it is.

  function step0() {
    setTimeout(function() {
      shouldBeEqualToNumber("entries.length", 0);
      document.scrollingElement.scrollTop = 300;
      requestAnimationFrame(step1);
    });
  }

  function step1() {
    setTimeout(function() {
      shouldBeEqualToNumber("entries.length", 1);
      shouldBeEqualToNumber("entries[0].boundingClientRect.left", 8);
      shouldBeEqualToNumber("entries[0].boundingClientRect.right", 108);
      shouldBeEqualToNumber("entries[0].boundingClientRect.top", 408);
      shouldBeEqualToNumber("entries[0].boundingClientRect.bottom", 508);
      shouldBeEqualToNumber("entries[0].intersectionRect.left", 8);
      shouldBeEqualToNumber("entries[0].intersectionRect.right", 108);
      shouldBeEqualToNumber("entries[0].intersectionRect.top", 408);
      shouldBeEqualToNumber("entries[0].intersectionRect.bottom", 508);
      shouldBeEqualToNumber("entries[0].rootBounds.left", 0);
      shouldBeEqualToNumber("entries[0].rootBounds.right", 785);
      shouldBeEqualToNumber("entries[0].rootBounds.top", 0);
      shouldBeEqualToNumber("entries[0].rootBounds.bottom", 600);
      shouldEvaluateToSameObject("entries[0].target", target);

      // ClientRect members of IntersectionObserverEntry should be stable.
      shouldEvaluateToSameObject("entries[0].boundingClientRect", entries[0].boundingClientRect);
      shouldEvaluateToSameObject("entries[0].intersectionRect", entries[0].intersectionRect);
      shouldEvaluateToSameObject("entries[0].rootBounds", entries[0].rootBounds);

      document.scrollingElement.scrollTop = 100;
      requestAnimationFrame(step2);
    });
  }

  function step2() {
    setTimeout(function() {
      shouldBeEqualToNumber("entries.length", 2);
      shouldBeEqualToNumber("entries[1].boundingClientRect.left", 8);
      shouldBeEqualToNumber("entries[1].boundingClientRect.right", 108);
      shouldBeEqualToNumber("entries[1].boundingClientRect.top", 608);
      shouldBeEqualToNumber("entries[1].boundingClientRect.bottom", 708);
      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", 785);
      shouldBeEqualToNumber("entries[1].rootBounds.top", 0);
      shouldBeEqualToNumber("entries[1].rootBounds.bottom", 600);
      shouldEvaluateToSameObject("entries[1].target", target);
      finishTest();
      document.scrollingElement.scrollTop = 0;
    });
  }

  requestAnimationFrame(step0);
</script>
