summaryrefslogtreecommitdiff
path: root/Libraries/LibJS/Tests/builtins/Array/Array.from.js
blob: 0a015f814149230b9e984616abc5f137066f4a70 (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
61
62
63
64
65
66
67
68
69
test("length is 1", () => {
    expect(Array.from).toHaveLength(1);
});

describe("normal behavior", () => {
    test("empty array", () => {
        var a = Array.from([]);
        expect(a instanceof Array).toBeTrue();
        expect(a).toHaveLength(0);
    });

    test("empty string", () => {
        var a = Array.from("");
        expect(a instanceof Array).toBeTrue();
        expect(a).toHaveLength(0);
    });

    test("non-empty array", () => {
        var a = Array.from([5, 8, 1]);
        expect(a instanceof Array).toBeTrue();
        expect(a).toHaveLength(3);
        expect(a[0]).toBe(5);
        expect(a[1]).toBe(8);
        expect(a[2]).toBe(1);
    });

    test("non-empty string", () => {
        var a = Array.from("what");
        expect(a instanceof Array).toBeTrue();
        expect(a).toHaveLength(4);
        expect(a[0]).toBe("w");
        expect(a[1]).toBe("h");
        expect(a[2]).toBe("a");
        expect(a[3]).toBe("t");
    });

    test("shallow array copy", () => {
        var a = [1, 2, 3];
        var b = Array.from([a]);
        expect(b instanceof Array).toBeTrue();
        expect(b).toHaveLength(1);
        b[0][0] = 4;
        expect(a[0]).toBe(4);
    });

    test("from iterator", () => {
        function rangeIterator(begin, end) {
            return {
                [Symbol.iterator]() {
                    let value = begin - 1;
                    return {
                        next() {
                            if (value < end) {
                                value += 1;
                            }
                            return { value: value, done: value >= end };
                        },
                    };
                },
            };
        }

        var a = Array.from(rangeIterator(8, 10));
        expect(a instanceof Array).toBeTrue();
        expect(a).toHaveLength(2);
        expect(a[0]).toBe(8);
        expect(a[1]).toBe(9);
    });
});