proxy-with-defineProperty-handler.js (1848B)
1 // Copyright (C) 2021 Alexey Shvayka. All rights reserved. 2 // This code is governed by the BSD license found in the LICENSE file. 3 /*--- 4 esid: sec-object.freeze 5 description: > 6 [[DefineOwnProperty]] is called with partial descriptor with only [[Configurable]] and 7 [[Writable]] (for data properties only) fields present. 8 info: | 9 SetIntegrityLevel ( O, level ) 10 11 [...] 12 5. Let keys be ? O.[[OwnPropertyKeys]](). 13 [...] 14 7. Else, 15 a. Assert: level is frozen. 16 b. For each element k of keys, do 17 i. Let currentDesc be ? O.[[GetOwnProperty]](k). 18 ii. If currentDesc is not undefined, then 19 1. If IsAccessorDescriptor(currentDesc) is true, then 20 a. Let desc be the PropertyDescriptor { [[Configurable]]: false }. 21 2. Else, 22 a. Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }. 23 3. Perform ? DefinePropertyOrThrow(O, k, desc). 24 features: [Symbol, Proxy, Reflect] 25 ---*/ 26 27 var sym = Symbol(); 28 var seenDescriptors = {}; 29 var proxy = new Proxy({ 30 [sym]: 1, 31 get foo() {}, 32 set foo(_v) {}, 33 }, { 34 defineProperty: function(target, key, descriptor) { 35 seenDescriptors[key] = descriptor; 36 return Reflect.defineProperty(target, key, descriptor); 37 }, 38 }); 39 40 Object.freeze(proxy); 41 42 assert.sameValue(seenDescriptors[sym].value, undefined, "value"); 43 assert.sameValue(seenDescriptors[sym].writable, false, "writable"); 44 assert.sameValue(seenDescriptors[sym].enumerable, undefined, "enumerable"); 45 assert.sameValue(seenDescriptors[sym].configurable, false, "configurable"); 46 47 assert.sameValue(seenDescriptors.foo.get, undefined, "get"); 48 assert.sameValue(seenDescriptors.foo.set, undefined, "set"); 49 assert.sameValue(seenDescriptors.foo.enumerable, undefined, "enumerable"); 50 assert.sameValue(seenDescriptors.foo.configurable, false, "configurable"); 51 52 reportCompare(0, 0);