Skip to content

Commit 032ede6

Browse files
committed
Add tests
1 parent 08899f3 commit 032ede6

12 files changed

+219
-1
lines changed

Diff for: tests/baselines/reference/arrayConcat2.js

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

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

1025

1126
//// [arrayConcat2.js]
@@ -14,3 +29,11 @@ a.concat("hello", 'world');
1429
a.concat('Hello');
1530
var b = new Array();
1631
b.concat('hello');
32+
var expected = undefined;
33+
// #19535
34+
var x = undefined.concat([1])[0];
35+
x == 1;
36+
// #26378
37+
[1].concat(['']);
38+
// #26976
39+
[].concat([1]);

Diff for: tests/baselines/reference/arrayConcat2.symbols

+28
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,31 @@ 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+
const expected: undefined = undefined as ConcatFlatten<undefined>;
25+
>expected : Symbol(expected, Decl(arrayConcat2.ts, 8, 5))
26+
>undefined : Symbol(undefined)
27+
>ConcatFlatten : Symbol(ConcatFlatten, Decl(lib.es5.d.ts, --, --))
28+
29+
// #19535
30+
31+
const [x] = (undefined as unknown as number[][]).concat([1]);
32+
>x : Symbol(x, Decl(arrayConcat2.ts, 12, 7))
33+
>(undefined as unknown as number[][]).concat : Symbol(Array.concat, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
34+
>undefined : Symbol(undefined)
35+
>concat : Symbol(Array.concat, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
36+
37+
x == 1;
38+
>x : Symbol(x, Decl(arrayConcat2.ts, 12, 7))
39+
40+
// #26378
41+
42+
[1].concat(['']);
43+
>[1].concat : Symbol(Array.concat, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
44+
>concat : Symbol(Array.concat, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
45+
46+
// #26976
47+
48+
[].concat([1]);
49+
>[].concat : Symbol(Array.concat, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
50+
>concat : Symbol(Array.concat, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
51+

Diff for: tests/baselines/reference/arrayConcat2.types

+46-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,48 @@ b.concat('hello');
3030
>concat : { (...items: ConcatArray<string>[]): string[]; <U extends any[]>(...items: U): (string | ConcatFlatten<U[number]>)[]; }
3131
>'hello' : "hello"
3232

33+
const expected: undefined = undefined as ConcatFlatten<undefined>;
34+
>expected : undefined
35+
>undefined as ConcatFlatten<undefined> : undefined
36+
>undefined : undefined
37+
38+
// #19535
39+
40+
const [x] = (undefined as unknown as number[][]).concat([1]);
41+
>x : number | number[]
42+
>(undefined as unknown as number[][]).concat([1]) : (number | number[])[]
43+
>(undefined as unknown as number[][]).concat : { (...items: ConcatArray<number[]>[]): number[][]; <U extends any[]>(...items: U): (number[] | ConcatFlatten<U[number]>)[]; }
44+
>(undefined as unknown as number[][]) : number[][]
45+
>undefined as unknown as number[][] : number[][]
46+
>undefined as unknown : unknown
47+
>undefined : undefined
48+
>concat : { (...items: ConcatArray<number[]>[]): number[][]; <U extends any[]>(...items: U): (number[] | ConcatFlatten<U[number]>)[]; }
49+
>[1] : number[]
50+
>1 : 1
51+
52+
x == 1;
53+
>x == 1 : boolean
54+
>x : number | number[]
55+
>1 : 1
56+
57+
// #26378
58+
59+
[1].concat(['']);
60+
>[1].concat(['']) : (string | number)[]
61+
>[1].concat : { (...items: ConcatArray<number>[]): number[]; <U extends any[]>(...items: U): (number | ConcatFlatten<U[number]>)[]; }
62+
>[1] : number[]
63+
>1 : 1
64+
>concat : { (...items: ConcatArray<number>[]): number[]; <U extends any[]>(...items: U): (number | ConcatFlatten<U[number]>)[]; }
65+
>[''] : string[]
66+
>'' : ""
67+
68+
// #26976
69+
70+
[].concat([1]);
71+
>[].concat([1]) : number[]
72+
>[].concat : { (...items: ConcatArray<never>[]): never[]; <U extends any[]>(...items: U): ConcatFlatten<U[number]>[]; }
73+
>[] : never[]
74+
>concat : { (...items: ConcatArray<never>[]): never[]; <U extends any[]>(...items: U): ConcatFlatten<U[number]>[]; }
75+
>[1] : number[]
76+
>1 : 1
77+

Diff for: tests/baselines/reference/arrayFlat.js

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
//// [arrayFlat.ts]
2+
const expected: undefined = undefined as Flatten<undefined>;
3+
4+
// #24579 and #29604
5+
6+
const [x] = [[1], ['']].flat();
7+
const assert: any extends typeof x ? false : true = true;
8+
9+
10+
//// [arrayFlat.js]
11+
var expected = undefined;
12+
// #24579 and #29604
13+
var x = [[1], ['']].flat()[0];
14+
var assert = true;

Diff for: tests/baselines/reference/arrayFlat.symbols

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
=== tests/cases/compiler/arrayFlat.ts ===
2+
const expected: undefined = undefined as Flatten<undefined>;
3+
>expected : Symbol(expected, Decl(arrayFlat.ts, 0, 5))
4+
>undefined : Symbol(undefined)
5+
>Flatten : Symbol(Flatten, Decl(lib.es2019.array.d.ts, --, --))
6+
7+
// #24579 and #29604
8+
9+
const [x] = [[1], ['']].flat();
10+
>x : Symbol(x, Decl(arrayFlat.ts, 4, 7))
11+
>[[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)
12+
>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)
13+
14+
const assert: any extends typeof x ? false : true = true;
15+
>assert : Symbol(assert, Decl(arrayFlat.ts, 5, 5))
16+
>x : Symbol(x, Decl(arrayFlat.ts, 4, 7))
17+

Diff for: tests/baselines/reference/arrayFlat.types

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
=== tests/cases/compiler/arrayFlat.ts ===
2+
const expected: undefined = undefined as Flatten<undefined>;
3+
>expected : undefined
4+
>undefined as Flatten<undefined> : undefined
5+
>undefined : undefined
6+
7+
// #24579 and #29604
8+
9+
const [x] = [[1], ['']].flat();
10+
>x : string | number
11+
>[[1], ['']].flat() : (string | number)[]
12+
>[[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[]; }
13+
>[[1], ['']] : (number[] | string[])[]
14+
>[1] : number[]
15+
>1 : 1
16+
>[''] : string[]
17+
>'' : ""
18+
>flat : { (depth: 4): (string | number)[]; (depth: 3): (string | number)[]; (depth: 2): (string | number)[]; (depth?: 1): (string | number)[]; (depth: 0): (number[] | string[])[]; (depth: number): any[]; }
19+
20+
const assert: any extends typeof x ? false : true = true;
21+
>assert : boolean
22+
>x : string | number
23+
>false : false
24+
>true : true
25+
>true : true
26+

Diff for: 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;

Diff for: 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+

Diff for: 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+

Diff for: tests/cases/compiler/arrayConcat2.ts

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

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

Diff for: tests/cases/compiler/arrayFlat.ts

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

Diff for: 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)