target-is-sealed-existing-accessor-property.js (1343B)
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 sealed `target` is successful. 8 info: | 9 SetIntegrityLevel ( O, level ) 10 11 [...] 12 3. Let status be ? O.[[PreventExtensions]](). 13 [...] 14 15 OrdinaryPreventExtensions ( O ) 16 17 1. Set O.[[Extensible]] to false. 18 19 Object.assign ( target, ...sources ) 20 21 [...] 22 3. For each element nextSource of sources, do 23 a. If nextSource is neither undefined nor null, then 24 [...] 25 iii. For each element nextKey of keys, do 26 1. Let desc be ? from.[[GetOwnProperty]](nextKey). 27 2. If desc is not undefined and desc.[[Enumerable]] is true, then 28 [...] 29 b. Perform ? Set(to, nextKey, propValue, true). 30 31 OrdinarySetWithOwnDescriptor ( O, P, V, Receiver, ownDesc ) 32 33 [...] 34 7. Perform ? Call(setter, Receiver, « V »). 35 8. Return true. 36 ---*/ 37 38 var value1 = 1; 39 var target1 = Object.seal({ 40 set foo(val) { value1 = val; }, 41 }); 42 43 Object.assign(target1, { foo: 2 }); 44 assert.sameValue(value1, 2); 45 46 47 var sym = Symbol(); 48 var value2 = 1; 49 var target2 = { 50 set [sym](val) { value2 = val; }, 51 }; 52 53 Object.seal(target2); 54 Object.assign(target2, { [sym]: 2 }); 55 assert.sameValue(value2, 2); 56 57 reportCompare(0, 0);