| 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), []); |
| } |