diff --git a/tests/baselines/reference/arrayLiteralSpread.js b/tests/baselines/reference/arrayLiteralSpread.js new file mode 100644 index 0000000000..73a6071452 --- /dev/null +++ b/tests/baselines/reference/arrayLiteralSpread.js @@ -0,0 +1,46 @@ +//// [arrayLiteralSpread.ts] +function f0() { + var a = [1, 2, 3]; + var a1 = [...a]; + var a2 = [1, ...a]; + var a3 = [1, 2, ...a]; + var a4 = [...a, 1]; + var a5 = [...a, 1, 2]; + var a6 = [1, 2, ...a, 1, 2]; + var a7 = [1, ...a, 2, ...a]; + var a8 = [...a, ...a, ...a]; +} + +function f1() { + var a = [1, 2, 3]; + var b = ["hello", ...a, true]; + var b: (string | number | boolean)[]; +} + +function f2() { + var a = [...[...[...[...[...[]]]]]]; + var b = [...[...[...[...[...[5]]]]]]; +} + + +//// [arrayLiteralSpread.js] +function f0() { + var a = [1, 2, 3]; + var a1 = a; + var a2 = [1].concat(a); + var a3 = [1, 2].concat(a); + var a4 = a.concat([1]); + var a5 = a.concat([1, 2]); + var a6 = [1, 2].concat(a, [1, 2]); + var a7 = [1].concat(a, [2], a); + var a8 = a.concat(a, a); +} +function f1() { + var a = [1, 2, 3]; + var b = ["hello"].concat(a, [true]); + var b; +} +function f2() { + var a = []; + var b = [5]; +} diff --git a/tests/baselines/reference/arrayLiteralSpread.types b/tests/baselines/reference/arrayLiteralSpread.types new file mode 100644 index 0000000000..0dae59521b --- /dev/null +++ b/tests/baselines/reference/arrayLiteralSpread.types @@ -0,0 +1,90 @@ +=== tests/cases/conformance/es6/spread/arrayLiteralSpread.ts === +function f0() { +>f0 : () => void + + var a = [1, 2, 3]; +>a : number[] +>[1, 2, 3] : number[] + + var a1 = [...a]; +>a1 : number[] +>[...a] : number[] +>a : number[] + + var a2 = [1, ...a]; +>a2 : number[] +>[1, ...a] : number[] +>a : number[] + + var a3 = [1, 2, ...a]; +>a3 : number[] +>[1, 2, ...a] : number[] +>a : number[] + + var a4 = [...a, 1]; +>a4 : number[] +>[...a, 1] : number[] +>a : number[] + + var a5 = [...a, 1, 2]; +>a5 : number[] +>[...a, 1, 2] : number[] +>a : number[] + + var a6 = [1, 2, ...a, 1, 2]; +>a6 : number[] +>[1, 2, ...a, 1, 2] : number[] +>a : number[] + + var a7 = [1, ...a, 2, ...a]; +>a7 : number[] +>[1, ...a, 2, ...a] : number[] +>a : number[] +>a : number[] + + var a8 = [...a, ...a, ...a]; +>a8 : number[] +>[...a, ...a, ...a] : number[] +>a : number[] +>a : number[] +>a : number[] +} + +function f1() { +>f1 : () => void + + var a = [1, 2, 3]; +>a : number[] +>[1, 2, 3] : number[] + + var b = ["hello", ...a, true]; +>b : (string | number | boolean)[] +>["hello", ...a, true] : (string | number | boolean)[] +>a : number[] + + var b: (string | number | boolean)[]; +>b : (string | number | boolean)[] +} + +function f2() { +>f2 : () => void + + var a = [...[...[...[...[...[]]]]]]; +>a : any[] +>[...[...[...[...[...[]]]]]] : undefined[] +>[...[...[...[...[]]]]] : undefined[] +>[...[...[...[]]]] : undefined[] +>[...[...[]]] : undefined[] +>[...[]] : undefined[] +>[] : undefined[] + + var b = [...[...[...[...[...[5]]]]]]; +>b : number[] +>[...[...[...[...[...[5]]]]]] : number[] +>[...[...[...[...[5]]]]] : number[] +>[...[...[...[5]]]] : number[] +>[...[...[5]]] : number[] +>[...[5]] : number[] +>[5] : number[] +} + diff --git a/tests/baselines/reference/declarationsAndAssignments.errors.txt b/tests/baselines/reference/declarationsAndAssignments.errors.txt index 2c9a54c869..4eefc2fcc2 100644 --- a/tests/baselines/reference/declarationsAndAssignments.errors.txt +++ b/tests/baselines/reference/declarationsAndAssignments.errors.txt @@ -176,7 +176,7 @@ tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(138,9): f17({ c: true }); f17(f15()); - function g4() { + function f18() { var a: number; var b: string; var aa: number[]; @@ -191,7 +191,7 @@ tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(138,9): [a = 1, b = "abc"] = [2, "def"]; } - function g5() { + function f19() { var a, b; [a, b] = [1, 2]; [a, b] = [b, a]; @@ -199,4 +199,34 @@ tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(138,9): [[a, b] = [1, 2]] = [[2, 3]]; var x = ([a, b] = [1, 2]); } + + function f20() { + var a: number[]; + var x: number; + var y: number; + var z: number; + var [...a] = [1, 2, 3]; + var [x, ...a] = [1, 2, 3]; + var [x, y, ...a] = [1, 2, 3]; + var [x, y, z, ...a] = [1, 2, 3]; + [...a] = [1, 2, 3]; + [x, ...a] = [1, 2, 3]; + [x, y, ...a] = [1, 2, 3]; + [x, y, z, ...a] = [1, 2, 3]; + } + + function f21() { + var a: (number | string | boolean)[]; + var x: number | string | boolean; + var y: number | string | boolean; + var z: number | string | boolean; + var [...a] = [1, "hello", true]; + var [x, ...a] = [1, "hello", true]; + var [x, y, ...a] = [1, "hello", true]; + var [x, y, z, ...a] = [1, "hello", true]; + [...a] = [1, "hello", true]; + [x, ...a] = [1, "hello", true]; + [x, y, ...a] = [1, "hello", true]; + [x, y, z, ...a] = [1, "hello", true]; + } \ No newline at end of file diff --git a/tests/baselines/reference/declarationsAndAssignments.js b/tests/baselines/reference/declarationsAndAssignments.js index 82272a5555..23e1fe773d 100644 --- a/tests/baselines/reference/declarationsAndAssignments.js +++ b/tests/baselines/reference/declarationsAndAssignments.js @@ -129,7 +129,7 @@ f17({ a: "hello" }); f17({ c: true }); f17(f15()); -function g4() { +function f18() { var a: number; var b: string; var aa: number[]; @@ -140,7 +140,7 @@ function g4() { [a = 1, b = "abc"] = [2, "def"]; } -function g5() { +function f19() { var a, b; [a, b] = [1, 2]; [a, b] = [b, a]; @@ -148,6 +148,36 @@ function g5() { [[a, b] = [1, 2]] = [[2, 3]]; var x = ([a, b] = [1, 2]); } + +function f20() { + var a: number[]; + var x: number; + var y: number; + var z: number; + var [...a] = [1, 2, 3]; + var [x, ...a] = [1, 2, 3]; + var [x, y, ...a] = [1, 2, 3]; + var [x, y, z, ...a] = [1, 2, 3]; + [...a] = [1, 2, 3]; + [x, ...a] = [1, 2, 3]; + [x, y, ...a] = [1, 2, 3]; + [x, y, z, ...a] = [1, 2, 3]; +} + +function f21() { + var a: (number | string | boolean)[]; + var x: number | string | boolean; + var y: number | string | boolean; + var z: number | string | boolean; + var [...a] = [1, "hello", true]; + var [x, ...a] = [1, "hello", true]; + var [x, y, ...a] = [1, "hello", true]; + var [x, y, z, ...a] = [1, "hello", true]; + [...a] = [1, "hello", true]; + [x, ...a] = [1, "hello", true]; + [x, y, ...a] = [1, "hello", true]; + [x, y, z, ...a] = [1, "hello", true]; +} //// [declarationsAndAssignments.js] @@ -266,7 +296,7 @@ f17({}); f17({ a: "hello" }); f17({ c: true }); f17(f15()); -function g4() { +function f18() { var a; var b; var aa; @@ -277,7 +307,7 @@ function g4() { _e = [2, "def"], _f = _e[0], a = _f === void0 ? 1 : _f, _g = _e[1], b = _g === void0 ? "abc" : _g; var _a, _b, _c, _d, _e, _f, _g; } -function g5() { +function f19() { var a, b; _a = [1, 2], a = _a[0], b = _a[1]; _b = [b, a], a = _b[0], b = _b[1]; @@ -286,3 +316,33 @@ function g5() { var x = (_f = [1, 2], a = _f[0], b = _f[1], _f); var _a, _b, _c, _d, _e, _f; } +function f20() { + var a; + var x; + var y; + var z; + var _a = [1, 2, 3], a = _a.slice(0); + var _b = [1, 2, 3], x = _b[0], a = _b.slice(1); + var _c = [1, 2, 3], x = _c[0], y = _c[1], a = _c.slice(2); + var _d = [1, 2, 3], x = _d[0], y = _d[1], z = _d[2], a = _d.slice(3); + _e = [1, 2, 3], a = _e.slice(0); + _f = [1, 2, 3], x = _f[0], a = _f.slice(1); + _g = [1, 2, 3], x = _g[0], y = _g[1], a = _g.slice(2); + _h = [1, 2, 3], x = _h[0], y = _h[1], z = _h[2], a = _h.slice(3); + var _e, _f, _g, _h; +} +function f21() { + var a; + var x; + var y; + var z; + var _a = [1, "hello", true], a = _a.slice(0); + var _b = [1, "hello", true], x = _b[0], a = _b.slice(1); + var _c = [1, "hello", true], x = _c[0], y = _c[1], a = _c.slice(2); + var _d = [1, "hello", true], x = _d[0], y = _d[1], z = _d[2], a = _d.slice(3); + _e = [1, "hello", true], a = _e.slice(0); + _f = [1, "hello", true], x = _f[0], a = _f.slice(1); + _g = [1, "hello", true], x = _g[0], y = _g[1], a = _g.slice(2); + _h = [1, "hello", true], x = _h[0], y = _h[1], z = _h[2], a = _h.slice(3); + var _e, _f, _g, _h; +} diff --git a/tests/baselines/reference/restElementMustBeLast.errors.txt b/tests/baselines/reference/restElementMustBeLast.errors.txt new file mode 100644 index 0000000000..269d984bc0 --- /dev/null +++ b/tests/baselines/reference/restElementMustBeLast.errors.txt @@ -0,0 +1,12 @@ +tests/cases/conformance/es6/destructuring/restElementMustBeLast.ts(1,9): error TS2462: A rest element must be last in an array destructuring pattern +tests/cases/conformance/es6/destructuring/restElementMustBeLast.ts(2,2): error TS2462: A rest element must be last in an array destructuring pattern + + +==== tests/cases/conformance/es6/destructuring/restElementMustBeLast.ts (2 errors) ==== + var [...a, x] = [1, 2, 3]; // Error, rest must be last element + ~ +!!! error TS2462: A rest element must be last in an array destructuring pattern + [...a, x] = [1, 2, 3]; // Error, rest must be last element + ~~~~ +!!! error TS2462: A rest element must be last in an array destructuring pattern + \ No newline at end of file diff --git a/tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts b/tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts index 04cdd153a5..2202a482f8 100644 --- a/tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts +++ b/tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts @@ -128,7 +128,7 @@ f17({ a: "hello" }); f17({ c: true }); f17(f15()); -function g4() { +function f18() { var a: number; var b: string; var aa: number[]; @@ -139,7 +139,7 @@ function g4() { [a = 1, b = "abc"] = [2, "def"]; } -function g5() { +function f19() { var a, b; [a, b] = [1, 2]; [a, b] = [b, a]; @@ -147,3 +147,33 @@ function g5() { [[a, b] = [1, 2]] = [[2, 3]]; var x = ([a, b] = [1, 2]); } + +function f20() { + var a: number[]; + var x: number; + var y: number; + var z: number; + var [...a] = [1, 2, 3]; + var [x, ...a] = [1, 2, 3]; + var [x, y, ...a] = [1, 2, 3]; + var [x, y, z, ...a] = [1, 2, 3]; + [...a] = [1, 2, 3]; + [x, ...a] = [1, 2, 3]; + [x, y, ...a] = [1, 2, 3]; + [x, y, z, ...a] = [1, 2, 3]; +} + +function f21() { + var a: (number | string | boolean)[]; + var x: number | string | boolean; + var y: number | string | boolean; + var z: number | string | boolean; + var [...a] = [1, "hello", true]; + var [x, ...a] = [1, "hello", true]; + var [x, y, ...a] = [1, "hello", true]; + var [x, y, z, ...a] = [1, "hello", true]; + [...a] = [1, "hello", true]; + [x, ...a] = [1, "hello", true]; + [x, y, ...a] = [1, "hello", true]; + [x, y, z, ...a] = [1, "hello", true]; +} diff --git a/tests/cases/conformance/es6/destructuring/restElementMustBeLast.ts b/tests/cases/conformance/es6/destructuring/restElementMustBeLast.ts new file mode 100644 index 0000000000..6e7b91033a --- /dev/null +++ b/tests/cases/conformance/es6/destructuring/restElementMustBeLast.ts @@ -0,0 +1,2 @@ +var [...a, x] = [1, 2, 3]; // Error, rest must be last element +[...a, x] = [1, 2, 3]; // Error, rest must be last element diff --git a/tests/cases/conformance/es6/spread/arrayLiteralSpread.ts b/tests/cases/conformance/es6/spread/arrayLiteralSpread.ts new file mode 100644 index 0000000000..da088cc09a --- /dev/null +++ b/tests/cases/conformance/es6/spread/arrayLiteralSpread.ts @@ -0,0 +1,22 @@ +function f0() { + var a = [1, 2, 3]; + var a1 = [...a]; + var a2 = [1, ...a]; + var a3 = [1, 2, ...a]; + var a4 = [...a, 1]; + var a5 = [...a, 1, 2]; + var a6 = [1, 2, ...a, 1, 2]; + var a7 = [1, ...a, 2, ...a]; + var a8 = [...a, ...a, ...a]; +} + +function f1() { + var a = [1, 2, 3]; + var b = ["hello", ...a, true]; + var b: (string | number | boolean)[]; +} + +function f2() { + var a = [...[...[...[...[...[]]]]]]; + var b = [...[...[...[...[...[5]]]]]]; +}