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/Set | |
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/Set')
-rw-r--r-- | js/src/tests/non262/Set/NaN-as-key.js | 56 | ||||
-rw-r--r-- | js/src/tests/non262/Set/browser.js | 0 | ||||
-rw-r--r-- | js/src/tests/non262/Set/forEach-selfhosted-behavior.js | 51 | ||||
-rw-r--r-- | js/src/tests/non262/Set/getter-name.js | 10 | ||||
-rw-r--r-- | js/src/tests/non262/Set/iterator-thisv-error.js | 22 | ||||
-rw-r--r-- | js/src/tests/non262/Set/non-iterable-error.js | 10 | ||||
-rw-r--r-- | js/src/tests/non262/Set/shell.js | 0 | ||||
-rw-r--r-- | js/src/tests/non262/Set/symbols.js | 27 |
8 files changed, 176 insertions, 0 deletions
diff --git a/js/src/tests/non262/Set/NaN-as-key.js b/js/src/tests/non262/Set/NaN-as-key.js new file mode 100644 index 0000000000..8c9207e886 --- /dev/null +++ b/js/src/tests/non262/Set/NaN-as-key.js @@ -0,0 +1,56 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 722260; +var summary = 'All NaNs must be treated as identical keys for Set'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +/* Avoid constant-folding that would happen were |undefined| to be used. */ +var key = -/a/g.missingProperty; + +var s = new Set(); +s.add(key, 17); +assertEq(s.has(key), true); +assertEq(s.has(-key), true); +assertEq(s.has(NaN), true); + +s.delete(-key); +assertEq(s.has(key), false); +assertEq(s.has(-key), false); +assertEq(s.has(NaN), false); + +s.add(-key, 17); +assertEq(s.has(key), true); +assertEq(s.has(-key), true); +assertEq(s.has(NaN), true); + +s.delete(NaN); +assertEq(s.has(key), false); +assertEq(s.has(-key), false); +assertEq(s.has(NaN), false); + +s.add(NaN, 17); +assertEq(s.has(key), true); +assertEq(s.has(-key), true); +assertEq(s.has(NaN), true); + +s.delete(key); +assertEq(s.has(key), false); +assertEq(s.has(-key), false); +assertEq(s.has(NaN), false); + + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/js/src/tests/non262/Set/browser.js b/js/src/tests/non262/Set/browser.js new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/js/src/tests/non262/Set/browser.js diff --git a/js/src/tests/non262/Set/forEach-selfhosted-behavior.js b/js/src/tests/non262/Set/forEach-selfhosted-behavior.js new file mode 100644 index 0000000000..37c87feefb --- /dev/null +++ b/js/src/tests/non262/Set/forEach-selfhosted-behavior.js @@ -0,0 +1,51 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 987243; +var summary = "Don't use .call(...) in the self-hosted Set.prototype.forEach"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var functionCall = Function.prototype.call; + +function throwSyntaxError() +{ + throw new SyntaxError("Function.prototype.call incorrectly called"); +} + +function lalala() {} + +Function.prototype.call = throwSyntaxError; + +new Set().forEach(throwSyntaxError); +new Set([1]).forEach(lalala); +new Set([{}, 4]).forEach(lalala); + +Function.prototype.call = function() { this.add(3.141592654); }; + +new Set().forEach(throwSyntaxError); +new Set(["foo"]).forEach(lalala); +new Set([undefined, NaN]).forEach(lalala); + +var callCount = 0; +Function.prototype.call = function() { callCount++; }; + +new Set().forEach(throwSyntaxError); +new Set([new Number]).forEach(lalala); +new Set([true, new Boolean(false)]).forEach(lalala); + +assertEq(callCount, 0); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/js/src/tests/non262/Set/getter-name.js b/js/src/tests/non262/Set/getter-name.js new file mode 100644 index 0000000000..9a3e84fa45 --- /dev/null +++ b/js/src/tests/non262/Set/getter-name.js @@ -0,0 +1,10 @@ +var BUGNUMBER = 1180290; +var summary = 'Set getters should have get prefix'; + +print(BUGNUMBER + ": " + summary); + +assertEq(Object.getOwnPropertyDescriptor(Set, Symbol.species).get.name, "get [Symbol.species]"); +assertEq(Object.getOwnPropertyDescriptor(Set.prototype, "size").get.name, "get size"); + +if (typeof reportCompare === 'function') + reportCompare(true, true); diff --git a/js/src/tests/non262/Set/iterator-thisv-error.js b/js/src/tests/non262/Set/iterator-thisv-error.js new file mode 100644 index 0000000000..b2b59808e3 --- /dev/null +++ b/js/src/tests/non262/Set/iterator-thisv-error.js @@ -0,0 +1,22 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +function test(fn, thisv) { + var message; + try { + fn.call(thisv); + } catch (e) { + message = e.message; + } + + assertEq(/^values method called on incompatible.+/.test(message), true); +} + +for (var thisv of [null, undefined, false, true, 0, ""]) { + test(Set.prototype.values, thisv); + test(Set.prototype.keys, thisv); + test(Set.prototype[Symbol.iterator], thisv); +} + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff --git a/js/src/tests/non262/Set/non-iterable-error.js b/js/src/tests/non262/Set/non-iterable-error.js new file mode 100644 index 0000000000..7781993fd2 --- /dev/null +++ b/js/src/tests/non262/Set/non-iterable-error.js @@ -0,0 +1,10 @@ +// Self-hosted JS code shouldn't be used for error message. + +try { + new Set(...[1]); +} catch (e) { + assertEq(e.message, "1 is not iterable"); +} + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff --git a/js/src/tests/non262/Set/shell.js b/js/src/tests/non262/Set/shell.js new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/js/src/tests/non262/Set/shell.js diff --git a/js/src/tests/non262/Set/symbols.js b/js/src/tests/non262/Set/symbols.js new file mode 100644 index 0000000000..72a00c943f --- /dev/null +++ b/js/src/tests/non262/Set/symbols.js @@ -0,0 +1,27 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +var s = new Set; + +// Symbols can be stored in Sets. +var sym = Symbol(); +s.add(sym); +assertEq(s.has(sym), true); +assertEq(s.has(Symbol()), false); +assertEq([...s][0], sym); +s.add(sym); +assertEq(s.has(sym), true); +assertEq(s.size, 1); +s.delete(sym); +assertEq(s.has(sym), false); +assertEq(s.size, 0); + +// Symbols returned by Symbol.for() can be in Sets. +var str = "how much wood would a woodchuck chuck if a woodchuck could chuck wood"; +var s2 = "how much wood would a woodchuck chuck if could"; +var arr = str.split(" ").map(Symbol.for); +s = new Set(arr); +assertDeepEq([...s], s2.split(" ").map(Symbol.for)); + +if (typeof reportCompare === "function") + reportCompare(0, 0); |