mirror of https://github.com/tc39/test262.git
Add tests for Reflect.set
This commit is contained in:
parent
e7f5f3cf58
commit
d3743c3ba7
|
@ -0,0 +1,45 @@
|
||||||
|
// 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: >
|
||||||
|
Call accessor's set from target's prototype.
|
||||||
|
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)
|
||||||
|
|
||||||
|
...
|
||||||
|
4. If ownDesc is undefined, then
|
||||||
|
a. Let parent be O.[[GetPrototypeOf]]().
|
||||||
|
b. ReturnIfAbrupt(parent).
|
||||||
|
c. If parent is not null, then
|
||||||
|
i. Return parent.[[Set]](P, V, Receiver).
|
||||||
|
...
|
||||||
|
11. Return true.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var args;
|
||||||
|
var count = 0;
|
||||||
|
var _this;
|
||||||
|
var proto = {};
|
||||||
|
Object.defineProperty(proto, 'p', {
|
||||||
|
set: function() {
|
||||||
|
_this = this;
|
||||||
|
args = arguments;
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var target = Object.create(proto);
|
||||||
|
var result = Reflect.set(target, 'p', 42);
|
||||||
|
assert.sameValue(result, true, 'returns true');
|
||||||
|
assert.sameValue(args.length, 1, 'prototype `set` called with 1 argument');
|
||||||
|
assert.sameValue(args[0], 42, 'prototype `set` called with 42');
|
||||||
|
assert.sameValue(_this, target, 'prototype `set` called with target as `this`');
|
||||||
|
assert.sameValue(count, 1, 'prototype `set` called once');
|
|
@ -0,0 +1,78 @@
|
||||||
|
// 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: >
|
||||||
|
Creates a property data descriptor.
|
||||||
|
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)
|
||||||
|
|
||||||
|
...
|
||||||
|
4. If ownDesc is undefined, then
|
||||||
|
a. Let parent be O.[[GetPrototypeOf]]().
|
||||||
|
b. ReturnIfAbrupt(parent).
|
||||||
|
c. If parent is not null, then
|
||||||
|
i. Return parent.[[Set]](P, V, Receiver).
|
||||||
|
d. Else,
|
||||||
|
ii. Let ownDesc be the PropertyDescriptor{[[Value]]: undefined,
|
||||||
|
[[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: true}.
|
||||||
|
5. If IsDataDescriptor(ownDesc) is true, then
|
||||||
|
a. If ownDesc.[[Writable]] is false, return false.
|
||||||
|
b. If Type(Receiver) is not Object, return false.
|
||||||
|
c. Let existingDescriptor be Receiver.[[GetOwnProperty]](P).
|
||||||
|
d. ReturnIfAbrupt(existingDescriptor).
|
||||||
|
e. If existingDescriptor is not undefined, then
|
||||||
|
i. If IsAccessorDescriptor(existingDescriptor) is true, return false.
|
||||||
|
ii. If existingDescriptor.[[Writable]] is false, return false.
|
||||||
|
iii. Let valueDesc be the PropertyDescriptor{[[Value]]: V}.
|
||||||
|
iv. Return Receiver.[[DefineOwnProperty]](P, valueDesc).
|
||||||
|
f. Else Receiver does not currently have a property P,
|
||||||
|
i. Return CreateDataProperty(Receiver, P, V).
|
||||||
|
6. Assert: IsAccessorDescriptor(ownDesc) is true.
|
||||||
|
7. Let setter be ownDesc.[[Set]].
|
||||||
|
8. If setter is undefined, return false.
|
||||||
|
...
|
||||||
|
11. Return true.
|
||||||
|
includes: [propertyHelper.js]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var o1 = {};
|
||||||
|
var result = Reflect.set(o1, 'p', 42);
|
||||||
|
assert.sameValue(result, true, 'returns true on a successful setting');
|
||||||
|
var desc = Object.getOwnPropertyDescriptor(o1, 'p');
|
||||||
|
assert.sameValue(
|
||||||
|
desc.value, 42,
|
||||||
|
'sets a data descriptor to set a new property'
|
||||||
|
);
|
||||||
|
verifyWritable(o1, 'p');
|
||||||
|
verifyEnumerable(o1, 'p');
|
||||||
|
verifyConfigurable(o1, 'p');
|
||||||
|
|
||||||
|
var o2 = {};
|
||||||
|
var receiver = {};
|
||||||
|
result = Reflect.set(o2, 'p', 43, receiver);
|
||||||
|
assert.sameValue(
|
||||||
|
result, true,
|
||||||
|
'returns true on a successful setting with a receiver'
|
||||||
|
);
|
||||||
|
desc = Object.getOwnPropertyDescriptor(o2, 'p');
|
||||||
|
assert.sameValue(
|
||||||
|
desc, undefined,
|
||||||
|
'does not set a data descriptor on target if receiver is given'
|
||||||
|
);
|
||||||
|
desc = Object.getOwnPropertyDescriptor(receiver, 'p');
|
||||||
|
assert.sameValue(
|
||||||
|
desc.value, 43,
|
||||||
|
'sets a data descriptor on the receiver object to set a new property'
|
||||||
|
);
|
||||||
|
verifyWritable(receiver, 'p');
|
||||||
|
verifyEnumerable(receiver, 'p');
|
||||||
|
verifyConfigurable(receiver, 'p');
|
||||||
|
|
|
@ -0,0 +1,65 @@
|
||||||
|
// 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: >
|
||||||
|
Return false if target property turns to a data descriptor and receiver
|
||||||
|
property is an accessor descriptor.
|
||||||
|
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)
|
||||||
|
|
||||||
|
...
|
||||||
|
4. If ownDesc is undefined, then
|
||||||
|
a. Let parent be O.[[GetPrototypeOf]]().
|
||||||
|
b. ReturnIfAbrupt(parent).
|
||||||
|
c. If parent is not null, then
|
||||||
|
i. Return parent.[[Set]](P, V, Receiver).
|
||||||
|
d. Else,
|
||||||
|
ii. Let ownDesc be the PropertyDescriptor{[[Value]]: undefined,
|
||||||
|
[[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: true}.
|
||||||
|
5. If IsDataDescriptor(ownDesc) is true, then
|
||||||
|
a. If ownDesc.[[Writable]] is false, return false.
|
||||||
|
b. If Type(Receiver) is not Object, return false.
|
||||||
|
c. Let existingDescriptor be Receiver.[[GetOwnProperty]](P).
|
||||||
|
d. ReturnIfAbrupt(existingDescriptor).
|
||||||
|
e. If existingDescriptor is not undefined, then
|
||||||
|
i. If IsAccessorDescriptor(existingDescriptor) is true, return false.
|
||||||
|
...
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var receiver = {};
|
||||||
|
var fn = function() {};
|
||||||
|
Object.defineProperty(receiver, 'p', {
|
||||||
|
set: fn
|
||||||
|
});
|
||||||
|
|
||||||
|
var o1 = {};
|
||||||
|
var result = Reflect.set(o1, 'p', 42, receiver);
|
||||||
|
assert.sameValue(
|
||||||
|
result, false,
|
||||||
|
'target has no own `p` and receiver.p has an accessor descriptor'
|
||||||
|
);
|
||||||
|
assert.sameValue(
|
||||||
|
Object.getOwnPropertyDescriptor(receiver, 'p').set, fn,
|
||||||
|
'receiver.p is not changed'
|
||||||
|
);
|
||||||
|
assert.sameValue(o1.hasOwnProperty('p'), false, 'target.p is not set');
|
||||||
|
|
||||||
|
var o2 = {p: 43};
|
||||||
|
result = Reflect.set(o2, 'p', 42, receiver);
|
||||||
|
assert.sameValue(
|
||||||
|
result, false,
|
||||||
|
'target.p has a data descriptor and receiver.p has an accessor descriptor'
|
||||||
|
);
|
||||||
|
assert.sameValue(
|
||||||
|
Object.getOwnPropertyDescriptor(receiver, 'p').set, fn,
|
||||||
|
'receiver.p is not changed'
|
||||||
|
);
|
||||||
|
assert.sameValue(o2.p, 43, 'target.p is not changed');
|
|
@ -0,0 +1,21 @@
|
||||||
|
// 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: >
|
||||||
|
Reflect.set.length value and property descriptor
|
||||||
|
info: >
|
||||||
|
26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] )
|
||||||
|
|
||||||
|
The length property of the set function is 3.
|
||||||
|
includes: [propertyHelper.js]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
assert.sameValue(
|
||||||
|
Reflect.set.length, 3,
|
||||||
|
'The value of `Reflect.set.length` is `3`'
|
||||||
|
);
|
||||||
|
|
||||||
|
verifyNotEnumerable(Reflect.set, 'length');
|
||||||
|
verifyNotWritable(Reflect.set, 'length');
|
||||||
|
verifyConfigurable(Reflect.set, 'length');
|
|
@ -0,0 +1,22 @@
|
||||||
|
// 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: >
|
||||||
|
Reflect.set.name value and property descriptor
|
||||||
|
info: >
|
||||||
|
26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] )
|
||||||
|
|
||||||
|
17 ECMAScript Standard Built-in Objects
|
||||||
|
|
||||||
|
includes: [propertyHelper.js]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
assert.sameValue(
|
||||||
|
Reflect.set.name, 'set',
|
||||||
|
'The value of `Reflect.set.name` is `"set"`'
|
||||||
|
);
|
||||||
|
|
||||||
|
verifyNotEnumerable(Reflect.set, 'name');
|
||||||
|
verifyNotWritable(Reflect.set, 'name');
|
||||||
|
verifyConfigurable(Reflect.set, 'name');
|
|
@ -0,0 +1,41 @@
|
||||||
|
// 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: >
|
||||||
|
Return false if receiver is not an object.
|
||||||
|
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)
|
||||||
|
|
||||||
|
...
|
||||||
|
4. If ownDesc is undefined, then
|
||||||
|
a. Let parent be O.[[GetPrototypeOf]]().
|
||||||
|
b. ReturnIfAbrupt(parent).
|
||||||
|
c. If parent is not null, then
|
||||||
|
i. Return parent.[[Set]](P, V, Receiver).
|
||||||
|
d. Else,
|
||||||
|
ii. Let ownDesc be the PropertyDescriptor{[[Value]]: undefined,
|
||||||
|
[[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: true}.
|
||||||
|
5. If IsDataDescriptor(ownDesc) is true, then
|
||||||
|
a. If ownDesc.[[Writable]] is false, return false.
|
||||||
|
b. If Type(Receiver) is not Object, return false.
|
||||||
|
...
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var o1 = {p: 42};
|
||||||
|
var receiver = 'receiver is a string';
|
||||||
|
var result = Reflect.set(o1, 'p', 43, receiver);
|
||||||
|
|
||||||
|
assert.sameValue(result, false, 'returns false');
|
||||||
|
assert.sameValue(o1.p, 42, 'does not set a value');
|
||||||
|
assert.sameValue(
|
||||||
|
receiver.hasOwnProperty('p'), false,
|
||||||
|
'does not set a new property on receiver if it is not an object'
|
||||||
|
);
|
|
@ -0,0 +1,24 @@
|
||||||
|
// 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: >
|
||||||
|
Return abrupt from ToPropertyKey(propertyKey)
|
||||||
|
info: >
|
||||||
|
26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] )
|
||||||
|
|
||||||
|
...
|
||||||
|
2. Let key be ToPropertyKey(propertyKey).
|
||||||
|
3. ReturnIfAbrupt(key).
|
||||||
|
...
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var p = {
|
||||||
|
toString: function() {
|
||||||
|
throw new Test262Error();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
assert.throws(Test262Error, function() {
|
||||||
|
Reflect.set({}, p);
|
||||||
|
});
|
|
@ -0,0 +1,29 @@
|
||||||
|
// 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: >
|
||||||
|
Return abrupt result from get a property value.
|
||||||
|
info: >
|
||||||
|
26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] )
|
||||||
|
|
||||||
|
...
|
||||||
|
5. Return target.[[Set]](key, V, receiver).
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var o1 = {};
|
||||||
|
Object.defineProperty(o1, 'p1', {
|
||||||
|
set: function() {
|
||||||
|
throw new Test262Error();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.throws(Test262Error, function() {
|
||||||
|
Reflect.set(o1, 'p1', 42);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Abrupt from the prototype property
|
||||||
|
var o2 = Object.create(o1);
|
||||||
|
assert.throws(Test262Error, function() {
|
||||||
|
Reflect.set(o2, 'p1', 42);
|
||||||
|
});
|
|
@ -0,0 +1,31 @@
|
||||||
|
// 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: >
|
||||||
|
Return false if receiver is not writable.
|
||||||
|
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)
|
||||||
|
|
||||||
|
...
|
||||||
|
5. If IsDataDescriptor(ownDesc) is true, then
|
||||||
|
a. If ownDesc.[[Writable]] is false, return false.
|
||||||
|
...
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var o1 = {};
|
||||||
|
|
||||||
|
Object.defineProperty(o1, 'p', {
|
||||||
|
writable: false,
|
||||||
|
value: 42
|
||||||
|
});
|
||||||
|
var result = Reflect.set(o1, 'p', 43);
|
||||||
|
assert.sameValue(result, false, 'returns false');
|
||||||
|
assert.sameValue(o1.p, 42, 'does not set a new value');
|
|
@ -0,0 +1,41 @@
|
||||||
|
// 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: >
|
||||||
|
Return false if target is not writable.
|
||||||
|
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)
|
||||||
|
|
||||||
|
...
|
||||||
|
5. If IsDataDescriptor(ownDesc) is true, then
|
||||||
|
a. If ownDesc.[[Writable]] is false, return false.
|
||||||
|
b. If Type(Receiver) is not Object, return false.
|
||||||
|
c. Let existingDescriptor be Receiver.[[GetOwnProperty]](P).
|
||||||
|
d. ReturnIfAbrupt(existingDescriptor).
|
||||||
|
e. If existingDescriptor is not undefined, then
|
||||||
|
i. If IsAccessorDescriptor(existingDescriptor) is true, return false.
|
||||||
|
ii. If existingDescriptor.[[Writable]] is false, return false.
|
||||||
|
...
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var o1 = {};
|
||||||
|
var receiver = {};
|
||||||
|
Object.defineProperty(receiver, 'p', {
|
||||||
|
writable: false,
|
||||||
|
value: 42
|
||||||
|
});
|
||||||
|
var result = Reflect.set(o1, 'p', 43, receiver);
|
||||||
|
assert.sameValue(result, false, 'returns false');
|
||||||
|
assert.sameValue(receiver.p, 42, 'does not set a new value on receiver');
|
||||||
|
assert.sameValue(
|
||||||
|
o1.hasOwnProperty('p'), false,
|
||||||
|
'does not set a new value on target'
|
||||||
|
);
|
|
@ -0,0 +1,51 @@
|
||||||
|
// 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`'
|
||||||
|
);
|
|
@ -0,0 +1,45 @@
|
||||||
|
// 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.
|
||||||
|
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 = {};
|
||||||
|
Object.defineProperty(o1, 'p', {
|
||||||
|
set: function(a) {
|
||||||
|
count++;
|
||||||
|
args = arguments;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var result = Reflect.set(o1, 'p', 42);
|
||||||
|
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');
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
// 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: >
|
||||||
|
Sets the new value.
|
||||||
|
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)
|
||||||
|
|
||||||
|
...
|
||||||
|
5. If IsDataDescriptor(ownDesc) is true, then
|
||||||
|
a. If ownDesc.[[Writable]] is false, return false.
|
||||||
|
b. If Type(Receiver) is not Object, return false.
|
||||||
|
c. Let existingDescriptor be Receiver.[[GetOwnProperty]](P).
|
||||||
|
d. ReturnIfAbrupt(existingDescriptor).
|
||||||
|
e. If existingDescriptor is not undefined, then
|
||||||
|
i. If IsAccessorDescriptor(existingDescriptor) is true, return false.
|
||||||
|
ii. If existingDescriptor.[[Writable]] is false, return false.
|
||||||
|
iii. Let valueDesc be the PropertyDescriptor{[[Value]]: V}.
|
||||||
|
iv. Return Receiver.[[DefineOwnProperty]](P, valueDesc).
|
||||||
|
f. Else Receiver does not currently have a property P,
|
||||||
|
i. Return CreateDataProperty(Receiver, P, V).
|
||||||
|
...
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var o1 = {p: 43};
|
||||||
|
var result = Reflect.set(o1, 'p', 42);
|
||||||
|
assert.sameValue(result, true, 'returns true on a successful setting');
|
||||||
|
assert.sameValue(
|
||||||
|
o1.p, 42,
|
||||||
|
'sets the new value'
|
||||||
|
);
|
||||||
|
|
||||||
|
var o2 = {p: 43};
|
||||||
|
var receiver = {p: 44};
|
||||||
|
var result = Reflect.set(o2, 'p', 42, receiver);
|
||||||
|
assert.sameValue(result, true, 'returns true on a successful setting');
|
||||||
|
assert.sameValue(o2.p, 43, 'with a receiver, does not set a value on target');
|
||||||
|
assert.sameValue(receiver.p, 42, 'sets the new value on the receiver');
|
|
@ -0,0 +1,17 @@
|
||||||
|
// 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: >
|
||||||
|
Reflect.set is configurable, writable and not enumerable.
|
||||||
|
info: >
|
||||||
|
26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] )
|
||||||
|
|
||||||
|
17 ECMAScript Standard Built-in Objects
|
||||||
|
|
||||||
|
includes: [propertyHelper.js]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
verifyNotEnumerable(Reflect, 'set');
|
||||||
|
verifyWritable(Reflect, 'set');
|
||||||
|
verifyConfigurable(Reflect, 'set');
|
|
@ -0,0 +1,36 @@
|
||||||
|
// 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: >
|
||||||
|
Sets the new value.
|
||||||
|
info: >
|
||||||
|
26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] )
|
||||||
|
|
||||||
|
...
|
||||||
|
2. Let key be ToPropertyKey(propertyKey).
|
||||||
|
...
|
||||||
|
|
||||||
|
7.1.14 ToPropertyKey ( argument )
|
||||||
|
|
||||||
|
...
|
||||||
|
3. If Type(key) is Symbol, then
|
||||||
|
a. Return key.
|
||||||
|
...
|
||||||
|
features: [Symbol]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var o1 = {};
|
||||||
|
var s = Symbol('1');
|
||||||
|
var result = Reflect.set(o1, s, 42);
|
||||||
|
assert.sameValue(result, true, 'returns true on a successful setting');
|
||||||
|
assert.sameValue(o1[s], 42, 'sets the new value');
|
||||||
|
|
||||||
|
var o2 = {};
|
||||||
|
o2[s] = 43;
|
||||||
|
var receiver = {};
|
||||||
|
receiver[s] = 44;
|
||||||
|
var result = Reflect.set(o2, s, 42, receiver);
|
||||||
|
assert.sameValue(result, true, 'returns true on a successful setting');
|
||||||
|
assert.sameValue(o2[s], 43, 'with a receiver, does not set a value on target');
|
||||||
|
assert.sameValue(receiver[s], 42, 'sets the new value on the receiver');
|
|
@ -0,0 +1,28 @@
|
||||||
|
// 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: >
|
||||||
|
Throws a TypeError if target is not an Object.
|
||||||
|
info: >
|
||||||
|
26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] )
|
||||||
|
|
||||||
|
1. If Type(target) is not Object, throw a TypeError exception.
|
||||||
|
...
|
||||||
|
---*/
|
||||||
|
|
||||||
|
assert.throws(TypeError, function() {
|
||||||
|
Reflect.set(1, 'p', 42);
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.throws(TypeError, function() {
|
||||||
|
Reflect.set(null, 'p', 42);
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.throws(TypeError, function() {
|
||||||
|
Reflect.set(undefined, 'p', 42);
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.throws(TypeError, function() {
|
||||||
|
Reflect.set('', 'p', 42);
|
||||||
|
});
|
|
@ -0,0 +1,17 @@
|
||||||
|
// 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: >
|
||||||
|
Throws a TypeError if target is a Symbol
|
||||||
|
info: >
|
||||||
|
26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] )
|
||||||
|
|
||||||
|
1. If Type(target) is not Object, throw a TypeError exception.
|
||||||
|
...
|
||||||
|
features: [Symbol]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
assert.throws(TypeError, function() {
|
||||||
|
Reflect.set(Symbol(1), 'p', 42);
|
||||||
|
});
|
Loading…
Reference in New Issue