summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/Array/concat-spreadable-primitive.js
blob: d2264bfa2ae961d2c0630dfa8ad5ef56116e632e (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
/* Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/licenses/publicdomain/ */
"use strict";

// Primitive values should never be tried to spread
let primitives = [
    10,
    false,
    Symbol()
    // Can't change String.prototype.length
];

for (let value of primitives) {
    let prototype = Object.getPrototypeOf(value);
    prototype[Symbol.isConcatSpreadable] = true;

    Object.defineProperty(prototype, "length", {
        configurable: true,
        get() {
            // Should never invoke length getter
            assertEq(true, false);
        },
    });

    let x = [1, 2].concat(value);
    assertDeepEq(x, [1, 2, value]);

    delete prototype[Symbol.isConcatSpreadable];
    delete prototype.length;

    prototype.length;
}

reportCompare(true, true);