blob: 7fe432468a6964830792e1b0181f591fc06f9ea1 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>DOM getters should perform type checks</title>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
</head>
<body>
<script>
var div = document.createElement("div");
var getter = Object.getOwnPropertyDescriptor(Element.prototype, "scrollTop").get;
test(() => {
assert_equals(typeof getter, "function");
}, "DOM getter should be a function");
test(() => {
assert_throws(new TypeError(), () => { getter(); }, "DOM getter throws an error with undefined");
assert_throws(new TypeError(), () => { getter.call(null); }, "DOM getter throws an error with null");
assert_throws(new TypeError(), () => { getter.call({}); }, "DOM getter throws an error with unrelated object");
assert_throws(new TypeError(), () => { getter.call(document.createText("Hello")); }, "DOM getter throws an error with unrelated DOM object");
}, "DOM getter throws an error with unrelated values");
test(() => {
assert_equals(typeof getter.call(div), "number");
}, "DOM getter works with element object");
test(() => {
var object = {
};
Object.defineProperty(object, "scrollTop", {
get: getter
});
assert_throws(new TypeError(), () => { object.scrollTop; });
}, "DOM getter access throws an error with unrelated object");
test(() => {
var object = {
__proto__: Element.prototype
};
assert_throws(new TypeError(), () => { object.scrollTop; });
}, "DOM getter access through Element.prototype throws an error with unrelated object");
</script>
</body>