| <!DOCTYPE html> |
| <meta charset="utf-8"> |
| <title>[Replaceable] setter throws TypeError if [[DefineOwnProperty]] fails</title> |
| <link rel="help" href="https://heycam.github.io/webidl/#dfn-attribute-setter"> |
| |
| <script src="../../resources/testharness.js"></script> |
| <script src="../../resources/testharnessreport.js"></script> |
| |
| <body> |
| <script> |
| for (const key of ["self", "parent", "origin", "innerWidth"]) { |
| test(() => { |
| Object.defineProperty(window, key, { configurable: false }); |
| assert_throws_js(TypeError, () => { window[key] = 1; }); |
| |
| const desc = Object.getOwnPropertyDescriptor(window, key); |
| assert_false("value" in desc); |
| assert_equals(typeof desc.get, "function"); |
| assert_equals(typeof desc.set, "function"); |
| assert_true(desc.enumerable); |
| assert_false(desc.configurable); |
| }, `window.${key} setter throws TypeError if called on non-configurable accessor property`); |
| } |
| |
| for (const key of ["screen", "length", "event", "outerHeight"]) { |
| test(() => { |
| const { set } = Object.getOwnPropertyDescriptor(window, key); |
| Object.defineProperty(window, key, { value: 1, writable: false, configurable: false }); |
| assert_throws_js(TypeError, () => { set.call(window, 2); }); |
| |
| const desc = Object.getOwnPropertyDescriptor(window, key); |
| assert_equals(desc.value, 1); |
| assert_false(desc.writable); |
| assert_true(desc.enumerable); |
| assert_false(desc.configurable); |
| }, `window.${key} setter throws TypeError if called on non-configurable non-writable data property`); |
| } |
| </script> |