* Run exec tests in fresh contexts * Reevaluate modules in every context * Cache module code when running tests * Eliminate weakmap accesses as much as possible * Remove old multiline usage * Using bundled polyfill to significantly increase performance The individual requires for each file were the part that was sooooo slow. * Drop LRU cache size * Fixes * Fix test Co-authored-by: Huáng Jùnliàng <jlhwung@gmail.com>
44 lines
1.3 KiB
JavaScript
44 lines
1.3 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(Object.prototype, 'NOSET', {
|
|
get(value) {
|
|
// noop
|
|
},
|
|
});
|
|
|
|
Object.defineProperty(Object.prototype, 'NOWRITE', {
|
|
writable: false,
|
|
value: 'abc',
|
|
});
|
|
|
|
const obj = { 'NOSET': 123 };
|
|
// this won't work as expected if transformed as Object.assign (or equivalent)
|
|
// because those trigger object setters (spread don't)
|
|
expect(() => {
|
|
const objSpread = { ...obj };
|
|
}).toThrow();
|
|
|
|
const obj2 = { 'NOWRITE': 456 };
|
|
// this throws `TypeError: Cannot assign to read only property 'NOWRITE'`
|
|
// if transformed as Object.assign (or equivalent) because those use *assignment* for creating properties
|
|
// (spread defines them)
|
|
expect(() => {
|
|
const obj2Spread = { ...obj2 };
|
|
}).toThrow();
|
|
|
|
const KEY = Symbol('key');
|
|
const obj3Spread = { ...{ get foo () { return 'bar' } }, [KEY]: 'symbol' };
|
|
expect(Object.getOwnPropertyDescriptor(obj3Spread, 'foo').value).toBe('bar');
|
|
expect(Object.getOwnPropertyDescriptor(obj3Spread, KEY).value).toBe('symbol');
|
|
|
|
const obj4Spread = { ...Object.prototype };
|
|
expect(Object.getOwnPropertyDescriptor(obj4Spread, 'hasOwnProperty')).toBeUndefined();
|
|
|
|
expect(() => ({ ...null, ...undefined })).not.toThrow();
|
|
|
|
const o = Object.create(null);
|
|
o.a = 'foo';
|
|
o.__proto__ = [];
|
|
const o2 = { ...o };
|
|
// Loose will do o2.__proto__ = []
|
|
expect(Array.isArray(Object.getPrototypeOf(o2))).toBe(true);
|