summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/Array/set-with-indexed-property-on-prototype-chain.js
blob: 1507e5ce00c159bb310d7c2ead0de59b053bd2f8 (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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
function ensureSetterCalledOnce(fn, value, index) {
    var setterCalled = false;
    Object.defineProperty(Array.prototype, index, {
        configurable: true,
        set: function(v) {
            assertEq(setterCalled, false);
            setterCalled = true;
            assertEq(v, value);
        }
    });

    assertEq(setterCalled, false);
    fn();
    assertEq(setterCalled, true);

    delete Array.prototype[index];
}

ensureSetterCalledOnce(function() {
    [].push("push");
}, "push", 0);

ensureSetterCalledOnce(function() {
    [/* hole */, "reverse"].reverse();
}, "reverse", 0);

ensureSetterCalledOnce(function() {
    ["reverse", /* hole */,].reverse();
}, "reverse", 1);

ensureSetterCalledOnce(function() {
    [/* hole */, "shift"].shift();
}, "shift", 0);

ensureSetterCalledOnce(function() {
    [/* hole */, "sort"].sort();
}, "sort", 0);

ensureSetterCalledOnce(function() {
    [/* hole */, undefined].sort();
}, undefined, 0);

ensureSetterCalledOnce(function() {
    [].splice(0, 0, "splice");
}, "splice", 0);

ensureSetterCalledOnce(function() {
    [/* hole */, "splice"].splice(0, 1);
}, "splice", 0);

ensureSetterCalledOnce(function(v) {
    ["splice", /* hole */,].splice(0, 0, "item");
}, "splice", 1);

ensureSetterCalledOnce(function() {
    [].unshift("unshift");
}, "unshift", 0);

if (typeof reportCompare === "function")
    reportCompare(true, true);