summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/Array/from_this.js
blob: 978c90b87147364fd35e0dd5d91d81815543e90d (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
/* Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/licenses/publicdomain/ */

// The third argument to Array.from is passed as the 'this' value to the
// mapping function.
var hits = 0, obj = {};
function f(x) {
    assertEq(this, obj);
    hits++;
}
Array.from(["a", "b", "c"], f, obj);
assertEq(hits, 3);

// Without an argument, undefined is passed...
hits = 0;
function gs(x) {
    "use strict";
    assertEq(this, undefined);
    hits++;
}
Array.from("def", gs);
assertEq(hits, 3);

// ...and if the mapping function is non-strict, that means the global is
// passed.
var global = this;
hits = 0;
function g(x) {
    assertEq(this, global);
    hits++;
}
Array.from("ghi", g);
assertEq(hits, 3);

// A primitive value can be passed.
for (var v of [0, "str", undefined]) {
    hits = 0;
    var mapfn = function h(x) {
        "use strict";
        assertEq(this, v);
        hits++;
    };
    Array.from("pq", mapfn, v);
    assertEq(hits, 2);
}

if (typeof reportCompare === 'function')
    reportCompare(0, 0);