<!DOCTYPE html>
<title>Tests that the parameters to document.elementFromPoint() and
document.elementsFromPoint() are mandatory and of type double.</title>
<link rel="help" href="https://drafts.csswg.org/cssom-view/#extensions-to-the-document-interface">
<script src="../../../../../resources/testharness.js"></script>
<script src="../../../../../resources/testharnessreport.js"></script>
<script>
function validate_function_parameter_count(testFunc, funcName) {
    test(function() {
        assert_throws(new TypeError(), function() {
            testFunc();
        }, "Called with no parameter");
        assert_throws(new TypeError(), function() {
            testFunc(0);
        }, "Called with 1 parameter");
    }, funcName + ": Parameters are mandatory.");
}

function validate_function_parameter_type(testFunc, funcName) {
    test(function() {
        assert_throws(new TypeError(), function() {
            testFunc(0, Infinity);
        }, "Passing Infinity as second parameter throws");
        assert_throws(new TypeError(), function() {
            testFunc(Infinity, 0);
        }, "Passing Infinity as first parameter throws");
        assert_throws(new TypeError(), function() {
            testFunc(0, NaN);
        }, "Passing NaN as second parameter throws");
        assert_throws(new TypeError(), function() {
            testFunc(NaN, 0);
        }, "Passing NaN as first parameter throws");
    }, funcName + ": Parameters should be finite floating point values.");
}

validate_function_parameter_count(function(x, y) {
    document.elementFromPoint(x, y);
}, "document.elementFromPoint");

validate_function_parameter_type(function(x, y) {
    document.elementFromPoint(x, y);
}, "document.elementFromPoint");

validate_function_parameter_count(function(x, y) {
    document.elementsFromPoint(x, y);
}, "document.elementsFromPoint");

validate_function_parameter_type(function(x, y) {
    document.elementsFromPoint(x, y);
}, "document.elementsFromPoint");
</script>
