target-is-non-extensible-existing-accessor-property.js (1297B)
1 // Copyright (C) 2021 Alexey Shvayka. All rights reserved. 2 // This code is governed by the license found in the LICENSE file. 3 4 /*--- 5 esid: sec-object.assign 6 description: > 7 [[Set]] to existing accessor property of non-extensible `target` is successful. 8 info: | 9 OrdinaryPreventExtensions ( O ) 10 11 1. Set O.[[Extensible]] to false. 12 13 Object.assign ( target, ...sources ) 14 15 [...] 16 3. For each element nextSource of sources, do 17 a. If nextSource is neither undefined nor null, then 18 [...] 19 iii. For each element nextKey of keys, do 20 1. Let desc be ? from.[[GetOwnProperty]](nextKey). 21 2. If desc is not undefined and desc.[[Enumerable]] is true, then 22 [...] 23 b. Perform ? Set(to, nextKey, propValue, true). 24 25 OrdinarySetWithOwnDescriptor ( O, P, V, Receiver, ownDesc ) 26 27 [...] 28 7. Perform ? Call(setter, Receiver, « V »). 29 8. Return true. 30 features: [Symbol] 31 ---*/ 32 33 var value1 = 1; 34 var target1 = Object.preventExtensions({ 35 set foo(val) { value1 = val; }, 36 }); 37 38 Object.assign(target1, { foo: 2 }); 39 assert.sameValue(value1, 2); 40 41 42 var sym = Symbol(); 43 var value2 = 1; 44 var target2 = { 45 set [sym](val) { value2 = val; }, 46 }; 47 48 Object.preventExtensions(target2); 49 Object.assign(target2, { [sym]: 2 }); 50 assert.sameValue(value2, 2); 51 52 reportCompare(0, 0);