Skip to content

Commit cd1a27e

Browse files
committed
✅ Add tests for promises
1 parent a287425 commit cd1a27e

File tree

5 files changed

+110
-0
lines changed

5 files changed

+110
-0
lines changed

tests/src/es2015.promise.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ new Promise<number>((resolve) => {
77
// @ts-expect-error
88
resolve();
99
});
10+
new Promise<number | undefined>((resolve) => {
11+
resolve(123);
12+
resolve();
13+
});
1014
new Promise((resolve) => {
1115
resolve();
1216
resolve(123);

tests/src/es2018.promise.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
export const test = (getPromise: () => Promise<unknown>) => {
2+
const start = Date.now();
3+
4+
getPromise().finally<number>(() => {
5+
const end = Date.now();
6+
return end - start;
7+
});
8+
9+
getPromise().finally<number>(() => {
10+
const end = Date.now();
11+
return Promise.resolve(end - start);
12+
});
13+
14+
// @ts-expect-error
15+
getPromise().finally<number>(() => "NaN");
16+
};

tests/src/es2020.promise.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { expectType } from "tsd";
2+
3+
const test = async (
4+
values: Iterable<string | PromiseLike<PromiseLike<number>>>
5+
) => {
6+
const results = await Promise.allSettled(values);
7+
8+
for (const result of results) {
9+
switch (result.status) {
10+
case "fulfilled":
11+
expectType<string | number>(result.value);
12+
break;
13+
case "rejected":
14+
expectType<unknown>(result.reason);
15+
break;
16+
default:
17+
expectType<never>(result);
18+
}
19+
}
20+
};

tests/src/es2021.promise.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { expectType } from "tsd";
2+
3+
const test = async (
4+
values: Iterable<string | PromiseLike<PromiseLike<number>>>
5+
) => {
6+
const result = await Promise.any(values);
7+
expectType<string | number>(result);
8+
};

tests/src/es5.ts

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,68 @@ const isEntries = <A, B>(isKey: TypeGuard<A>, isValue: TypeGuard<B>) =>
2121
isArray(isPair(isKey, isValue));
2222
const isNumberStringEntries = isEntries(isNumber, isString);
2323

24+
// PromiseConstructorLike
25+
const testPromiseConstructorLike = (MyPromise: PromiseConstructorLike) => {
26+
new MyPromise<number>((resolve) => {
27+
resolve(123);
28+
// @ts-expect-error
29+
resolve();
30+
});
31+
new MyPromise<number | undefined>((resolve) => {
32+
resolve(123);
33+
resolve();
34+
});
35+
new MyPromise((resolve) => {
36+
resolve();
37+
resolve(123);
38+
});
39+
};
40+
// Promise
41+
const testPromise = (promise: Promise<string>) => {
42+
expectType<Promise<string>>(promise.then());
43+
expectType<Promise<string>>(promise.catch());
44+
expectType<Promise<string>>(promise.then(null));
45+
expectType<Promise<string>>(promise.then(undefined));
46+
expectType<Promise<string>>(promise.catch(null));
47+
expectType<Promise<string>>(promise.catch(undefined));
48+
expectType<Promise<string>>(promise.then(null, null));
49+
expectType<Promise<string>>(promise.then(null, undefined));
50+
expectType<Promise<string>>(promise.then(undefined, null));
51+
expectType<Promise<string>>(promise.then(undefined, undefined));
52+
expectType<Promise<string>>(promise.then(null, (err) => `${err}`));
53+
expectType<Promise<string>>(promise.then(undefined, (err) => `${err}`));
54+
expectType<Promise<string>>(promise.catch((err) => `${err}`));
55+
expectType<Promise<number>>(promise.then((str) => str.length));
56+
expectType<Promise<number>>(promise.then((str) => str.length, null));
57+
expectType<Promise<number>>(promise.then((str) => str.length, undefined));
58+
expectType<Promise<number>>(
59+
promise.then((str) => Promise.resolve(str.length))
60+
);
61+
expectType<Promise<number>>(
62+
promise.then(
63+
(str) => str.length,
64+
(err) => `${err}`.length
65+
)
66+
);
67+
expectType<Promise<number>>(
68+
promise.then(
69+
(str) => str.length,
70+
(err) => Promise.resolve(`${err}`.length)
71+
)
72+
);
73+
// @ts-expect-error
74+
promise.then<number>((str: string) => str);
75+
promise.then<number>(
76+
(str: string) => str.length,
77+
// @ts-expect-error
78+
() => "NaN"
79+
);
80+
// @ts-expect-error
81+
promise.then(null, (err) => `${err}`.length);
82+
// @ts-expect-error
83+
promise.catch(null, (err) => `${err}`.length);
84+
};
85+
2486
// eval
2587
expectType<unknown>(eval("foo"));
2688
// Object

0 commit comments

Comments
 (0)