// Make sure that we can find own, enumerable symbols. var symbol = Symbol("bad"); var symbol2 = Symbol("good"); var proxy = new Proxy({}, { ownKeys() { return [symbol, symbol2]; }, getOwnPropertyDescriptor(target, name) { if (name == symbol) return {configurable: true, enumerable: false, value: {}}; // Only this enumerable symbol should be defined. if (name == symbol2) return {configurable: true, enumerable: true, value: {}}; assertEq(true, false); }, get(target, name) { // Slightly confusing, but these are the descriptors that defineProperties // is going to define on the object. if (name == symbol) return {configurable: true, value: "bad"}; if (name == symbol2) return {configurable: true, value: "good"}; assertEq(true, false); } }); assertEq(Object.getOwnPropertySymbols(proxy).length, 2); var obj = {}; Object.defineProperties(obj, proxy); assertEq(Object.getOwnPropertySymbols(obj).length, 1); assertEq(symbol in obj, false); assertEq(symbol2 in obj, true); assertEq(obj[symbol2], "good");