| /* Any copyright is dedicated to the Public Domain. |
| * http://creativecommons.org/licenses/publicdomain/ */ |
| |
| assertDeepEq(Object.getOwnPropertySymbols({}), []); |
| |
| // String keys are ignored. |
| assertEq(Object.getOwnPropertySymbols({a: 1, b: 2}).length, 0); |
| assertEq(Object.getOwnPropertySymbols([0, 1, 2, 3]).length, 0); |
| |
| // Symbol keys are observed. |
| var iterable = {}; |
| Object.defineProperty(iterable, Symbol.iterator, { |
| value: () => [][Symbol.iterator]() |
| }); |
| assertDeepEq(Object.getOwnPropertySymbols(iterable), [Symbol.iterator]); |
| assertDeepEq(Object.getOwnPropertySymbols(new Proxy(iterable, {})), [Symbol.iterator]); |
| |
| // Test on an object with a thousand own properties. |
| var obj = {}; |
| for (var i = 0; i < 1000; i++) { |
| obj[Symbol.for("x" + i)] = 1; |
| } |
| assertEq(Object.getOwnPropertyNames(obj).length, 0); |
| var symbols = Object.getOwnPropertySymbols(obj); |
| assertEq(symbols.length, 1000); |
| assertEq(symbols.indexOf(Symbol.for("x0")) !== -1, true); |
| assertEq(symbols.indexOf(Symbol.for("x241")) !== -1, true); |
| assertEq(symbols.indexOf(Symbol.for("x999")) !== -1, true); |
| assertEq(Object.getOwnPropertySymbols(new Proxy(obj, {})).length, 1000); |
| |
| // The prototype chain is not consulted. |
| assertEq(Object.getOwnPropertySymbols(Object.create(obj)).length, 0); |
| assertEq(Object.getOwnPropertySymbols(new Proxy(Object.create(obj), {})).length, 0); |
| |
| // Primitives are coerced to objects; but there are never any symbol-keyed |
| // properties on the resulting wrapper objects. |
| assertThrowsInstanceOf(() => Object.getOwnPropertySymbols(), TypeError); |
| assertThrowsInstanceOf(() => Object.getOwnPropertySymbols(undefined), TypeError); |
| assertThrowsInstanceOf(() => Object.getOwnPropertySymbols(null), TypeError); |
| for (var primitive of [true, 1, 3.14, "hello", Symbol()]) |
| assertEq(Object.getOwnPropertySymbols(primitive).length, 0); |
| |
| assertEq(Object.getOwnPropertySymbols.length, 1); |
| |
| if (typeof reportCompare === "function") |
| reportCompare(0, 0); |