<!DOCTYPE html>
<!--
 | This test checks that an intersection is observed when the target element has
 | zero area but technically intersects with the root element.
 | The root element is initially red, but if the intersection is observed, as is
 | expected, it becomes green.
 |   https://www.w3.org/TR/intersection-observer/
 -->
<html>
<head>
  <style>
    #root {
      background-color: red;
      width: 200px;
      height: 200px;
      position: absolute;
    }
    #target {
      width: 100px;
      height: 0px;
      position: absolute;
      margin: 50px;
    }
  </style>
</head>
<body>
  <div id="root">
    <div id="target"></div>
  </div>

  <script>
    if (window.testRunner) {
      window.testRunner.waitUntilDone();
    }

    window.addEventListener("load", function() {
      var rootElement = document.querySelector('#root');
      var targetElement = document.querySelector('#target');

    function handleIntersect(entries, observer) {
      entries.forEach(function(entry) {
        console.log(entry.isIntersecting);
        if (entry.isIntersecting) {
          rootElement.style.backgroundColor = "green";
        }
      });
    }

      function createObserver() {
        var options = {
          root: rootElement,
          rootMargin: "0px",
          threshold: 0.0
        };

        var observer = new IntersectionObserver(handleIntersect, options);
        observer.observe(targetElement);
      }

      createObserver();

      if (window.testRunner) {
        window.testRunner.DoNonMeasuredLayout();
        window.setTimeout(function() { window.testRunner.notifyDone(); }, 0);
      }
    });
  </script>

</body>
</html>
