Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
QUnit.test('Object.getPrototypeOf', assert => {
assert.isFunction(getPrototypeOf);
assert.arity(getPrototypeOf, 1);
assert.ok(getPrototypeOf({}) === Object.prototype);
assert.ok(getPrototypeOf([]) === Array.prototype);
function F() { /* empty */ }
assert.ok(getPrototypeOf(new F()) === F.prototype);
const object = { q: 1 };
assert.ok(getPrototypeOf(create(object)) === object);
assert.ok(getPrototypeOf(create(null)) === null);
assert.ok(getPrototypeOf(getPrototypeOf({})) === null);
function Foo() { /* empty */ }
Foo.prototype.foo = 'foo';
function Bar() { /* empty */ }
Bar.prototype = create(Foo.prototype);
Bar.prototype.constructor = Bar;
assert.strictEqual(getPrototypeOf(Bar.prototype).foo, 'foo');
const primitives = [42, 'foo', false];
for (const value of primitives) {
assert.notThrows(() => getPrototypeOf(value), `accept ${ typeof value }`);
}
assert.throws(() => getPrototypeOf(null), TypeError, 'throws on null');
assert.throws(() => getPrototypeOf(undefined), TypeError, 'throws on undefined');
assert.strictEqual(getPrototypeOf('foo'), String.prototype);
});
QUnit.test('Object.getPrototypeOf', assert => {
assert.isFunction(getPrototypeOf);
assert.arity(getPrototypeOf, 1);
assert.ok(getPrototypeOf({}) === Object.prototype);
assert.ok(getPrototypeOf([]) === Array.prototype);
function F() { /* empty */ }
assert.ok(getPrototypeOf(new F()) === F.prototype);
const object = { q: 1 };
assert.ok(getPrototypeOf(create(object)) === object);
assert.ok(getPrototypeOf(create(null)) === null);
assert.ok(getPrototypeOf(getPrototypeOf({})) === null);
function Foo() { /* empty */ }
Foo.prototype.foo = 'foo';
function Bar() { /* empty */ }
Bar.prototype = create(Foo.prototype);
Bar.prototype.constructor = Bar;
assert.strictEqual(getPrototypeOf(Bar.prototype).foo, 'foo');
const primitives = [42, 'foo', false];
for (const value of primitives) {
assert.notThrows(() => getPrototypeOf(value), `accept ${ typeof value }`);
}
assert.throws(() => getPrototypeOf(null), TypeError, 'throws on null');
assert.throws(() => getPrototypeOf(undefined), TypeError, 'throws on undefined');
assert.strictEqual(getPrototypeOf('foo'), String.prototype);
});
QUnit.test('Object.getPrototypeOf', assert => {
assert.isFunction(getPrototypeOf);
assert.arity(getPrototypeOf, 1);
assert.ok(getPrototypeOf({}) === Object.prototype);
assert.ok(getPrototypeOf([]) === Array.prototype);
function F() { /* empty */ }
assert.ok(getPrototypeOf(new F()) === F.prototype);
const object = { q: 1 };
assert.ok(getPrototypeOf(create(object)) === object);
assert.ok(getPrototypeOf(create(null)) === null);
assert.ok(getPrototypeOf(getPrototypeOf({})) === null);
function Foo() { /* empty */ }
Foo.prototype.foo = 'foo';
function Bar() { /* empty */ }
Bar.prototype = create(Foo.prototype);
Bar.prototype.constructor = Bar;
assert.strictEqual(getPrototypeOf(Bar.prototype).foo, 'foo');
const primitives = [42, 'foo', false];
for (const value of primitives) {
assert.notThrows(() => getPrototypeOf(value), `accept ${ typeof value }`);
}
assert.throws(() => getPrototypeOf(null), TypeError, 'throws on null');
assert.throws(() => getPrototypeOf(undefined), TypeError, 'throws on undefined');
assert.strictEqual(getPrototypeOf('foo'), String.prototype);
});
QUnit.test('Object#__lookupSetter__', assert => {
assert.isFunction(__lookupSetter__);
assert.same(__lookupSetter__({}, 'key'), undefined, 'empty object');
assert.same(__lookupSetter__({ key: 42 }, 'key'), undefined, 'data descriptor');
const object = {};
function setter() { /* empty */ }
__defineSetter__(object, 'key', setter);
assert.same(__lookupSetter__(object, 'key'), setter, 'own getter');
assert.same(__lookupSetter__(create(object), 'key'), setter, 'proto getter');
assert.same(__lookupSetter__(create(object), 'foo'), undefined, 'empty proto');
if (STRICT) {
assert.throws(() => __lookupSetter__(null, 1, () => { /* empty */ }), TypeError, 'Throws on null as `this`');
assert.throws(() => __lookupSetter__(undefined, 1, () => { /* empty */ }), TypeError, 'Throws on undefined as `this`');
}
});
}
QUnit.test('Object.create', assert => {
function getPropertyNames(object) {
let result = [];
do {
result = result.concat(getOwnPropertyNames(object));
} while (object = getPrototypeOf(object));
return result;
}
assert.isFunction(create);
assert.arity(create, 2);
let object = { q: 1 };
assert.ok({}.isPrototypeOf.call(object, create(object)));
assert.ok(create(object).q === 1);
function C() {
return this.a = 1;
}
assert.ok(create(new C()) instanceof C);
assert.ok(C.prototype === getPrototypeOf(getPrototypeOf(create(new C()))));
assert.ok(create(new C()).a === 1);
assert.ok(create({}, { a: { value: 42 } }).a === 42);
object = create(null, { w: { value: 2 } });
assert.same(object, Object(object));
assert.ok(!('toString' in object));
assert.ok(object.w === 2);
assert.deepEqual(getPropertyNames(create(null)), []);
});
QUnit.test('Object.getOwnPropertySymbols', assert => {
assert.isFunction(getOwnPropertySymbols);
const prototype = { q: 1, w: 2, e: 3 };
prototype[Symbol()] = 42;
prototype[Symbol()] = 43;
assert.deepEqual(getOwnPropertyNames(prototype).sort(), ['e', 'q', 'w']);
assert.strictEqual(getOwnPropertySymbols(prototype).length, 2);
const object = create(prototype);
object.a = 1;
object.s = 2;
object.d = 3;
object[Symbol()] = 44;
assert.deepEqual(getOwnPropertyNames(object).sort(), ['a', 'd', 's']);
assert.strictEqual(getOwnPropertySymbols(object).length, 1);
assert.strictEqual(getOwnPropertySymbols(Object.prototype).length, 0);
const primitives = [42, 'foo', false];
for (const value of primitives) {
assert.notThrows(() => getOwnPropertySymbols(value), `accept ${ typeof value }`);
}
});
let result = [];
do {
result = result.concat(getOwnPropertyNames(object));
} while (object = getPrototypeOf(object));
return result;
}
assert.isFunction(create);
assert.arity(create, 2);
let object = { q: 1 };
assert.ok({}.isPrototypeOf.call(object, create(object)));
assert.ok(create(object).q === 1);
function C() {
return this.a = 1;
}
assert.ok(create(new C()) instanceof C);
assert.ok(C.prototype === getPrototypeOf(getPrototypeOf(create(new C()))));
assert.ok(create(new C()).a === 1);
assert.ok(create({}, { a: { value: 42 } }).a === 42);
object = create(null, { w: { value: 2 } });
assert.same(object, Object(object));
assert.ok(!('toString' in object));
assert.ok(object.w === 2);
assert.deepEqual(getPropertyNames(create(null)), []);
});
assert.isFunction(ownKeys);
assert.arity(ownKeys, 1);
if ('name' in ownKeys) {
assert.name(ownKeys, 'ownKeys');
}
const object = { a: 1 };
defineProperty(object, 'b', {
value: 2,
});
object[Symbol('c')] = 3;
let keys = ownKeys(object);
assert.strictEqual(keys.length, 3, 'ownKeys return all own keys');
assert.ok(includes(keys, 'a'), 'ownKeys return all own keys: simple');
assert.ok(includes(keys, 'b'), 'ownKeys return all own keys: hidden');
assert.strictEqual(object[keys[2]], 3, 'ownKeys return all own keys: symbol');
keys = ownKeys(create(object));
assert.strictEqual(keys.length, 0, 'ownKeys return only own keys');
assert.throws(() => ownKeys(42), TypeError, 'throws on primitive');
});
assert.throws(() => defineProperty({}, create(null), {}));
assert.throws(() => defineProperty({}, 1, 1));
const receiver = {};
set(target, 'foo', 1, receiver);
assert.strictEqual(target.foo, undefined, 'target.foo === undefined');
assert.strictEqual(receiver.foo, 1, 'receiver.foo === 1');
if (DESCRIPTORS) {
defineProperty(receiver, 'bar', {
value: 0,
writable: true,
enumerable: false,
configurable: true,
});
set(target, 'bar', 1, receiver);
assert.strictEqual(receiver.bar, 1, 'receiver.bar === 1');
assert.strictEqual(getOwnPropertyDescriptor(receiver, 'bar').enumerable, false, 'enumerability not overridden');
let out = null;
target = create(defineProperty({ z: 3 }, 'w', {
set() {
out = this;
},
}), {
x: {
value: 1,
writable: true,
configurable: true,
},
y: {
set() {
out = this;
},
},
c: {
value: 1,