proxy-with-defineProperty-handler.js (1463B)
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.seal 5 description: > 6 [[DefineOwnProperty]] is called with partial descriptor with only [[Configurable]] field present. 7 info: | 8 SetIntegrityLevel ( O, level ) 9 10 [...] 11 5. Let keys be ? O.[[OwnPropertyKeys]](). 12 6. If level is sealed, then 13 a. For each element k of keys, do 14 i. Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }). 15 features: [Symbol, Proxy, Reflect] 16 ---*/ 17 18 var sym = Symbol(); 19 var seenDescriptors = {}; 20 var proxy = new Proxy({ 21 [sym]: 1, 22 get foo() {}, 23 set foo(_v) {}, 24 }, { 25 defineProperty: function(target, key, descriptor) { 26 seenDescriptors[key] = descriptor; 27 return Reflect.defineProperty(target, key, descriptor); 28 }, 29 }); 30 31 Object.seal(proxy); 32 33 assert.sameValue(seenDescriptors[sym].value, undefined, "value"); 34 assert.sameValue(seenDescriptors[sym].writable, undefined, "writable"); 35 assert.sameValue(seenDescriptors[sym].enumerable, undefined, "enumerable"); 36 assert.sameValue(seenDescriptors[sym].configurable, false, "configurable"); 37 38 assert.sameValue(seenDescriptors.foo.get, undefined, "get"); 39 assert.sameValue(seenDescriptors.foo.set, undefined, "set"); 40 assert.sameValue(seenDescriptors.foo.enumerable, undefined, "enumerable"); 41 assert.sameValue(seenDescriptors.foo.configurable, false, "configurable"); 42 43 reportCompare(0, 0);