import { assert, assertThrows } from "./assert.js";
const desc = Object.getOwnPropertyDescriptor(Iterator.prototype, "constructor");
const get = desc.get;
const set = desc.set;
assert(typeof get, "function");
assert(typeof set, "function");
assert(get !== set, true);
assert(get.length, 0);
assert(set.length, 1);
assert(get.call({}), Iterator);
assert(get.call(undefined), Iterator);
assert(Iterator.prototype.constructor, Iterator);
{
const o = {};
assert(get.call(o, 123), Iterator);
assert(Object.prototype.hasOwnProperty.call(o, "constructor"), false);
}
{
const o = {};
assert(set.call(o), undefined);
const d = Object.getOwnPropertyDescriptor(o, "constructor");
assert(d.value, undefined);
assert(d.writable, true);
assert(d.enumerable, true);
assert(d.configurable, true);
}
{
const o = {};
assert(set.call(o, 0), undefined);
const d = Object.getOwnPropertyDescriptor(o, "constructor");
assert(d.value, 0);
assert(d.writable, true);
assert(d.enumerable, true);
assert(d.configurable, true);
}
assertThrows(TypeError, () => set.call(undefined, 0));
assertThrows(TypeError, () => set.call(null, 0));
assertThrows(TypeError, () => set.call(1, 0));
assertThrows(TypeError, () => set.call("s", 0));
assertThrows(TypeError, () => set.call(Iterator.prototype, 0));
assert(Iterator.prototype.constructor, Iterator);
{
const o = {};
Object.defineProperty(o, "constructor", {
value: 1, writable: false, enumerable: true, configurable: true,
});
assertThrows(TypeError, () => set.call(o, 2));
assert(o.constructor, 1); }
{
const o = { constructor: 1 };
assert(set.call(o, 2), undefined);
assert(o.constructor, 2);
}
{
const o = Object.preventExtensions({});
assertThrows(TypeError, () => set.call(o, 0));
assert(Object.prototype.hasOwnProperty.call(o, "constructor"), false);
}
{
const it = Object.create(Iterator.prototype);
it.constructor = 42;
const d = Object.getOwnPropertyDescriptor(it, "constructor");
assert(d.value, 42);
assert(d.writable, true);
assert(d.enumerable, true);
assert(d.configurable, true);
assert(Iterator.prototype.constructor, Iterator);
}