summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/Function/bound-length-and-name.js
blob: ef2f1ffbcd64de8364706efede9b13b9bf28ca02 (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
var proxy = new Proxy(function() {}, {
    getOwnPropertyDescriptor(target, name) {
        assertEq(name, "length");
        return {value: 3, configurable: true};
    },

    get(target, name) {
        if (name == "length")
            return 3;
        if (name == "name")
            return "hello world";
        assertEq(false, true);
    }
})

var bound = Function.prototype.bind.call(proxy);
assertEq(bound.name, "bound hello world");
assertEq(bound.length, 3);

var fun = function() {};
Object.defineProperty(fun, "name", {value: 1337});
Object.defineProperty(fun, "length", {value: "15"});
bound = fun.bind();
assertEq(bound.name, "bound ");
assertEq(bound.length, 0);

Object.defineProperty(fun, "length", {value: Number.MAX_SAFE_INTEGER});
bound = fun.bind();
assertEq(bound.length, Number.MAX_SAFE_INTEGER);

Object.defineProperty(fun, "length", {value: -100});
bound = fun.bind();
assertEq(bound.length, 0);

fun = function f(a, ...b) { };
assertEq(fun.length, 1);
bound = fun.bind();
assertEq(bound.length, 1);

reportCompare(0, 0, 'ok');