set-value-on-accessor-descriptor-with-receiver.js (1431B)
1 // Copyright (C) 2015 the V8 project authors. All rights reserved. 2 // This code is governed by the BSD license found in the LICENSE file. 3 /*--- 4 es6id: 26.1.13 5 description: > 6 Set value on an accessor descriptor property with receiver as `this`. 7 info: | 8 26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] ) 9 10 ... 11 4. If receiver is not present, then 12 a. Let receiver be target. 13 5. Return target.[[Set]](key, V, receiver). 14 15 9.1.9 [[Set]] ( P, V, Receiver) 16 17 ... 18 6. Assert: IsAccessorDescriptor(ownDesc) is true. 19 7. Let setter be ownDesc.[[Set]]. 20 8. If setter is undefined, return false. 21 9. Let setterResult be Call(setter, Receiver, «V»). 22 10. ReturnIfAbrupt(setterResult). 23 11. Return true. 24 features: [Reflect, Reflect.set] 25 ---*/ 26 27 var args; 28 var count = 0 29 var o1 = {}; 30 var receiver = {}; 31 var _receiver; 32 Object.defineProperty(o1, 'p', { 33 set: function(a) { 34 count++; 35 args = arguments; 36 _receiver = this; 37 return false; 38 } 39 }); 40 41 var result = Reflect.set(o1, 'p', 42, receiver); 42 assert.sameValue( 43 result, true, 44 'returns true if target.p has an accessor descriptor' 45 ); 46 assert.sameValue(args.length, 1, 'target.p set is called with 1 argument'); 47 assert.sameValue(args[0], 42, 'target.p set is called with V'); 48 assert.sameValue(count, 1, 'target.p set is called once'); 49 assert.sameValue( 50 _receiver, receiver, 51 'target.p set is called with receiver as `this`' 52 ); 53 54 reportCompare(0, 0);