| <!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> |