Skip to content

Commit 869e972

Browse files
committed
Add Deferred tests
1 parent bb3f6cf commit 869e972

2 files changed

Lines changed: 59 additions & 4 deletions

File tree

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import { Deferred } from "../deferred";
2+
3+
describe("Deferred tests", () => {
4+
test("resolve", () => {
5+
const deferred = new Deferred<string>();
6+
7+
expect(deferred.resolve).toBeDefined();
8+
expect(deferred.reject).toBeDefined();
9+
expect(deferred.done).toBe(false);
10+
expect(deferred.resolved).toBe(false);
11+
expect(deferred.rejected).toBe(false);
12+
expect(deferred.resolvedTo).toBeUndefined();
13+
expect(deferred.rejectedTo).toBeUndefined();
14+
expect(deferred.promise).toBeDefined();
15+
16+
deferred.resolve("Did it!");
17+
18+
expect(deferred.done).toBe(true);
19+
expect(deferred.resolved).toBe(true);
20+
expect(deferred.rejected).toBe(false);
21+
expect(deferred.resolvedTo).toBe("Did it!");
22+
expect(deferred.rejectedTo).toBeUndefined();
23+
});
24+
25+
test("reject", async () => {
26+
const deferred = new Deferred<string>();
27+
28+
deferred.reject("Didn't do it :(");
29+
30+
let caughtRejection = false;
31+
try {
32+
await deferred.promise;
33+
} catch (e) {
34+
caughtRejection = true;
35+
}
36+
37+
expect(caughtRejection).toBe(true);
38+
39+
expect(deferred.done).toBe(true);
40+
expect(deferred.resolved).toBe(false);
41+
expect(deferred.rejected).toBe(true);
42+
expect(deferred.rejectedTo).toBe("Didn't do it :(");
43+
expect(deferred.resolvedTo).toBeUndefined();
44+
});
45+
});

packages/bonito-core/src/util/deferred.ts

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,29 @@
33
* at a later point in time with a function call.
44
*/
55
export class Deferred<T = void> {
6-
public promise: Promise<T>;
7-
public done = false;
8-
public resolve!: (result: T) => void;
9-
public reject!: (error: unknown) => void;
6+
promise: Promise<T>;
7+
8+
done = false;
9+
resolved = false;
10+
rejected = false;
11+
resolvedTo?: T;
12+
rejectedTo?: unknown;
13+
14+
resolve!: (result: T) => void;
15+
reject!: (error: unknown) => void;
1016

1117
constructor() {
1218
this.promise = new Promise<T>((resolve, reject) => {
1319
this.reject = (e) => {
1420
this.done = true;
21+
this.rejected = true;
22+
this.rejectedTo = e;
1523
reject(e);
1624
};
1725
this.resolve = (r: T) => {
1826
this.done = true;
27+
this.resolved = true;
28+
this.resolvedTo = r;
1929
resolve(r);
2030
};
2131
});

0 commit comments

Comments
 (0)