summaryrefslogtreecommitdiffstats
path: root/js/src/tests/ecma_6/Function/configurable-length-builtins.js
blob: f28eaae1576380db7b46e7e90c497b1ece19f090 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/* Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/licenses/publicdomain/ */

// Deleting .length from a variety of builtin functions works as expected.
for (var fun of [Math.sin, Array.prototype.map, eval]) {
    assertEq(delete fun.length, true);
    assertEq(fun.hasOwnProperty("length"), false);
    assertEq("length" in fun, true);  // still inheriting Function.prototype.length
    assertEq(fun.length, 0);

    // The inherited property is nonwritable, so assigning still fails
    // (silently, in sloppy mode).
    fun.length = Math.hypot;
    assertEq(fun.length, 0);

    // It can be shadowed via defineProperty.
    Object.defineProperty(fun, "length", {value: Math.hypot});
    assertEq(fun.length, Math.hypot);
}

reportCompare(0, 0, 'ok');