Skip to content

Commit 5fba0c9

Browse files
committed
Add tests
1 parent bdd2ac3 commit 5fba0c9

12 files changed

+189
-1
lines changed

tests/baselines/reference/arrayConcat2.js

+20
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,19 @@ a.concat('Hello');
66

77
var b = new Array<string>();
88
b.concat('hello');
9+
10+
// #19535
11+
12+
const [x] = (undefined as unknown as number[][]).concat([1]);
13+
x == 1;
14+
15+
// #26378
16+
17+
[1].concat(['']);
18+
19+
// #26976
20+
21+
[].concat([1]);
922

1023

1124
//// [arrayConcat2.js]
@@ -14,3 +27,10 @@ a.concat("hello", 'world');
1427
a.concat('Hello');
1528
var b = new Array();
1629
b.concat('hello');
30+
// #19535
31+
var x = undefined.concat([1])[0];
32+
x == 1;
33+
// #26378
34+
[1].concat(['']);
35+
// #26976
36+
[].concat([1]);

tests/baselines/reference/arrayConcat2.symbols

+23
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,26 @@ b.concat('hello');
2121
>b : Symbol(b, Decl(arrayConcat2.ts, 5, 3))
2222
>concat : Symbol(Array.concat, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
2323

24+
// #19535
25+
26+
const [x] = (undefined as unknown as number[][]).concat([1]);
27+
>x : Symbol(x, Decl(arrayConcat2.ts, 10, 7))
28+
>(undefined as unknown as number[][]).concat : Symbol(Array.concat, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
29+
>undefined : Symbol(undefined)
30+
>concat : Symbol(Array.concat, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
31+
32+
x == 1;
33+
>x : Symbol(x, Decl(arrayConcat2.ts, 10, 7))
34+
35+
// #26378
36+
37+
[1].concat(['']);
38+
>[1].concat : Symbol(Array.concat, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
39+
>concat : Symbol(Array.concat, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
40+
41+
// #26976
42+
43+
[].concat([1]);
44+
>[].concat : Symbol(Array.concat, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
45+
>concat : Symbol(Array.concat, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
46+

tests/baselines/reference/arrayConcat2.types

+41-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
=== tests/cases/compiler/arrayConcat2.ts ===
22
var a: string[] = [];
33
>a : string[]
4-
>[] : undefined[]
4+
>[] : never[]
55

66
a.concat("hello", 'world');
77
>a.concat("hello", 'world') : string[]
@@ -30,3 +30,43 @@ b.concat('hello');
3030
>concat : { (...items: ConcatArray<string>[]): string[]; <U extends any[]>(...items: U): (string | ConcatFlatten<U[number]>)[]; }
3131
>'hello' : "hello"
3232

33+
// #19535
34+
35+
const [x] = (undefined as unknown as number[][]).concat([1]);
36+
>x : number | number[]
37+
>(undefined as unknown as number[][]).concat([1]) : (number | number[])[]
38+
>(undefined as unknown as number[][]).concat : { (...items: ConcatArray<number[]>[]): number[][]; <U extends any[]>(...items: U): (number[] | ConcatFlatten<U[number]>)[]; }
39+
>(undefined as unknown as number[][]) : number[][]
40+
>undefined as unknown as number[][] : number[][]
41+
>undefined as unknown : unknown
42+
>undefined : undefined
43+
>concat : { (...items: ConcatArray<number[]>[]): number[][]; <U extends any[]>(...items: U): (number[] | ConcatFlatten<U[number]>)[]; }
44+
>[1] : number[]
45+
>1 : 1
46+
47+
x == 1;
48+
>x == 1 : boolean
49+
>x : number | number[]
50+
>1 : 1
51+
52+
// #26378
53+
54+
[1].concat(['']);
55+
>[1].concat(['']) : (string | number)[]
56+
>[1].concat : { (...items: ConcatArray<number>[]): number[]; <U extends any[]>(...items: U): (number | ConcatFlatten<U[number]>)[]; }
57+
>[1] : number[]
58+
>1 : 1
59+
>concat : { (...items: ConcatArray<number>[]): number[]; <U extends any[]>(...items: U): (number | ConcatFlatten<U[number]>)[]; }
60+
>[''] : string[]
61+
>'' : ""
62+
63+
// #26976
64+
65+
[].concat([1]);
66+
>[].concat([1]) : number[]
67+
>[].concat : { (...items: ConcatArray<never>[]): never[]; <U extends any[]>(...items: U): ConcatFlatten<U[number]>[]; }
68+
>[] : never[]
69+
>concat : { (...items: ConcatArray<never>[]): never[]; <U extends any[]>(...items: U): ConcatFlatten<U[number]>[]; }
70+
>[1] : number[]
71+
>1 : 1
72+
+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
//// [arrayFlat.ts]
2+
// #24579 and #29604
3+
4+
const [x] = [[1], ['']].flat();
5+
const assert: any extends typeof x ? false : true = true;
6+
7+
8+
//// [arrayFlat.js]
9+
// #24579 and #29604
10+
var x = [[1], ['']].flat()[0];
11+
var assert = true;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
=== tests/cases/compiler/arrayFlat.ts ===
2+
// #24579 and #29604
3+
4+
const [x] = [[1], ['']].flat();
5+
>x : Symbol(x, Decl(arrayFlat.ts, 2, 7))
6+
>[[1], ['']].flat : Symbol(Array.flat, Decl(lib.es2019.array.d.ts, --, --), Decl(lib.es2019.array.d.ts, --, --), Decl(lib.es2019.array.d.ts, --, --), Decl(lib.es2019.array.d.ts, --, --), Decl(lib.es2019.array.d.ts, --, --) ... and 1 more)
7+
>flat : Symbol(Array.flat, Decl(lib.es2019.array.d.ts, --, --), Decl(lib.es2019.array.d.ts, --, --), Decl(lib.es2019.array.d.ts, --, --), Decl(lib.es2019.array.d.ts, --, --), Decl(lib.es2019.array.d.ts, --, --) ... and 1 more)
8+
9+
const assert: any extends typeof x ? false : true = true;
10+
>assert : Symbol(assert, Decl(arrayFlat.ts, 3, 5))
11+
>x : Symbol(x, Decl(arrayFlat.ts, 2, 7))
12+
+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
=== tests/cases/compiler/arrayFlat.ts ===
2+
// #24579 and #29604
3+
4+
const [x] = [[1], ['']].flat();
5+
>x : string | number
6+
>[[1], ['']].flat() : (string | number)[]
7+
>[[1], ['']].flat : { (depth: 4): (string | number)[]; (depth: 3): (string | number)[]; (depth: 2): (string | number)[]; (depth?: 1): (string | number)[]; (depth: 0): (number[] | string[])[]; (depth: number): any[]; }
8+
>[[1], ['']] : (number[] | string[])[]
9+
>[1] : number[]
10+
>1 : 1
11+
>[''] : string[]
12+
>'' : ""
13+
>flat : { (depth: 4): (string | number)[]; (depth: 3): (string | number)[]; (depth: 2): (string | number)[]; (depth?: 1): (string | number)[]; (depth: 0): (number[] | string[])[]; (depth: number): any[]; }
14+
15+
const assert: any extends typeof x ? false : true = true;
16+
>assert : boolean
17+
>x : string | number
18+
>false : false
19+
>true : true
20+
>true : true
21+

tests/baselines/reference/arrayFlatMap.js

+8
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,18 @@ const array: number[] = [];
33
const readonlyArray: ReadonlyArray<number> = [];
44
array.flatMap((): ReadonlyArray<number> => []); // ok
55
readonlyArray.flatMap((): ReadonlyArray<number> => []); // ok
6+
7+
// #19535
8+
9+
const [x] = [1].flatMap(undefined as () => number[] | number[][]);
10+
x == 1;
611

712

813
//// [arrayFlatMap.js]
914
var array = [];
1015
var readonlyArray = [];
1116
array.flatMap(function () { return []; }); // ok
1217
readonlyArray.flatMap(function () { return []; }); // ok
18+
// #19535
19+
var x = [1].flatMap(undefined)[0];
20+
x == 1;

tests/baselines/reference/arrayFlatMap.symbols

+11
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,14 @@ readonlyArray.flatMap((): ReadonlyArray<number> => []); // ok
1818
>flatMap : Symbol(ReadonlyArray.flatMap, Decl(lib.es2019.array.d.ts, --, --))
1919
>ReadonlyArray : Symbol(ReadonlyArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2016.array.include.d.ts, --, --), Decl(lib.es2019.array.d.ts, --, --))
2020

21+
// #19535
22+
23+
const [x] = [1].flatMap(undefined as () => number[] | number[][]);
24+
>x : Symbol(x, Decl(arrayFlatMap.ts, 7, 7))
25+
>[1].flatMap : Symbol(Array.flatMap, Decl(lib.es2019.array.d.ts, --, --))
26+
>flatMap : Symbol(Array.flatMap, Decl(lib.es2019.array.d.ts, --, --))
27+
>undefined : Symbol(undefined)
28+
29+
x == 1;
30+
>x : Symbol(x, Decl(arrayFlatMap.ts, 7, 7))
31+

tests/baselines/reference/arrayFlatMap.types

+17
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,20 @@ readonlyArray.flatMap((): ReadonlyArray<number> => []); // ok
2323
>(): ReadonlyArray<number> => [] : () => readonly number[]
2424
>[] : undefined[]
2525

26+
// #19535
27+
28+
const [x] = [1].flatMap(undefined as () => number[] | number[][]);
29+
>x : number | number[]
30+
>[1].flatMap(undefined as () => number[] | number[][]) : (number | number[])[]
31+
>[1].flatMap : <U>(callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => Flatten<U>[]
32+
>[1] : number[]
33+
>1 : 1
34+
>flatMap : <U>(callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => Flatten<U>[]
35+
>undefined as () => number[] | number[][] : () => number[] | number[][]
36+
>undefined : undefined
37+
38+
x == 1;
39+
>x == 1 : boolean
40+
>x : number | number[]
41+
>1 : 1
42+

tests/cases/compiler/arrayConcat2.ts

+14
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,17 @@ a.concat('Hello');
55

66
var b = new Array<string>();
77
b.concat('hello');
8+
9+
// #19535
10+
11+
const [x] = (undefined as unknown as number[][]).concat([1]);
12+
x == 1;
13+
14+
// #26378
15+
16+
[1].concat(['']);
17+
18+
// #26976
19+
20+
// @strictNullChecks: true
21+
[].concat([1]);

tests/cases/compiler/arrayFlat.ts

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// @lib: es2019
2+
3+
// #24579 and #29604
4+
5+
const [x] = [[1], ['']].flat();
6+
const assert: any extends typeof x ? false : true = true;

tests/cases/compiler/arrayFlatMap.ts

+5
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,8 @@ const array: number[] = [];
44
const readonlyArray: ReadonlyArray<number> = [];
55
array.flatMap((): ReadonlyArray<number> => []); // ok
66
readonlyArray.flatMap((): ReadonlyArray<number> => []); // ok
7+
8+
// #19535
9+
10+
const [x] = [1].flatMap(undefined as () => number[] | number[][]);
11+
x == 1;

0 commit comments

Comments
 (0)