summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/Array/change-array-by-copy-cross-compartment-create.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/non262/Array/change-array-by-copy-cross-compartment-create.js')
-rw-r--r--js/src/tests/non262/Array/change-array-by-copy-cross-compartment-create.js26
1 files changed, 26 insertions, 0 deletions
diff --git a/js/src/tests/non262/Array/change-array-by-copy-cross-compartment-create.js b/js/src/tests/non262/Array/change-array-by-copy-cross-compartment-create.js
new file mode 100644
index 0000000000..bd6e6d0a9f
--- /dev/null
+++ b/js/src/tests/non262/Array/change-array-by-copy-cross-compartment-create.js
@@ -0,0 +1,26 @@
+// |reftest| shell-option(--enable-change-array-by-copy) skip-if(!Array.prototype.with)
+
+function test(otherGlobal) {
+ let arrays = [
+ ["with", otherGlobal.Array.prototype.with.call([1,2,3], 1, 3)],
+ ["toSpliced", otherGlobal.Array.prototype.toSpliced.call([1, 2, 3], 0, 1, 4, 5)],
+ ["toReversed", otherGlobal.Array.prototype.toReversed.call([1, 2, 3])],
+ ["toSorted", otherGlobal.Array.prototype.toSorted.call([1, 2, 3], (x, y) => y > x)]
+ ]
+
+ // Test that calling each method in a different compartment returns an array, and that
+ // the returned array's prototype matches the other compartment's Array prototype,
+ // not this one.
+ for (const [name, arr] of arrays) {
+ assertEq(arr instanceof Array, false, name + " returned an instance of Array");
+ assertEq(arr instanceof otherGlobal.Array, true, name + " did not return an instance of new global's Array");
+ assertEq(Object.getPrototypeOf(arr) !== Object.getPrototypeOf([1, 2, 3]), true,
+ name + " returned an object with a prototype from the wrong realm");
+ }
+}
+
+test(newGlobal());
+test(newGlobal({newCompartment: true}));
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);