summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/Array/change-array-by-copy-cross-compartment-create.js
blob: bd6e6d0a9f65339661eb2335e28fde32c1aac1ed (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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);