From d475170321b3c0c77d33f0766e1af9ec2e7451fa Mon Sep 17 00:00:00 2001 From: Yui T Date: Mon, 13 Apr 2015 16:16:04 -0700 Subject: [PATCH] Conformance test for update in section 4.6 --- .../reference/arrayLiterals2.errors.txt | 60 ++++++++++++++++ tests/baselines/reference/arrayLiterals2.js | 60 ++++++++++++++++ .../reference/arrayLiterals2ES6.errors.txt | 60 ++++++++++++++++ .../baselines/reference/arrayLiterals2ES6.js | 60 ++++++++++++++++ .../reference/arrayLiterals3.errors.txt | 62 ++++++++++++++++ tests/baselines/reference/arrayLiterals3.js | 70 +++++++++++++++++++ .../reference/arrayLiterals3ES6.errors.txt | 52 ++++++++++++++ .../baselines/reference/arrayLiterals3ES6.js | 62 ++++++++++++++++ .../reference/arrayLiterals4.errors.txt | 31 ++++++++ tests/baselines/reference/arrayLiterals4.js | 16 +++++ .../reference/arrayLiterals5.errors.txt | 46 ++++++++++++ tests/baselines/reference/arrayLiterals5.js | 19 +++++ .../arrayLiterals/arrayLiterals2.ts | 32 +++++++++ .../arrayLiterals/arrayLiterals2ES6.ts | 33 +++++++++ .../arrayLiterals/arrayLiterals3.ts | 42 +++++++++++ .../arrayLiterals/arrayLiterals3ES6.ts | 39 +++++++++++ .../arrayLiterals/arrayLiterals4.ts | 6 ++ .../arrayLiterals/arrayLiterals5.ts | 3 + 18 files changed, 753 insertions(+) create mode 100644 tests/baselines/reference/arrayLiterals2.errors.txt create mode 100644 tests/baselines/reference/arrayLiterals2.js create mode 100644 tests/baselines/reference/arrayLiterals2ES6.errors.txt create mode 100644 tests/baselines/reference/arrayLiterals2ES6.js create mode 100644 tests/baselines/reference/arrayLiterals3.errors.txt create mode 100644 tests/baselines/reference/arrayLiterals3.js create mode 100644 tests/baselines/reference/arrayLiterals3ES6.errors.txt create mode 100644 tests/baselines/reference/arrayLiterals3ES6.js create mode 100644 tests/baselines/reference/arrayLiterals4.errors.txt create mode 100644 tests/baselines/reference/arrayLiterals4.js create mode 100644 tests/baselines/reference/arrayLiterals5.errors.txt create mode 100644 tests/baselines/reference/arrayLiterals5.js create mode 100644 tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2.ts create mode 100644 tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2ES6.ts create mode 100644 tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts create mode 100644 tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3ES6.ts create mode 100644 tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts create mode 100644 tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts diff --git a/tests/baselines/reference/arrayLiterals2.errors.txt b/tests/baselines/reference/arrayLiterals2.errors.txt new file mode 100644 index 00000000000..149d9a4747c --- /dev/null +++ b/tests/baselines/reference/arrayLiterals2.errors.txt @@ -0,0 +1,60 @@ +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2.ts(23,5): error TS2322: Type '(string[] | number[])[]' is not assignable to type 'tup'. + Property '0' is missing in type '(string[] | number[])[]'. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2.ts(24,5): error TS2322: Type 'number[]' is not assignable to type '[number, number, number]'. + Property '0' is missing in type 'number[]'. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2.ts(27,5): error TS2322: Type '(string | number)[]' is not assignable to type 'myArray'. + Types of property 'push' are incompatible. + Type '(...items: (string | number)[]) => number' is not assignable to type '(...items: Number[]) => number'. + Types of parameters 'items' and 'items' are incompatible. + Type 'string | number' is not assignable to type 'Number'. + Type 'string' is not assignable to type 'Number'. + Property 'toFixed' is missing in type 'String'. + + +==== tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2.ts (3 errors) ==== + var a = [2,3,4] + var a1 = ["hello", "world"] + var a2 = [undefined, null, undefined]; + var a3 = [] + var a4: number[] = [...a3]; + var a5: number[] = []; + + var b = [, , , ...a,"hello"]; + var c = [() => 1,]; + var d = [...c,,]; + var e = [,,...d]; + var g = [[1, 2, "hello"], ["string", true]]; + var h = [...g]; + var i: [number[], string[]] = [[1, 2, 3],["hello", "string"]]; + var j = [...i]; + var k:Array = [...i]; + interface tup { + 0: number[]|string[]; + 1: number[]|string[]; + } + interface myArray extends Array {} + interface myArray2 extends Array {} + var l: tup = [...i]; // error + ~ +!!! error TS2322: Type '(string[] | number[])[]' is not assignable to type 'tup'. +!!! error TS2322: Property '0' is missing in type '(string[] | number[])[]'. + var m: [number, number, number] = [...a]; // error + ~ +!!! error TS2322: Type 'number[]' is not assignable to type '[number, number, number]'. +!!! error TS2322: Property '0' is missing in type 'number[]'. + var n: number[] = [...a]; + var o: myArray = [...a]; + var p: myArray = [...a, ...a1]; // error + ~ +!!! error TS2322: Type '(string | number)[]' is not assignable to type 'myArray'. +!!! error TS2322: Types of property 'push' are incompatible. +!!! error TS2322: Type '(...items: (string | number)[]) => number' is not assignable to type '(...items: Number[]) => number'. +!!! error TS2322: Types of parameters 'items' and 'items' are incompatible. +!!! error TS2322: Type 'string | number' is not assignable to type 'Number'. +!!! error TS2322: Type 'string' is not assignable to type 'Number'. +!!! error TS2322: Property 'toFixed' is missing in type 'String'. + var q: myArray2 = [...a, ...a1]; + var r = [...a2]; + var r1 = [...a3]; + var r2 = [...a4]; + var r3:number[][] = [[...a4]]; \ No newline at end of file diff --git a/tests/baselines/reference/arrayLiterals2.js b/tests/baselines/reference/arrayLiterals2.js new file mode 100644 index 00000000000..42cfb13c96a --- /dev/null +++ b/tests/baselines/reference/arrayLiterals2.js @@ -0,0 +1,60 @@ +//// [arrayLiterals2.ts] +var a = [2,3,4] +var a1 = ["hello", "world"] +var a2 = [undefined, null, undefined]; +var a3 = [] +var a4: number[] = [...a3]; +var a5: number[] = []; + +var b = [, , , ...a,"hello"]; +var c = [() => 1,]; +var d = [...c,,]; +var e = [,,...d]; +var g = [[1, 2, "hello"], ["string", true]]; +var h = [...g]; +var i: [number[], string[]] = [[1, 2, 3],["hello", "string"]]; +var j = [...i]; +var k:Array = [...i]; +interface tup { + 0: number[]|string[]; + 1: number[]|string[]; +} +interface myArray extends Array {} +interface myArray2 extends Array {} +var l: tup = [...i]; // error +var m: [number, number, number] = [...a]; // error +var n: number[] = [...a]; +var o: myArray = [...a]; +var p: myArray = [...a, ...a1]; // error +var q: myArray2 = [...a, ...a1]; +var r = [...a2]; +var r1 = [...a3]; +var r2 = [...a4]; +var r3:number[][] = [[...a4]]; + +//// [arrayLiterals2.js] +var a = [2, 3, 4]; +var a1 = ["hello", "world"]; +var a2 = [undefined, null, undefined]; +var a3 = []; +var a4 = a3; +var a5 = []; +var b = [, , ].concat(a, ["hello"]); +var c = [function () { return 1; },]; +var d = c.concat([,]); +var e = [, ].concat(d); +var g = [[1, 2, "hello"], ["string", true]]; +var h = g; +var i = [[1, 2, 3], ["hello", "string"]]; +var j = i; +var k = i; +var l = i; // error +var m = a; // error +var n = a; +var o = a; +var p = a.concat(a1); // error +var q = a.concat(a1); +var r = a2; +var r1 = a3; +var r2 = a4; +var r3 = [a4]; diff --git a/tests/baselines/reference/arrayLiterals2ES6.errors.txt b/tests/baselines/reference/arrayLiterals2ES6.errors.txt new file mode 100644 index 00000000000..bb3247ec453 --- /dev/null +++ b/tests/baselines/reference/arrayLiterals2ES6.errors.txt @@ -0,0 +1,60 @@ +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2ES6.ts(23,5): error TS2322: Type '(string[] | number[])[]' is not assignable to type 'tup'. + Property '0' is missing in type '(string[] | number[])[]'. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2ES6.ts(24,5): error TS2322: Type 'number[]' is not assignable to type '[number, number, number]'. + Property '0' is missing in type 'number[]'. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2ES6.ts(27,5): error TS2322: Type '(string | number)[]' is not assignable to type 'myArray'. + Types of property 'push' are incompatible. + Type '(...items: (string | number)[]) => number' is not assignable to type '(...items: Number[]) => number'. + Types of parameters 'items' and 'items' are incompatible. + Type 'string | number' is not assignable to type 'Number'. + Type 'string' is not assignable to type 'Number'. + Property 'toFixed' is missing in type 'String'. + + +==== tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2ES6.ts (3 errors) ==== + var a = [2,3,4] + var a1 = ["hello", "world"] + var a2 = [undefined, null, undefined]; + var a3 = [] + var a4: number[] = [...a3]; + var a5: number[] = []; + + var b = [, , , ...a,"hello"]; + var c = [() => 1,]; + var d = [...c,,]; + var e = [,,...d]; + var g = [[1, 2, "hello"], ["string", true]]; + var h = [...g]; + var i: [number[], string[]] = [[1, 2, 3],["hello", "string"]]; + var j = [...i]; + var k:Array = [...i]; + interface tup { + 0: number[]|string[]; + 1: number[]|string[]; + } + interface myArray extends Array {} + interface myArray2 extends Array {} + var l: tup = [...i]; // error + ~ +!!! error TS2322: Type '(string[] | number[])[]' is not assignable to type 'tup'. +!!! error TS2322: Property '0' is missing in type '(string[] | number[])[]'. + var m: [number, number, number] = [...a]; // error + ~ +!!! error TS2322: Type 'number[]' is not assignable to type '[number, number, number]'. +!!! error TS2322: Property '0' is missing in type 'number[]'. + var n: number[] = [...a]; + var o: myArray = [...a]; + var p: myArray = [...a, ...a1]; // error + ~ +!!! error TS2322: Type '(string | number)[]' is not assignable to type 'myArray'. +!!! error TS2322: Types of property 'push' are incompatible. +!!! error TS2322: Type '(...items: (string | number)[]) => number' is not assignable to type '(...items: Number[]) => number'. +!!! error TS2322: Types of parameters 'items' and 'items' are incompatible. +!!! error TS2322: Type 'string | number' is not assignable to type 'Number'. +!!! error TS2322: Type 'string' is not assignable to type 'Number'. +!!! error TS2322: Property 'toFixed' is missing in type 'String'. + var q: myArray2 = [...a, ...a1]; + var r = [...a2]; + var r1 = [...a3]; + var r2 = [...a4]; + var r3:number[][] = [[...a4]]; \ No newline at end of file diff --git a/tests/baselines/reference/arrayLiterals2ES6.js b/tests/baselines/reference/arrayLiterals2ES6.js new file mode 100644 index 00000000000..8cdecdd3be4 --- /dev/null +++ b/tests/baselines/reference/arrayLiterals2ES6.js @@ -0,0 +1,60 @@ +//// [arrayLiterals2ES6.ts] +var a = [2,3,4] +var a1 = ["hello", "world"] +var a2 = [undefined, null, undefined]; +var a3 = [] +var a4: number[] = [...a3]; +var a5: number[] = []; + +var b = [, , , ...a,"hello"]; +var c = [() => 1,]; +var d = [...c,,]; +var e = [,,...d]; +var g = [[1, 2, "hello"], ["string", true]]; +var h = [...g]; +var i: [number[], string[]] = [[1, 2, 3],["hello", "string"]]; +var j = [...i]; +var k:Array = [...i]; +interface tup { + 0: number[]|string[]; + 1: number[]|string[]; +} +interface myArray extends Array {} +interface myArray2 extends Array {} +var l: tup = [...i]; // error +var m: [number, number, number] = [...a]; // error +var n: number[] = [...a]; +var o: myArray = [...a]; +var p: myArray = [...a, ...a1]; // error +var q: myArray2 = [...a, ...a1]; +var r = [...a2]; +var r1 = [...a3]; +var r2 = [...a4]; +var r3:number[][] = [[...a4]]; + +//// [arrayLiterals2ES6.js] +var a = [2, 3, 4]; +var a1 = ["hello", "world"]; +var a2 = [undefined, null, undefined]; +var a3 = []; +var a4 = [...a3]; +var a5 = []; +var b = [, , , ...a, "hello"]; +var c = [() => 1,]; +var d = [...c, ,]; +var e = [, , ...d]; +var g = [[1, 2, "hello"], ["string", true]]; +var h = [...g]; +var i = [[1, 2, 3], ["hello", "string"]]; +var j = [...i]; +var k = [...i]; +var l = [...i]; // error +var m = [...a]; // error +var n = [...a]; +var o = [...a]; +var p = [...a, ...a1]; // error +var q = [...a, ...a1]; +var r = [...a2]; +var r1 = [...a3]; +var r2 = [...a4]; +var r3 = [[...a4]]; diff --git a/tests/baselines/reference/arrayLiterals3.errors.txt b/tests/baselines/reference/arrayLiterals3.errors.txt new file mode 100644 index 00000000000..35bedb54854 --- /dev/null +++ b/tests/baselines/reference/arrayLiterals3.errors.txt @@ -0,0 +1,62 @@ +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts(8,5): error TS2322: Type '[number, number, string, boolean]' is not assignable to type '[number, number]'. + Types of property 'pop' are incompatible. + Type '() => string | number | boolean' is not assignable to type '() => number'. + Type 'string | number | boolean' is not assignable to type 'number'. + Type 'string' is not assignable to type 'number'. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts(35,6): error TS2461: Type 'string | number[]' is not an array type. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts(40,16): error TS2461: Type 'IArguments' is not an array type. + + +==== tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts (3 errors) ==== + interface I0 extends Array { + 0: number; + 1: number; + 2: string; + 3: boolean; + } + var [a, b]: [number, number] = [1, 2]; + var [a1, b1]: [number, number] = [1, 2, "string", true]; // error + ~~~~~~~~ +!!! error TS2322: Type '[number, number, string, boolean]' is not assignable to type '[number, number]'. +!!! error TS2322: Types of property 'pop' are incompatible. +!!! error TS2322: Type '() => string | number | boolean' is not assignable to type '() => number'. +!!! error TS2322: Type 'string | number | boolean' is not assignable to type 'number'. +!!! error TS2322: Type 'string' is not assignable to type 'number'. + var [a2, b2]: (number| string)[] = [1, 2, 3, "string"]; + var [c1, c2, c3]: I0 = [10, 11, "string", true]; + interface I extends Array{ + 0: string|number; + 1: string|number; + 2: string|number; + } + interface I2 extends Array { + 0: number; + 1: number; + 2: string|number; + } + var tup: [number, number, string] = [1, 2, "world"]; + var [c, d, e]: I = tup; + var [f, g]: I2 = tup; + var h1: string| number; + var [f1, g1,h1]: I2 = tup; + h1 = g1; + + var arr1 = [1, 2, 3]; + var arr2 = [true, false, true]; + var arr3 = [true] + var [[foo1, foo2, foo3], [boo1, boo2, boo3]] = [[...arr1], [...arr2]]; + var [bar1, bar2, bar3, bar1, bar2, bar3] = [...arr1, ...arr2]; + var [bar1, bar2, bar3, bar1, bar2] = [...arr1, ...arr3]; + var [[r, s], t] = [[...arr1], "hello"]; + var [[r1, s1], t1] = [[...arr1], ...["hello"]]; // error + ~~~~~~~~ +!!! error TS2461: Type 'string | number[]' is not an array type. + var [x] = [...["word"]]; + var [...y] = [...["word"]]; + var z = [...[...["word"]]]; + function foobar() { + return [...arguments]; + ~~~~~~~~~ +!!! error TS2461: Type 'IArguments' is not an array type. + } + var [...as] = [[, , , , ]]; \ No newline at end of file diff --git a/tests/baselines/reference/arrayLiterals3.js b/tests/baselines/reference/arrayLiterals3.js new file mode 100644 index 00000000000..6ad064e20da --- /dev/null +++ b/tests/baselines/reference/arrayLiterals3.js @@ -0,0 +1,70 @@ +//// [arrayLiterals3.ts] +interface I0 extends Array { + 0: number; + 1: number; + 2: string; + 3: boolean; +} +var [a, b]: [number, number] = [1, 2]; +var [a1, b1]: [number, number] = [1, 2, "string", true]; // error +var [a2, b2]: (number| string)[] = [1, 2, 3, "string"]; +var [c1, c2, c3]: I0 = [10, 11, "string", true]; +interface I extends Array{ + 0: string|number; + 1: string|number; + 2: string|number; +} +interface I2 extends Array { + 0: number; + 1: number; + 2: string|number; +} +var tup: [number, number, string] = [1, 2, "world"]; +var [c, d, e]: I = tup; +var [f, g]: I2 = tup; +var h1: string| number; +var [f1, g1,h1]: I2 = tup; +h1 = g1; + +var arr1 = [1, 2, 3]; +var arr2 = [true, false, true]; +var arr3 = [true] +var [[foo1, foo2, foo3], [boo1, boo2, boo3]] = [[...arr1], [...arr2]]; +var [bar1, bar2, bar3, bar1, bar2, bar3] = [...arr1, ...arr2]; +var [bar1, bar2, bar3, bar1, bar2] = [...arr1, ...arr3]; +var [[r, s], t] = [[...arr1], "hello"]; +var [[r1, s1], t1] = [[...arr1], ...["hello"]]; // error +var [x] = [...["word"]]; +var [...y] = [...["word"]]; +var z = [...[...["word"]]]; +function foobar() { + return [...arguments]; +} +var [...as] = [[, , , , ]]; + +//// [arrayLiterals3.js] +var _a = [1, 2], a = _a[0], b = _a[1]; +var _b = [1, 2, "string", true], a1 = _b[0], b1 = _b[1]; // error +var _c = [1, 2, 3, "string"], a2 = _c[0], b2 = _c[1]; +var _d = [10, 11, "string", true], c1 = _d[0], c2 = _d[1], c3 = _d[2]; +var tup = [1, 2, "world"]; +var c = tup[0], d = tup[1], e = tup[2]; +var f = tup[0], g = tup[1]; +var h1; +var f1 = tup[0], g1 = tup[1], h1 = tup[2]; +h1 = g1; +var arr1 = [1, 2, 3]; +var arr2 = [true, false, true]; +var arr3 = [true]; +var _e = [arr1, arr2], _f = _e[0], foo1 = _f[0], foo2 = _f[1], foo3 = _f[2], _g = _e[1], boo1 = _g[0], boo2 = _g[1], boo3 = _g[2]; +var _h = arr1.concat(arr2), bar1 = _h[0], bar2 = _h[1], bar3 = _h[2], bar1 = _h[3], bar2 = _h[4], bar3 = _h[5]; +var _j = arr1.concat(arr3), bar1 = _j[0], bar2 = _j[1], bar3 = _j[2], bar1 = _j[3], bar2 = _j[4]; +var _k = [arr1, "hello"], _l = _k[0], r = _l[0], s = _l[1], t = _k[1]; +var _m = [arr1].concat(["hello"]), _o = _m[0], r1 = _o[0], s1 = _o[1], t1 = _m[1]; // error +var x = (["word"])[0]; +var _p = ["word"], y = _p.slice(0); +var z = ["word"]; +function foobar() { + return arguments; +} +var _q = [[, , , ,]], as = _q.slice(0); diff --git a/tests/baselines/reference/arrayLiterals3ES6.errors.txt b/tests/baselines/reference/arrayLiterals3ES6.errors.txt new file mode 100644 index 00000000000..1490a0fbcfa --- /dev/null +++ b/tests/baselines/reference/arrayLiterals3ES6.errors.txt @@ -0,0 +1,52 @@ +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3ES6.ts(8,5): error TS2322: Type '[number, number, string, boolean]' is not assignable to type '[number, number]'. + Types of property 'pop' are incompatible. + Type '() => string | number | boolean' is not assignable to type '() => number'. + Type 'string | number | boolean' is not assignable to type 'number'. + Type 'string' is not assignable to type 'number'. + + +==== tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3ES6.ts (1 errors) ==== + interface I0 extends Array { + 0: number; + 1: number; + 2: string; + 3: boolean; + } + var [a, b]: [number, number] = [1, 2]; + var [a1, b1]: [number, number] = [1, 2, "string", true]; // error + ~~~~~~~~ +!!! error TS2322: Type '[number, number, string, boolean]' is not assignable to type '[number, number]'. +!!! error TS2322: Types of property 'pop' are incompatible. +!!! error TS2322: Type '() => string | number | boolean' is not assignable to type '() => number'. +!!! error TS2322: Type 'string | number | boolean' is not assignable to type 'number'. +!!! error TS2322: Type 'string' is not assignable to type 'number'. + var [a2, b2]: (number| string)[] = [1, 2, 3, "string"]; + var [c1, c2, c3]: I0 = [10, 11, "string", true]; + interface I extends Array{ + 0: string|number; + 1: string|number; + 2: string|number; + } + interface I2 extends Array { + 0: number; + 1: number; + 2: string|number; + } + var tup: [number, number, string] = [1, 2, "world"]; + var [c, d, e]: I = tup; + var [f, g]: I2 = tup; + var h1: string| number; + var [f1, g1,h1]: I2 = tup; + h1 = g1; + + var arr1 = [1, 2, 3]; + var arr2 = [true, false, true]; + var arr3 = [true] + var [[foo1, foo2, foo3], [boo1, boo2, boo3]] = [[...arr1], [...arr2]]; + var [bar1, bar2, bar3, bar1, bar2, bar3] = [...arr1, ...arr2]; + var [bar1, bar2, bar3, bar1, bar2] = [...arr1, ...arr3]; + var [[r, s], t] = [[...arr1], "hello"]; + var [[r1, s1], t1] = [[...arr1], ...["hello"]]; // error + var [x] = [...["word"]]; + var [...y] = [...["word"]]; + var z = [...[...["word"]]]; \ No newline at end of file diff --git a/tests/baselines/reference/arrayLiterals3ES6.js b/tests/baselines/reference/arrayLiterals3ES6.js new file mode 100644 index 00000000000..f685ea9c719 --- /dev/null +++ b/tests/baselines/reference/arrayLiterals3ES6.js @@ -0,0 +1,62 @@ +//// [arrayLiterals3ES6.ts] +interface I0 extends Array { + 0: number; + 1: number; + 2: string; + 3: boolean; +} +var [a, b]: [number, number] = [1, 2]; +var [a1, b1]: [number, number] = [1, 2, "string", true]; // error +var [a2, b2]: (number| string)[] = [1, 2, 3, "string"]; +var [c1, c2, c3]: I0 = [10, 11, "string", true]; +interface I extends Array{ + 0: string|number; + 1: string|number; + 2: string|number; +} +interface I2 extends Array { + 0: number; + 1: number; + 2: string|number; +} +var tup: [number, number, string] = [1, 2, "world"]; +var [c, d, e]: I = tup; +var [f, g]: I2 = tup; +var h1: string| number; +var [f1, g1,h1]: I2 = tup; +h1 = g1; + +var arr1 = [1, 2, 3]; +var arr2 = [true, false, true]; +var arr3 = [true] +var [[foo1, foo2, foo3], [boo1, boo2, boo3]] = [[...arr1], [...arr2]]; +var [bar1, bar2, bar3, bar1, bar2, bar3] = [...arr1, ...arr2]; +var [bar1, bar2, bar3, bar1, bar2] = [...arr1, ...arr3]; +var [[r, s], t] = [[...arr1], "hello"]; +var [[r1, s1], t1] = [[...arr1], ...["hello"]]; // error +var [x] = [...["word"]]; +var [...y] = [...["word"]]; +var z = [...[...["word"]]]; + +//// [arrayLiterals3ES6.js] +var [a, b] = [1, 2]; +var [a1, b1] = [1, 2, "string", true]; // error +var [a2, b2] = [1, 2, 3, "string"]; +var [c1, c2, c3] = [10, 11, "string", true]; +var tup = [1, 2, "world"]; +var [c, d, e] = tup; +var [f, g] = tup; +var h1; +var [f1, g1, h1] = tup; +h1 = g1; +var arr1 = [1, 2, 3]; +var arr2 = [true, false, true]; +var arr3 = [true]; +var [[foo1, foo2, foo3], [boo1, boo2, boo3]] = [[...arr1], [...arr2]]; +var [bar1, bar2, bar3, bar1, bar2, bar3] = [...arr1, ...arr2]; +var [bar1, bar2, bar3, bar1, bar2] = [...arr1, ...arr3]; +var [[r, s], t] = [[...arr1], "hello"]; +var [[r1, s1], t1] = [[...arr1], ...["hello"]]; // error +var [x] = [...["word"]]; +var [...y] = [...["word"]]; +var z = [...[...["word"]]]; diff --git a/tests/baselines/reference/arrayLiterals4.errors.txt b/tests/baselines/reference/arrayLiterals4.errors.txt new file mode 100644 index 00000000000..5fc0fe2c51e --- /dev/null +++ b/tests/baselines/reference/arrayLiterals4.errors.txt @@ -0,0 +1,31 @@ +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts(2,6): error TS1212: Identifier expected. 'public' is a reserved word in strict mode +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts(2,14): error TS1212: Identifier expected. 'static' is a reserved word in strict mode +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts(3,5): error TS1212: Identifier expected. 'protected' is a reserved word in strict mode +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts(4,21): error TS1212: Identifier expected. 'protected' is a reserved word in strict mode +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts(5,7): error TS1212: Identifier expected. 'public' is a reserved word in strict mode +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts(5,15): error TS1212: Identifier expected. 'package' is a reserved word in strict mode +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts(6,9): error TS1212: Identifier expected. 'implements' is a reserved word in strict mode + + +==== tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts (7 errors) ==== + "use strict" + var [public, static] = [1, 23, ]; + ~~~~~~ +!!! error TS1212: Identifier expected. 'public' is a reserved word in strict mode + ~~~~~~ +!!! error TS1212: Identifier expected. 'static' is a reserved word in strict mode + var protected = [1, 2, 3]; + ~~~~~~~~~ +!!! error TS1212: Identifier expected. 'protected' is a reserved word in strict mode + var [a, b, c] = [...protected]; + ~~~~~~~~~ +!!! error TS1212: Identifier expected. 'protected' is a reserved word in strict mode + var [[public, package]] = [[1, [2, 3]]]; + ~~~~~~ +!!! error TS1212: Identifier expected. 'public' is a reserved word in strict mode + ~~~~~~~ +!!! error TS1212: Identifier expected. 'package' is a reserved word in strict mode + var [...implements] = [[]]; + ~~~~~~~~~~ +!!! error TS1212: Identifier expected. 'implements' is a reserved word in strict mode + \ No newline at end of file diff --git a/tests/baselines/reference/arrayLiterals4.js b/tests/baselines/reference/arrayLiterals4.js new file mode 100644 index 00000000000..28c7fb10306 --- /dev/null +++ b/tests/baselines/reference/arrayLiterals4.js @@ -0,0 +1,16 @@ +//// [arrayLiterals4.ts] +"use strict" +var [public, static] = [1, 23, ]; +var protected = [1, 2, 3]; +var [a, b, c] = [...protected]; +var [[public, package]] = [[1, [2, 3]]]; +var [...implements] = [[]]; + + +//// [arrayLiterals4.js] +"use strict"; +var _a = [1, 23,], public = _a[0], static = _a[1]; +var protected = [1, 2, 3]; +var _b = protected, a = _b[0], b = _b[1], c = _b[2]; +var _c = ([[1, [2, 3]]])[0], public = _c[0], package = _c[1]; +var _d = [[]], implements = _d.slice(0); diff --git a/tests/baselines/reference/arrayLiterals5.errors.txt b/tests/baselines/reference/arrayLiterals5.errors.txt new file mode 100644 index 00000000000..ee928841b6a --- /dev/null +++ b/tests/baselines/reference/arrayLiterals5.errors.txt @@ -0,0 +1,46 @@ +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(1,6): error TS1181: Array element destructuring pattern expected. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(1,11): error TS1005: '(' expected. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(1,13): error TS1109: Expression expected. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(1,16): error TS1005: '(' expected. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(1,18): error TS1128: Declaration or statement expected. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(2,6): error TS1181: Array element destructuring pattern expected. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(2,9): error TS1005: '(' expected. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(2,11): error TS2304: Cannot find name 'as'. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(2,13): error TS1005: ';' expected. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(2,15): error TS1128: Declaration or statement expected. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(3,9): error TS1003: Identifier expected. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(3,14): error TS1003: Identifier expected. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(3,16): error TS1128: Declaration or statement expected. + + +==== tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts (13 errors) ==== + var [while, for] = [1, 3, ]; + ~~~~~ +!!! error TS1181: Array element destructuring pattern expected. + ~ +!!! error TS1005: '(' expected. + ~~~ +!!! error TS1109: Expression expected. + ~ +!!! error TS1005: '(' expected. + ~ +!!! error TS1128: Declaration or statement expected. + var [for, as] = [, , , , ]; + ~~~ +!!! error TS1181: Array element destructuring pattern expected. + ~ +!!! error TS1005: '(' expected. + ~~ +!!! error TS2304: Cannot find name 'as'. + ~ +!!! error TS1005: ';' expected. + ~ +!!! error TS1128: Declaration or statement expected. + var [...break] = [...["hello"]]; + ~~~~~ +!!! error TS1003: Identifier expected. + ~ +!!! error TS1003: Identifier expected. + ~ +!!! error TS1128: Declaration or statement expected. + \ No newline at end of file diff --git a/tests/baselines/reference/arrayLiterals5.js b/tests/baselines/reference/arrayLiterals5.js new file mode 100644 index 00000000000..faf4bb6fa70 --- /dev/null +++ b/tests/baselines/reference/arrayLiterals5.js @@ -0,0 +1,19 @@ +//// [arrayLiterals5.ts] +var [while, for] = [1, 3, ]; +var [for, as] = [, , , , ]; +var [...break] = [...["hello"]]; + + +//// [arrayLiterals5.js] +var _a = void 0; +while (, ) + for (; ; ) + ; +[1, 3,]; +var _b = void 0; +for (, as; ; ) + ; +[, , , ,]; +var _c = void 0, = _c.slice(0); +break ; +["hello"]; diff --git a/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2.ts b/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2.ts new file mode 100644 index 00000000000..6b6807e1d33 --- /dev/null +++ b/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2.ts @@ -0,0 +1,32 @@ +var a = [2,3,4] +var a1 = ["hello", "world"] +var a2 = [undefined, null, undefined]; +var a3 = [] +var a4: number[] = [...a3]; +var a5: number[] = []; + +var b = [, , , ...a,"hello"]; +var c = [() => 1,]; +var d = [...c,,]; +var e = [,,...d]; +var g = [[1, 2, "hello"], ["string", true]]; +var h = [...g]; +var i: [number[], string[]] = [[1, 2, 3],["hello", "string"]]; +var j = [...i]; +var k:Array = [...i]; +interface tup { + 0: number[]|string[]; + 1: number[]|string[]; +} +interface myArray extends Array {} +interface myArray2 extends Array {} +var l: tup = [...i]; // error +var m: [number, number, number] = [...a]; // error +var n: number[] = [...a]; +var o: myArray = [...a]; +var p: myArray = [...a, ...a1]; // error +var q: myArray2 = [...a, ...a1]; +var r = [...a2]; +var r1 = [...a3]; +var r2 = [...a4]; +var r3:number[][] = [[...a4]]; \ No newline at end of file diff --git a/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2ES6.ts b/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2ES6.ts new file mode 100644 index 00000000000..5a32af531e1 --- /dev/null +++ b/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2ES6.ts @@ -0,0 +1,33 @@ +// @target:es6 +var a = [2,3,4] +var a1 = ["hello", "world"] +var a2 = [undefined, null, undefined]; +var a3 = [] +var a4: number[] = [...a3]; +var a5: number[] = []; + +var b = [, , , ...a,"hello"]; +var c = [() => 1,]; +var d = [...c,,]; +var e = [,,...d]; +var g = [[1, 2, "hello"], ["string", true]]; +var h = [...g]; +var i: [number[], string[]] = [[1, 2, 3],["hello", "string"]]; +var j = [...i]; +var k:Array = [...i]; +interface tup { + 0: number[]|string[]; + 1: number[]|string[]; +} +interface myArray extends Array {} +interface myArray2 extends Array {} +var l: tup = [...i]; // error +var m: [number, number, number] = [...a]; // error +var n: number[] = [...a]; +var o: myArray = [...a]; +var p: myArray = [...a, ...a1]; // error +var q: myArray2 = [...a, ...a1]; +var r = [...a2]; +var r1 = [...a3]; +var r2 = [...a4]; +var r3:number[][] = [[...a4]]; \ No newline at end of file diff --git a/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts b/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts new file mode 100644 index 00000000000..1a173d59d92 --- /dev/null +++ b/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts @@ -0,0 +1,42 @@ +interface I0 extends Array { + 0: number; + 1: number; + 2: string; + 3: boolean; +} +var [a, b]: [number, number] = [1, 2]; +var [a1, b1]: [number, number] = [1, 2, "string", true]; // error +var [a2, b2]: (number| string)[] = [1, 2, 3, "string"]; +var [c1, c2, c3]: I0 = [10, 11, "string", true]; +interface I extends Array{ + 0: string|number; + 1: string|number; + 2: string|number; +} +interface I2 extends Array { + 0: number; + 1: number; + 2: string|number; +} +var tup: [number, number, string] = [1, 2, "world"]; +var [c, d, e]: I = tup; +var [f, g]: I2 = tup; +var h1: string| number; +var [f1, g1,h1]: I2 = tup; +h1 = g1; + +var arr1 = [1, 2, 3]; +var arr2 = [true, false, true]; +var arr3 = [true] +var [[foo1, foo2, foo3], [boo1, boo2, boo3]] = [[...arr1], [...arr2]]; +var [bar1, bar2, bar3, bar1, bar2, bar3] = [...arr1, ...arr2]; +var [bar1, bar2, bar3, bar1, bar2] = [...arr1, ...arr3]; +var [[r, s], t] = [[...arr1], "hello"]; +var [[r1, s1], t1] = [[...arr1], ...["hello"]]; // error +var [x] = [...["word"]]; +var [...y] = [...["word"]]; +var z = [...[...["word"]]]; +function foobar() { + return [...arguments]; +} +var [...as] = [[, , , , ]]; \ No newline at end of file diff --git a/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3ES6.ts b/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3ES6.ts new file mode 100644 index 00000000000..817d27f0f92 --- /dev/null +++ b/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3ES6.ts @@ -0,0 +1,39 @@ +// @target:es6 +interface I0 extends Array { + 0: number; + 1: number; + 2: string; + 3: boolean; +} +var [a, b]: [number, number] = [1, 2]; +var [a1, b1]: [number, number] = [1, 2, "string", true]; // error +var [a2, b2]: (number| string)[] = [1, 2, 3, "string"]; +var [c1, c2, c3]: I0 = [10, 11, "string", true]; +interface I extends Array{ + 0: string|number; + 1: string|number; + 2: string|number; +} +interface I2 extends Array { + 0: number; + 1: number; + 2: string|number; +} +var tup: [number, number, string] = [1, 2, "world"]; +var [c, d, e]: I = tup; +var [f, g]: I2 = tup; +var h1: string| number; +var [f1, g1,h1]: I2 = tup; +h1 = g1; + +var arr1 = [1, 2, 3]; +var arr2 = [true, false, true]; +var arr3 = [true] +var [[foo1, foo2, foo3], [boo1, boo2, boo3]] = [[...arr1], [...arr2]]; +var [bar1, bar2, bar3, bar1, bar2, bar3] = [...arr1, ...arr2]; +var [bar1, bar2, bar3, bar1, bar2] = [...arr1, ...arr3]; +var [[r, s], t] = [[...arr1], "hello"]; +var [[r1, s1], t1] = [[...arr1], ...["hello"]]; // error +var [x] = [...["word"]]; +var [...y] = [...["word"]]; +var z = [...[...["word"]]]; \ No newline at end of file diff --git a/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts b/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts new file mode 100644 index 00000000000..28319903b7c --- /dev/null +++ b/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts @@ -0,0 +1,6 @@ +"use strict" +var [public, static] = [1, 23, ]; +var protected = [1, 2, 3]; +var [a, b, c] = [...protected]; +var [[public, package]] = [[1, [2, 3]]]; +var [...implements] = [[]]; diff --git a/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts b/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts new file mode 100644 index 00000000000..2429037b4a8 --- /dev/null +++ b/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts @@ -0,0 +1,3 @@ +var [while, for] = [1, 3, ]; +var [for, as] = [, , , , ]; +var [...break] = [...["hello"]];