MIRROR: javascript for 馃悳's, a tiny runtime with big ambitions
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at master 127 lines 4.3 kB view raw
1import { test, testDeep, testThrows, summary } from './helpers.js'; 2 3console.log('Object Tests\n'); 4 5let obj = { a: 1, b: 2, c: 3 }; 6test('object property access', obj.a, 1); 7test('object bracket access', obj['b'], 2); 8test('object property count', Object.keys(obj).length, 3); 9 10obj.d = 4; 11test('add property', obj.d, 4); 12 13obj.a = 10; 14test('modify property', obj.a, 10); 15 16delete obj.d; 17test('delete property', obj.d, undefined); 18 19test('in operator true', 'a' in obj, true); 20test('in operator false', 'z' in obj, false); 21 22testDeep('Object.keys', Object.keys({ x: 1, y: 2 }), ['x', 'y']); 23testDeep('Object.values', Object.values({ x: 1, y: 2 }), [1, 2]); 24testDeep('Object.entries', Object.entries({ x: 1 }), [['x', 1]]); 25 26let merged = Object.assign({}, { a: 1 }, { b: 2 }); 27test('Object.assign a', merged.a, 1); 28test('Object.assign b', merged.b, 2); 29 30let nested = { a: { b: { c: 1 } } }; 31test('nested access', nested.a.b.c, 1); 32 33let computed = { ['key' + 1]: 'value' }; 34test('computed property', computed.key1, 'value'); 35 36let short = 'hello'; 37let shorthand = { short }; 38test('shorthand property', shorthand.short, 'hello'); 39 40let methodObj = { 41 value: 42, 42 getValue() { 43 return this.value; 44 } 45}; 46test('method shorthand', methodObj.getValue(), 42); 47 48let source = { a: 1, b: 2 }; 49let spread = { ...source, c: 3 }; 50test('spread a', spread.a, 1); 51test('spread c', spread.c, 3); 52 53let { a, b } = { a: 1, b: 2, c: 3 }; 54test('destructuring a', a, 1); 55test('destructuring b', b, 2); 56 57let { x: renamed } = { x: 5 }; 58test('destructuring rename', renamed, 5); 59 60let { y = 10 } = {}; 61test('destructuring default', y, 10); 62 63test('hasOwnProperty true', { a: 1 }.hasOwnProperty('a'), true); 64test('hasOwnProperty false', { a: 1 }.hasOwnProperty('b'), false); 65 66let frozen = Object.freeze({ a: 1 }); 67test('Object.isFrozen', Object.isFrozen(frozen), true); 68 69let sealed = Object.seal({ a: 1 }); 70test('Object.isSealed', Object.isSealed(sealed), true); 71 72let proto = { inherited: true }; 73let child = Object.create(proto); 74test('Object.create inherits', child.inherited, true); 75 76test('Object.getPrototypeOf', Object.getPrototypeOf([]) === Array.prototype, true); 77 78testDeep( 79 'Object.fromEntries', 80 Object.fromEntries([ 81 ['a', 1], 82 ['b', 2] 83 ]), 84 { a: 1, b: 2 } 85); 86 87let descriptorSource = {}; 88const descriptorSymbol = Symbol('descriptor'); 89Object.defineProperty(descriptorSource, 'hidden', { 90 value: 42, 91 enumerable: false, 92 writable: false, 93 configurable: false 94}); 95Object.defineProperty(descriptorSource, 'computed', { 96 get() { 97 return 7; 98 }, 99 enumerable: true, 100 configurable: true 101}); 102descriptorSource.visible = 'yes'; 103descriptorSource[descriptorSymbol] = 'symbol value'; 104 105const descriptors = Object.getOwnPropertyDescriptors(descriptorSource); 106test('Object.getOwnPropertyDescriptors exists', typeof Object.getOwnPropertyDescriptors, 'function'); 107test('descriptors data value', descriptors.visible.value, 'yes'); 108test('descriptors hidden value', descriptors.hidden.value, 42); 109test('descriptors hidden enumerable', descriptors.hidden.enumerable, false); 110test('descriptors hidden writable', descriptors.hidden.writable, false); 111test('descriptors hidden configurable', descriptors.hidden.configurable, false); 112test('descriptors accessor getter', typeof descriptors.computed.get, 'function'); 113test('descriptors accessor enumerable', descriptors.computed.enumerable, true); 114test('descriptors symbol value', descriptors[descriptorSymbol].value, 'symbol value'); 115 116const arrayDescriptors = Object.getOwnPropertyDescriptors(['item']); 117test('array descriptor index value', arrayDescriptors[0].value, 'item'); 118test('array descriptor length value', arrayDescriptors.length.value, 1); 119const proxyUndefinedDescriptor = new Proxy({ a: 1 }, { 120 getOwnPropertyDescriptor() {} 121}); 122test('Object.getOwnPropertyDescriptors skips undefined proxy descriptors', Object.getOwnPropertyDescriptors(proxyUndefinedDescriptor).hasOwnProperty('a'), false); 123testThrows('Object.getOwnPropertyDescriptors throws without argument', () => Object.getOwnPropertyDescriptors()); 124testThrows('Object.getOwnPropertyDescriptors throws on null', () => Object.getOwnPropertyDescriptors(null)); 125test('Object.getOwnPropertyDescriptors boxes number primitive', typeof Object.getOwnPropertyDescriptors(1), 'object'); 126 127summary();