mirror of https://github.com/tc39/test262.git
52 lines
1.3 KiB
JavaScript
52 lines
1.3 KiB
JavaScript
|
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||
|
/*---
|
||
|
es6id: 26.1.13
|
||
|
description: >
|
||
|
Set value on an accessor descriptor property with receiver as `this`.
|
||
|
info: >
|
||
|
26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] )
|
||
|
|
||
|
...
|
||
|
4. If receiver is not present, then
|
||
|
a. Let receiver be target.
|
||
|
5. Return target.[[Set]](key, V, receiver).
|
||
|
|
||
|
9.1.9 [[Set]] ( P, V, Receiver)
|
||
|
|
||
|
...
|
||
|
6. Assert: IsAccessorDescriptor(ownDesc) is true.
|
||
|
7. Let setter be ownDesc.[[Set]].
|
||
|
8. If setter is undefined, return false.
|
||
|
9. Let setterResult be Call(setter, Receiver, «V»).
|
||
|
10. ReturnIfAbrupt(setterResult).
|
||
|
11. Return true.
|
||
|
---*/
|
||
|
|
||
|
var args;
|
||
|
var count = 0
|
||
|
var o1 = {};
|
||
|
var receiver = {};
|
||
|
var _receiver;
|
||
|
Object.defineProperty(o1, 'p', {
|
||
|
set: function(a) {
|
||
|
count++;
|
||
|
args = arguments;
|
||
|
_receiver = this;
|
||
|
return false;
|
||
|
}
|
||
|
});
|
||
|
|
||
|
var result = Reflect.set(o1, 'p', 42, receiver);
|
||
|
assert.sameValue(
|
||
|
result, true,
|
||
|
'returns true if target.p has an accessor descriptor'
|
||
|
);
|
||
|
assert.sameValue(args.length, 1, 'target.p set is called with 1 argument');
|
||
|
assert.sameValue(args[0], 42, 'target.p set is called with V');
|
||
|
assert.sameValue(count, 1, 'target.p set is called once');
|
||
|
assert.sameValue(
|
||
|
_receiver, receiver,
|
||
|
'target.p set is called with receiver as `this`'
|
||
|
);
|