diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
commit | 2aa4a82499d4becd2284cdb482213d541b8804dd (patch) | |
tree | b80bf8bf13c3766139fbacc530efd0dd9d54394c /js/src/tests/non262/object/getOwnPropertySymbols.js | |
parent | Initial commit. (diff) | |
download | firefox-2aa4a82499d4becd2284cdb482213d541b8804dd.tar.xz firefox-2aa4a82499d4becd2284cdb482213d541b8804dd.zip |
Adding upstream version 86.0.1.upstream/86.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'js/src/tests/non262/object/getOwnPropertySymbols.js')
-rw-r--r-- | js/src/tests/non262/object/getOwnPropertySymbols.js | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/js/src/tests/non262/object/getOwnPropertySymbols.js b/js/src/tests/non262/object/getOwnPropertySymbols.js new file mode 100644 index 0000000000..b92d14ef17 --- /dev/null +++ b/js/src/tests/non262/object/getOwnPropertySymbols.js @@ -0,0 +1,46 @@ +/* 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); |