replaceable-setter-throws-if-defineownproperty-fails.html (1650B)
1 <!doctype html> 2 <meta charset="utf-8"> 3 <title>[Replaceable] setter throws TypeError if [[DefineOwnProperty]] fails</title> 4 <script src="/resources/testharness.js"></script> 5 <script src="/resources/testharnessreport.js"></script> 6 <link rel="author" title="Alexey Shvayka" href="shvaikalesh@gmail.com"> 7 <link rel="help" href="https://webidl.spec.whatwg.org/#Replaceable"> 8 9 <body> 10 <script> 11 for (const key of ["self", "parent", "origin", "innerWidth"]) { 12 test(() => { 13 Object.defineProperty(window, key, { configurable: false }); 14 assert_throws_js(TypeError, () => { window[key] = 1; }); 15 16 const desc = Object.getOwnPropertyDescriptor(window, key); 17 assert_false("value" in desc); 18 assert_equals(typeof desc.get, "function"); 19 assert_equals(typeof desc.set, "function"); 20 assert_true(desc.enumerable); 21 assert_false(desc.configurable); 22 }, `window.${key} setter throws TypeError if called on non-configurable accessor property`); 23 } 24 25 for (const key of ["screen", "length", "event", "outerHeight"]) { 26 test(() => { 27 const { set } = Object.getOwnPropertyDescriptor(window, key); 28 Object.defineProperty(window, key, { value: 1, writable: false, configurable: false }); 29 assert_throws_js(TypeError, () => { set.call(window, 2); }); 30 31 const desc = Object.getOwnPropertyDescriptor(window, key); 32 assert_equals(desc.value, 1); 33 assert_false(desc.writable); 34 assert_true(desc.enumerable); 35 assert_false(desc.configurable); 36 }, `window.${key} setter throws TypeError if called on non-configurable non-writable data property`); 37 } 38 </script>