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('Reflect.set', assert => {
assert.isFunction(set);
if ('name' in set) {
assert.name(set, 'set');
}
const object = {};
assert.ok(set(object, 'quux', 654), true);
assert.strictEqual(object.quux, 654);
let target = {};
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,
QUnit.test('Object.defineProperty', assert => {
assert.isFunction(defineProperty);
assert.arity(defineProperty, 3);
const source = {};
const result = defineProperty(source, 'q', {
value: 42,
});
assert.same(result, source);
assert.same(result.q, 42);
assert.throws(() => defineProperty(42, 1, {}));
assert.throws(() => defineProperty({}, create(null), {}));
assert.throws(() => defineProperty({}, 1, 1));
});
QUnit.test('Symbols & Object.create', assert => {
const c = Symbol('c');
const d = Symbol('d');
const descriptors = {
a: {
value: 'a',
},
};
descriptors[c] = {
value: 'c',
};
defineProperty(descriptors, 'b', {
value: {
value: 'b',
},
});
defineProperty(descriptors, d, {
value: {
value: 'd',
},
});
const object = create(null, descriptors);
assert.strictEqual(object.a, 'a', 'a');
assert.strictEqual(object.b, undefined, 'b');
assert.strictEqual(object[c], 'c', 'c');
assert.strictEqual(object[d], undefined, 'd');
});
QUnit.test('Reflect.deleteProperty', assert => {
assert.isFunction(deleteProperty);
assert.arity(deleteProperty, 2);
if ('name' in deleteProperty) {
assert.name(deleteProperty, 'deleteProperty');
}
const object = { bar: 456 };
assert.strictEqual(deleteProperty(object, 'bar'), true);
assert.ok(keys(object).length === 0);
if (DESCRIPTORS) {
assert.strictEqual(deleteProperty(defineProperty({}, 'foo', {
value: 42,
}), 'foo'), false);
}
assert.throws(() => deleteProperty(42, 'foo'), TypeError, 'throws on primitive');
});
QUnit.test('Symbols & descriptors', assert => {
const d = Symbol('d');
const e = Symbol('e');
const f = Symbol('f');
const i = Symbol('i');
const j = Symbol('j');
const prototype = { g: 'g' };
prototype[i] = 'i';
defineProperty(prototype, 'h', {
value: 'h',
});
defineProperty(prototype, 'j', {
value: 'j',
});
const object = create(prototype);
object.a = 'a';
object[d] = 'd';
defineProperty(object, 'b', {
value: 'b',
});
defineProperty(object, 'c', {
value: 'c',
enumerable: true,
});
defineProperty(object, e, {
configurable: true,
writable: true,
value: 'e',
const c = Symbol('c');
const d = Symbol('d');
const descriptors = {
a: {
value: 'a',
},
};
descriptors[c] = {
value: 'c',
};
defineProperty(descriptors, 'b', {
value: {
value: 'b',
},
});
defineProperty(descriptors, d, {
value: {
value: 'd',
},
});
const object = defineProperties({}, descriptors);
assert.strictEqual(object.a, 'a', 'a');
assert.strictEqual(object.b, undefined, 'b');
assert.strictEqual(object[c], 'c', 'c');
assert.strictEqual(object[d], undefined, 'd');
});
assert.throws(() => defineProperty({}, create(null), {}));
assert.throws(() => defineProperty({}, 1, 1));
assert.isFunction(assign);
let object = { q: 1 };
assert.strictEqual(object, assign(object, { bar: 2 }), 'assign return target');
assert.strictEqual(object.bar, 2, 'assign define properties');
assert.deepEqual(assign({}, { q: 1 }, { w: 2 }), { q: 1, w: 2 });
assert.deepEqual(assign({}, 'qwe'), { 0: 'q', 1: 'w', 2: 'e' });
assert.throws(() => assign(null, { q: 1 }), TypeError);
assert.throws(() => assign(undefined, { q: 1 }), TypeError);
let string = assign('qwe', { q: 1 });
assert.strictEqual(typeof string, 'object');
assert.strictEqual(String(string), 'qwe');
assert.strictEqual(string.q, 1);
assert.same(assign({}, { valueOf: 42 }).valueOf, 42, 'IE enum keys bug');
if (DESCRIPTORS) {
object = { baz: 1 };
assign(object, defineProperty({}, 'bar', {
get() {
return this.baz + 1;
},
}));
assert.ok(object.bar === undefined, "assign don't copy descriptors");
object = { a: 'a' };
const c = Symbol('c');
const d = Symbol('d');
object[c] = 'c';
defineProperty(object, 'b', { value: 'b' });
defineProperty(object, d, { value: 'd' });
const object2 = assign({}, object);
assert.strictEqual(object2.a, 'a', 'a');
assert.strictEqual(object2.b, undefined, 'b');
assert.strictEqual(object2[c], 'c', 'c');
assert.strictEqual(object2[d], undefined, 'd');
value: 'h',
});
defineProperty(prototype, 'j', {
value: 'j',
});
const object = create(prototype);
object.a = 'a';
object[d] = 'd';
defineProperty(object, 'b', {
value: 'b',
});
defineProperty(object, 'c', {
value: 'c',
enumerable: true,
});
defineProperty(object, e, {
configurable: true,
writable: true,
value: 'e',
});
const descriptor = {
value: 'f',
enumerable: true,
};
defineProperty(object, f, descriptor);
assert.strictEqual(descriptor.enumerable, true, 'defineProperty not changes descriptor object');
assert.deepEqual(getOwnPropertyDescriptor(object, 'a'), {
configurable: true,
writable: true,
enumerable: true,
value: 'a',
}, 'getOwnPropertyDescriptor a');
assert.throws(() => defineProperty({}, 1, 1));
});