<!DOCTYPE html><!-- webkit-test-runner [ enableIntersectionObserver=true ] -->
<head>
    <title>IntersectionObserverEntry interface tests.</title>
    <link rel="author" title="Simon Fraser" href="mailto:simon.fraser@apple.com" />
    <link rel="help" href="https://wicg.github.io/IntersectionObserver/">
    <script src="../resources/testharness.js"></script>
    <script src="../resources/testharnessreport.js"></script>
</head>
<body>
<div id="log"></div>
<script>

    var entryInit = {
        time: 9999,
        rootBounds: { x: 10, y: 12.5, width: 130, height: 140 },
        boundingClientRect: { x: 110, y: 112.7, width: 1130, height: 1140 },
        intersectionRect: { x: 210, y: 212, width: 2130, height: 2140 },
        isIntersecting: true,
        intersectionRatio: 0.35,
        target: document.body
    };

    test(function() {
        assert_class_string(new IntersectionObserverEntry(entryInit), 'IntersectionObserverEntry');
    },'Constructor0');
    test(function() {
        var entry = new IntersectionObserverEntry(entryInit);
        assert_equals(entry.time, 9999);
    },'ConstructorTime');
    test(function() {
        var entry = new IntersectionObserverEntry(entryInit);
        assert_equals(JSON.stringify(entry.rootBounds), '{"x":10,"y":12.5,"width":130,"height":140,"top":12.5,"right":140,"bottom":152.5,"left":10}');
        assert_class_string(entry.rootBounds, 'DOMRectReadOnly');
    },'ConstructorRootBounds');
    test(function() {
        entryInit.rootBounds = null;
        var entry = new IntersectionObserverEntry(entryInit);
        assert_equals(entry.rootBounds, null);
    },'ConstructorNullRootBounds');
    test(function() {
        var entry = new IntersectionObserverEntry(entryInit);
        assert_class_string(entry.boundingClientRect, 'DOMRectReadOnly');
        assert_equals(JSON.stringify(entry.boundingClientRect), '{"x":110,"y":112.7,"width":1130,"height":1140,"top":112.7,"right":1240,"bottom":1252.7,"left":110}');
    },'ConstructorBoundingClientRect');
    test(function() {
        var entry = new IntersectionObserverEntry(entryInit);
        assert_class_string(entry.intersectionRect, 'DOMRectReadOnly');
        assert_equals(JSON.stringify(entry.intersectionRect), '{"x":210,"y":212,"width":2130,"height":2140,"top":212,"right":2340,"bottom":2352,"left":210}');
    },'ConstructorIntersectionRect');
    test(function() {
        var entry = new IntersectionObserverEntry(entryInit);
        assert_true(entry.isIntersecting);
    },'ConstructorIsIntersecting');
    test(function() {
        var entry = new IntersectionObserverEntry(entryInit);
        assert_equals(entry.intersectionRatio, 0.35);
    },'ConstructorIntersectionRatio');
    test(function() {
        var entry = new IntersectionObserverEntry(entryInit);
        assert_equals(entry.target, document.body);
    },'ConstructorTarget');

</script>
</body>
</html>
