Source code
Revision control
Copy as Markdown
Other Tools
load(libdir + "asserts.js");
// Allow [[GetOwnPropertyDescriptor]] to spoof enumerability of target object's
// properties. Note that this also tests that the getOwnPropertyDescriptor is
// called by Object.keys(), as expected.
var target = {};
var handler = {
getOwnPropertyDescriptor : function (target, P) {
var targetDesc = Object.getOwnPropertyDescriptor(target, P);
// Lie about enumerability
targetDesc.enumerable = !targetDesc.enumerable;
return targetDesc;
}
};
for (let p of [new Proxy(target, handler), Proxy.revocable(target, handler).proxy]) {
Object.defineProperty(target, "foo", { configurable: true, enumerable: false });
assertDeepEq(Object.keys(p), ["foo"]);
Object.defineProperty(target, "foo", {configurable: true, enumerable: true});
assertDeepEq(Object.keys(p), []);
}