Skip to content

Commit

Permalink
Add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
jablko committed Nov 29, 2019
1 parent 5bc3b96 commit 62a1d57
Show file tree
Hide file tree
Showing 12 changed files with 204 additions and 8 deletions.
14 changes: 14 additions & 0 deletions tests/baselines/reference/asyncFunctionReturnType.js
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,13 @@ async function fGenericIndexedTypeForPromiseOfKProp<TObj extends Obj, K extends
async function fGenericIndexedTypeForExplicitPromiseOfKProp<TObj extends Obj, K extends keyof TObj>(obj: TObj, key: K): Promise<Awaited<TObj[K]>> {
return Promise.resolve<TObj[K]>(obj[key]);
}

// #27711

async function fGeneric<T>(x: T) {
return x;
}
const expected: Promise<number> = fGeneric(undefined as Promise<number>);


//// [asyncFunctionReturnType.js]
Expand Down Expand Up @@ -173,3 +180,10 @@ function fGenericIndexedTypeForExplicitPromiseOfKProp(obj, key) {
return Promise.resolve(obj[key]);
});
}
// #27711
function fGeneric(x) {
return __awaiter(this, void 0, void 0, function* () {
return x;
});
}
const expected = fGeneric(undefined);
18 changes: 18 additions & 0 deletions tests/baselines/reference/asyncFunctionReturnType.symbols
Original file line number Diff line number Diff line change
Expand Up @@ -289,3 +289,21 @@ async function fGenericIndexedTypeForExplicitPromiseOfKProp<TObj extends Obj, K
>key : Symbol(key, Decl(asyncFunctionReturnType.ts, 72, 110))
}

// #27711

async function fGeneric<T>(x: T) {
>fGeneric : Symbol(fGeneric, Decl(asyncFunctionReturnType.ts, 74, 1))
>T : Symbol(T, Decl(asyncFunctionReturnType.ts, 78, 24))
>x : Symbol(x, Decl(asyncFunctionReturnType.ts, 78, 27))
>T : Symbol(T, Decl(asyncFunctionReturnType.ts, 78, 24))

return x;
>x : Symbol(x, Decl(asyncFunctionReturnType.ts, 78, 27))
}
const expected: Promise<number> = fGeneric(undefined as Promise<number>);
>expected : Symbol(expected, Decl(asyncFunctionReturnType.ts, 81, 5))
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
>fGeneric : Symbol(fGeneric, Decl(asyncFunctionReturnType.ts, 74, 1))
>undefined : Symbol(undefined)
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))

16 changes: 16 additions & 0 deletions tests/baselines/reference/asyncFunctionReturnType.types
Original file line number Diff line number Diff line change
Expand Up @@ -221,3 +221,19 @@ async function fGenericIndexedTypeForExplicitPromiseOfKProp<TObj extends Obj, K
>key : K
}

// #27711

async function fGeneric<T>(x: T) {
>fGeneric : <T>(x: T) => Promise<Awaited<T>>
>x : T

return x;
>x : T
}
const expected: Promise<number> = fGeneric(undefined as Promise<number>);
>expected : Promise<number>
>fGeneric(undefined as Promise<number>) : Promise<number>
>fGeneric : <T>(x: T) => Promise<Awaited<T>>
>undefined as Promise<number> : Promise<number>
>undefined : undefined

8 changes: 7 additions & 1 deletion tests/baselines/reference/correctOrderOfPromiseMethod.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ async function countEverything(): Promise<number> {
const [resultA, resultB] = await Promise.all([
providerA(),
providerB(),
] as const);
]);

const dataA: A[] = resultA;
const dataB: B[] = resultB;
Expand All @@ -24,6 +24,10 @@ async function countEverything(): Promise<number> {
}
return 0;
}

// #31179

const expected: Promise<['a', 'b', 'c']> = Promise.all(undefined as readonly ['a', 'b', 'c']);


//// [correctOrderOfPromiseMethod.js]
Expand Down Expand Up @@ -92,3 +96,5 @@ function countEverything() {
});
});
}
// #31179
var expected = Promise.all(undefined);
12 changes: 11 additions & 1 deletion tests/baselines/reference/correctOrderOfPromiseMethod.symbols
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ async function countEverything(): Promise<number> {
providerB(),
>providerB : Symbol(providerB, Decl(correctOrderOfPromiseMethod.ts, 11, 9))

] as const);
]);

const dataA: A[] = resultA;
>dataA : Symbol(dataA, Decl(correctOrderOfPromiseMethod.ts, 18, 9))
Expand All @@ -70,3 +70,13 @@ async function countEverything(): Promise<number> {
return 0;
}

// #31179

const expected: Promise<['a', 'b', 'c']> = Promise.all(undefined as readonly ['a', 'b', 'c']);
>expected : Symbol(expected, Decl(correctOrderOfPromiseMethod.ts, 28, 5))
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
>Promise.all : Symbol(PromiseConstructor.all, Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --))
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
>all : Symbol(PromiseConstructor.all, Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --))
>undefined : Symbol(undefined)

20 changes: 15 additions & 5 deletions tests/baselines/reference/correctOrderOfPromiseMethod.types
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,12 @@ async function countEverything(): Promise<number> {
const [resultA, resultB] = await Promise.all([
>resultA : A[]
>resultB : B[]
>await Promise.all([ providerA(), providerB(), ] as const) : [A[], B[]]
>Promise.all([ providerA(), providerB(), ] as const) : Promise<[A[], B[]]>
>await Promise.all([ providerA(), providerB(), ]) : [A[], B[]]
>Promise.all([ providerA(), providerB(), ]) : Promise<[A[], B[]]>
>Promise.all : { <TAll>(values: Iterable<TAll>): Promise<Awaited<TAll>[]>; <T extends readonly any[]>(values: T): Promise<{ -readonly [P in keyof T]: Awaited<T[P]>; }>; }
>Promise : PromiseConstructor
>all : { <TAll>(values: Iterable<TAll>): Promise<Awaited<TAll>[]>; <T extends readonly any[]>(values: T): Promise<{ -readonly [P in keyof T]: Awaited<T[P]>; }>; }
>[ providerA(), providerB(), ] as const : readonly [Promise<A[]>, Promise<B[]>]
>[ providerA(), providerB(), ] : readonly [Promise<A[]>, Promise<B[]>]
>[ providerA(), providerB(), ] : [Promise<A[]>, Promise<B[]>]

providerA(),
>providerA() : Promise<A[]>
Expand All @@ -44,7 +43,7 @@ async function countEverything(): Promise<number> {
>providerB() : Promise<B[]>
>providerB : () => Promise<B[]>

] as const);
]);

const dataA: A[] = resultA;
>dataA : A[]
Expand Down Expand Up @@ -72,3 +71,14 @@ async function countEverything(): Promise<number> {
>0 : 0
}

// #31179

const expected: Promise<['a', 'b', 'c']> = Promise.all(undefined as readonly ['a', 'b', 'c']);
>expected : Promise<["a", "b", "c"]>
>Promise.all(undefined as readonly ['a', 'b', 'c']) : Promise<["a", "b", "c"]>
>Promise.all : { <TAll>(values: Iterable<TAll>): Promise<Awaited<TAll>[]>; <T extends readonly any[]>(values: T): Promise<{ -readonly [P in keyof T]: Awaited<T[P]>; }>; }
>Promise : PromiseConstructor
>all : { <TAll>(values: Iterable<TAll>): Promise<Awaited<TAll>[]>; <T extends readonly any[]>(values: T): Promise<{ -readonly [P in keyof T]: Awaited<T[P]>; }>; }
>undefined as readonly ['a', 'b', 'c'] : readonly ["a", "b", "c"]
>undefined : undefined

21 changes: 21 additions & 0 deletions tests/baselines/reference/promiseType.js
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,20 @@ const pc6 = p.then(() => Promise.reject("1"), () => {});
const pc7 = p.then(() => Promise.reject("1"), () => {throw 1});
const pc8 = p.then(() => Promise.reject("1"), () => Promise.resolve(1));
const pc9 = p.then(() => Promise.reject("1"), () => Promise.reject(1));

const expected1: undefined = undefined as Awaited<undefined>;

// #27711

const expected2: Promise<number> = new Promise<Promise<number>>(() => {});

// #28427

Promise.all([undefined as Promise<number> | string]);

Promise.resolve(undefined as Promise<number> | string);

new Promise(undefined as (resolve: (value: Promise<number> | string) => void) => void);


//// [promiseType.js]
Expand Down Expand Up @@ -440,3 +454,10 @@ const pc6 = p.then(() => Promise.reject("1"), () => { });
const pc7 = p.then(() => Promise.reject("1"), () => { throw 1; });
const pc8 = p.then(() => Promise.reject("1"), () => Promise.resolve(1));
const pc9 = p.then(() => Promise.reject("1"), () => Promise.reject(1));
const expected1 = undefined;
// #27711
const expected2 = new Promise(() => { });
// #28427
Promise.all([undefined]);
Promise.resolve(undefined);
new Promise(undefined);
36 changes: 36 additions & 0 deletions tests/baselines/reference/promiseType.symbols
Original file line number Diff line number Diff line change
Expand Up @@ -1089,3 +1089,39 @@ const pc9 = p.then(() => Promise.reject("1"), () => Promise.reject(1));
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
>reject : Symbol(PromiseConstructor.reject, Decl(lib.es2015.promise.d.ts, --, --))

const expected1: undefined = undefined as Awaited<undefined>;
>expected1 : Symbol(expected1, Decl(promiseType.ts, 219, 5))
>undefined : Symbol(undefined)
>Awaited : Symbol(Awaited, Decl(lib.es5.d.ts, --, --))

// #27711

const expected2: Promise<number> = new Promise<Promise<number>>(() => {});
>expected2 : Symbol(expected2, Decl(promiseType.ts, 223, 5))
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))

// #28427

Promise.all([undefined as Promise<number> | string]);
>Promise.all : Symbol(PromiseConstructor.all, Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --))
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
>all : Symbol(PromiseConstructor.all, Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --))
>undefined : Symbol(undefined)
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))

Promise.resolve(undefined as Promise<number> | string);
>Promise.resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --))
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
>resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --))
>undefined : Symbol(undefined)
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))

new Promise(undefined as (resolve: (value: Promise<number> | string) => void) => void);
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
>undefined : Symbol(undefined)
>resolve : Symbol(resolve, Decl(promiseType.ts, 231, 26))
>value : Symbol(value, Decl(promiseType.ts, 231, 36))
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))

40 changes: 40 additions & 0 deletions tests/baselines/reference/promiseType.types
Original file line number Diff line number Diff line change
Expand Up @@ -1583,3 +1583,43 @@ const pc9 = p.then(() => Promise.reject("1"), () => Promise.reject(1));
>reject : <T = never>(reason?: any) => Promise<T>
>1 : 1

const expected1: undefined = undefined as Awaited<undefined>;
>expected1 : undefined
>undefined as Awaited<undefined> : undefined
>undefined : undefined

// #27711

const expected2: Promise<number> = new Promise<Promise<number>>(() => {});
>expected2 : Promise<number>
>new Promise<Promise<number>>(() => {}) : Promise<number>
>Promise : PromiseConstructor
>() => {} : () => void

// #28427

Promise.all([undefined as Promise<number> | string]);
>Promise.all([undefined as Promise<number> | string]) : Promise<(string | number)[]>
>Promise.all : { <TAll>(values: Iterable<TAll>): Promise<Awaited<TAll>[]>; <T extends readonly any[]>(values: T): Promise<{ -readonly [P in keyof T]: Awaited<T[P]>; }>; }
>Promise : PromiseConstructor
>all : { <TAll>(values: Iterable<TAll>): Promise<Awaited<TAll>[]>; <T extends readonly any[]>(values: T): Promise<{ -readonly [P in keyof T]: Awaited<T[P]>; }>; }
>[undefined as Promise<number> | string] : (string | Promise<number>)[]
>undefined as Promise<number> | string : string | Promise<number>
>undefined : undefined

Promise.resolve(undefined as Promise<number> | string);
>Promise.resolve(undefined as Promise<number> | string) : Promise<string | number>
>Promise.resolve : { <T>(value: T): Promise<Awaited<T>>; (): Promise<void>; }
>Promise : PromiseConstructor
>resolve : { <T>(value: T): Promise<Awaited<T>>; (): Promise<void>; }
>undefined as Promise<number> | string : string | Promise<number>
>undefined : undefined

new Promise(undefined as (resolve: (value: Promise<number> | string) => void) => void);
>new Promise(undefined as (resolve: (value: Promise<number> | string) => void) => void) : Promise<string | number>
>Promise : PromiseConstructor
>undefined as (resolve: (value: Promise<number> | string) => void) => void : (resolve: (value: string | Promise<number>) => void) => void
>undefined : undefined
>resolve : (value: string | Promise<number>) => void
>value : string | Promise<number>

7 changes: 7 additions & 0 deletions tests/cases/compiler/asyncFunctionReturnType.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,3 +74,10 @@ async function fGenericIndexedTypeForPromiseOfKProp<TObj extends Obj, K extends
async function fGenericIndexedTypeForExplicitPromiseOfKProp<TObj extends Obj, K extends keyof TObj>(obj: TObj, key: K): Promise<Awaited<TObj[K]>> {
return Promise.resolve<TObj[K]>(obj[key]);
}

// #27711

async function fGeneric<T>(x: T) {
return x;
}
const expected: Promise<number> = fGeneric(undefined as Promise<number>);
6 changes: 5 additions & 1 deletion tests/cases/compiler/correctOrderOfPromiseMethod.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ async function countEverything(): Promise<number> {
const [resultA, resultB] = await Promise.all([
providerA(),
providerB(),
] as const);
]);

const dataA: A[] = resultA;
const dataB: B[] = resultB;
Expand All @@ -26,3 +26,7 @@ async function countEverything(): Promise<number> {
}
return 0;
}

// #31179

const expected: Promise<['a', 'b', 'c']> = Promise.all(undefined as readonly ['a', 'b', 'c']);
14 changes: 14 additions & 0 deletions tests/cases/compiler/promiseType.ts
Original file line number Diff line number Diff line change
Expand Up @@ -217,3 +217,17 @@ const pc6 = p.then(() => Promise.reject("1"), () => {});
const pc7 = p.then(() => Promise.reject("1"), () => {throw 1});
const pc8 = p.then(() => Promise.reject("1"), () => Promise.resolve(1));
const pc9 = p.then(() => Promise.reject("1"), () => Promise.reject(1));

const expected1: undefined = undefined as Awaited<undefined>;

// #27711

const expected2: Promise<number> = new Promise<Promise<number>>(() => {});

// #28427

Promise.all([undefined as Promise<number> | string]);

Promise.resolve(undefined as Promise<number> | string);

new Promise(undefined as (resolve: (value: Promise<number> | string) => void) => void);

0 comments on commit 62a1d57

Please sign in to comment.