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