• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1describe("unittests:: evaluation:: arraySpread", () => {
2    it("array spread preserves side-effects", async () => {
3        const result = evaluator.evaluateTypeScript(`
4            const k = [1, 2];
5            const o = [3, ...k, k[0]++];
6            export const output = o;
7        `);
8        assert.deepEqual(result.output, [3, 1, 2, 1]);
9    });
10    it("array spread packs spread elements", async () => {
11        const result = evaluator.evaluateTypeScript(`
12            const k = [1, , 2];
13            const o = [3, ...k, 4];
14            export const output = o;
15        `);
16        assert.deepEqual(result.output, [3, 1, undefined, 2, 4]);
17        assert.hasAllKeys(result.output, ["0", "1", "2", "3", "4"]);
18    });
19    it("array spread does not pack non-spread elements", async () => {
20        const result = evaluator.evaluateTypeScript(`
21            const k = [1, 2];
22            const o = [3, , ...k, , 4];
23            export const output = o;
24        `);
25        assert.deepEqual(result.output, [3, , 1, 2, , 4]); // eslint-disable-line no-sparse-arrays
26        assert.hasAllKeys(result.output, ["0", "2", "3", "5"]);
27        assert.doesNotHaveAllKeys(result.output, ["1", "4"]);
28    });
29    it("argument spread pack does not matter", async () => {
30        const result = evaluator.evaluateTypeScript(`
31            const f = (...args) => args;
32            const k = [1, , 2];
33            const o = f(3, ...k, 4);
34            export const output = o;
35        `);
36        assert.deepEqual(result.output, [3, 1, undefined, 2,4]);
37        assert.hasAllKeys(result.output, ["0", "1", "2", "3", "4"]);
38    });
39});
40