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