mirror of https://github.com/tc39/test262.git
Add integer index property name test
This commit is contained in:
parent
b69390e68a
commit
4199a3b34b
|
@ -0,0 +1,79 @@
|
|||
// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver
|
||||
description: >
|
||||
If "set" trap is missing, the call is properly forwarded to ordinary
|
||||
[[Set]] that invokes [[GetOwnProperty]] and [[DefineOwnProperty]] methods
|
||||
on receiver (that is a Proxy itself) every time it is called.
|
||||
(integer index property name)
|
||||
info: |
|
||||
[[Set]] ( P, V, Receiver )
|
||||
|
||||
[...]
|
||||
6. Let trap be ? GetMethod(handler, "set").
|
||||
7. If trap is undefined, then
|
||||
a. Return ? target.[[Set]](P, V, Receiver).
|
||||
|
||||
OrdinarySetWithOwnDescriptor ( O, P, V, Receiver, ownDesc )
|
||||
|
||||
[...]
|
||||
3. If IsDataDescriptor(ownDesc) is true, then
|
||||
[...]
|
||||
c. Let existingDescriptor be ? Receiver.[[GetOwnProperty]](P).
|
||||
d. If existingDescriptor is not undefined, then
|
||||
[...]
|
||||
iii. Let valueDesc be the PropertyDescriptor { [[Value]]: V }.
|
||||
iv. Return ? Receiver.[[DefineOwnProperty]](P, valueDesc).
|
||||
e. Else,
|
||||
i. Assert: Receiver does not currently have a property P.
|
||||
ii. Return ? CreateDataProperty(Receiver, P, V).
|
||||
[...]
|
||||
|
||||
[[DefineOwnProperty]] ( P, Desc )
|
||||
|
||||
[...]
|
||||
9. Let booleanTrapResult be ! ToBoolean(? Call(trap, handler, « target, P, descObj »)).
|
||||
[...]
|
||||
17. Return true.
|
||||
features: [Proxy, Reflect]
|
||||
includes: [compareArray.js]
|
||||
---*/
|
||||
|
||||
var getOwnPropertyKeys = [];
|
||||
var definePropertyKeys = [];
|
||||
|
||||
var p = new Proxy({
|
||||
"0": null,
|
||||
}, {
|
||||
getOwnPropertyDescriptor: function(target, key) {
|
||||
getOwnPropertyKeys.push(key);
|
||||
return Reflect.getOwnPropertyDescriptor(target, key);
|
||||
},
|
||||
defineProperty: function(target, key, desc) {
|
||||
definePropertyKeys.push(key);
|
||||
return Reflect.defineProperty(target, key, desc);
|
||||
},
|
||||
});
|
||||
|
||||
p[0] = true;
|
||||
p[0] = true;
|
||||
p["0"] = true;
|
||||
|
||||
assert.compareArray(getOwnPropertyKeys, ["0", "0", "0"],
|
||||
"getOwnPropertyDescriptor: key present on [[ProxyTarget]]");
|
||||
assert.compareArray(definePropertyKeys, ["0", "0", "0"],
|
||||
"defineProperty: key present on [[ProxyTarget]]");
|
||||
|
||||
getOwnPropertyKeys = [];
|
||||
definePropertyKeys = [];
|
||||
|
||||
p[22] = false;
|
||||
p["22"] = false;
|
||||
p[22] = false;
|
||||
|
||||
assert.compareArray(getOwnPropertyKeys, ["22", "22", "22"],
|
||||
"getOwnPropertyDescriptor: key absent on [[ProxyTarget]]");
|
||||
assert.compareArray(definePropertyKeys, ["22", "22", "22"],
|
||||
"defineProperty: key absent on [[ProxyTarget]]");
|
Loading…
Reference in New Issue