summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/Set
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 14:29:10 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 14:29:10 +0000
commit2aa4a82499d4becd2284cdb482213d541b8804dd (patch)
treeb80bf8bf13c3766139fbacc530efd0dd9d54394c /js/src/tests/non262/Set
parentInitial commit. (diff)
downloadfirefox-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.js56
-rw-r--r--js/src/tests/non262/Set/browser.js0
-rw-r--r--js/src/tests/non262/Set/forEach-selfhosted-behavior.js51
-rw-r--r--js/src/tests/non262/Set/getter-name.js10
-rw-r--r--js/src/tests/non262/Set/iterator-thisv-error.js22
-rw-r--r--js/src/tests/non262/Set/non-iterable-error.js10
-rw-r--r--js/src/tests/non262/Set/shell.js0
-rw-r--r--js/src/tests/non262/Set/symbols.js27
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);