<!DOCTYPE html>
<head>
    <title>IntersectionObserver 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>

    test(function() {
        assert_class_string(new IntersectionObserver(function() {}), 'IntersectionObserver');
    },'Constructor0');
    test(function() {
        var observer = new IntersectionObserver(function() {});
        assert_equals(observer.rootMargin, '0px 0px 0px 0px');
    },'DefaultRootMargin');
    test(function() {
        var observer = new IntersectionObserver(function() {});
        assert_equals(observer.scrollMargin, '0px 0px 0px 0px');
    },'DefaultScrollMargin');
    test(function() {
        var observer = new IntersectionObserver(function() {});
        assert_equals(observer.root, null);
    },'DefaultRoot');
    test(function() {
        var observer = new IntersectionObserver(function() {});
        assert_array_equals(observer.thresholds, [0]);
    },'DefaultThresholds');
    test(function() {
        var observer = new IntersectionObserver(function() {}, { rootMargin: '33%' });
        assert_equals(observer.rootMargin, '33% 33% 33% 33%');
    },'ExplicitOneArgumentRootMargin');
    test(function() {
        var observer = new IntersectionObserver(function() {}, { rootMargin: '33% 10px' });
        assert_equals(observer.rootMargin, '33% 10px 33% 10px');
    },'ExplicitTwoArgumentRootMargin');
    test(function() {
        var observer = new IntersectionObserver(function() {}, { rootMargin: '33% 10px -120px' });
        assert_equals(observer.rootMargin, '33% 10px -120px 10px');
    },'ExplicitThreeArgumentRootMargin');
    test(function() {
        var observer = new IntersectionObserver(function() {}, { rootMargin: '33% 10px -120px 3%' });
        assert_equals(observer.rootMargin, '33% 10px -120px 3%');
    },'ExplicitFourArgumentRootMargin');
    test(function() {
        var observer = new IntersectionObserver(function() {}, { scrollMargin: '33%' });
        assert_equals(observer.scrollMargin, '33% 33% 33% 33%');
    },'ExplicitOneArgumentScrollMargin');
    test(function() {
        var observer = new IntersectionObserver(function() {}, { scrollMargin: '33% 10px' });
        assert_equals(observer.scrollMargin, '33% 10px 33% 10px');
    },'ExplicitTwoArgumentScrollMargin');
    test(function() {
        var observer = new IntersectionObserver(function() {}, { scrollMargin: '33% 10px -120px' });
        assert_equals(observer.scrollMargin, '33% 10px -120px 10px');
    },'ExplicitThreeArgumentScrollMargin');
    test(function() {
        var observer = new IntersectionObserver(function() {}, { scrollMargin: '33% 10px -120px 3%' });
        assert_equals(observer.scrollMargin, '33% 10px -120px 3%');
    },'ExplicitFourArgumentScrollMargin');
    test(function() {
        var observer = new IntersectionObserver(function() {}, { root: document.body });
        assert_equals(observer.root, document.body);
    },'ExplicitRoot');
    test(function() {
        var observer = new IntersectionObserver(function() {},  { threshold: 0.45 });
        assert_array_equals(observer.thresholds, [0.45]);
    },'ExplicitThreshold');
    test(function() {
        var observer = new IntersectionObserver(function() {},  { threshold: [0, 0.33333678, 0.5, 0.76645] });
        assert_array_equals(observer.thresholds, [0, 0.33333678, 0.5, 0.76645]);
    },'ExplicitThresholds');
    test(function() {
        var observer = new IntersectionObserver(function() {},  { threshold: Number.MIN_VALUE });
        assert_array_equals(observer.thresholds, [Number.MIN_VALUE]);
    },'SmallPositiveThreshold');
    test(function() {
        assert_throws_js(RangeError, function() {
            new IntersectionObserver(function() {},  { threshold: -Number.MIN_VALUE });
        })
    },'SmallNegativeThreshold');
    test(function() {
        assert_throws_js(RangeError, function() {
            new IntersectionObserver(function() {},  { threshold: Number.MAX_VALUE });
        })
    },'LargePositiveThreshold');
    test(function() {
        assert_throws_js(RangeError, function() {
            new IntersectionObserver(function() {},  { threshold: -Number.MAX_VALUE });
        })
    },'LargeNegativeThreshold');
    test(function() {
        assert_throws_js(TypeError, function() {
            new IntersectionObserver(function() {},  { threshold: Number.POSITIVE_INFINITY });
        })
    },'PositiveInfinityThreshold');
    test(function() {
        assert_throws_js(TypeError, function() {
            new IntersectionObserver(function() {},  { threshold: Number.NEGATIVE_INFINITY });
        })
    },'NegativeInfinityThreshold');
    test(function() {
        assert_throws_js(TypeError, function() {
            new IntersectionObserver(function() {},  { threshold: Number.NaN });
        })
    },'NaNThreshold');
</script>
</body>
</html>
