@@ -50,10 +50,63 @@ describe('Helper tests', () => {
50
50
expect ( countListeners ( ) ) . toBe ( 0 ) ;
51
51
} ) ;
52
52
53
- test ( 'waiter is finished' , async ( ) => {
53
+ test ( 'waiter is resolved' , async ( ) => {
54
+ const myWaiter = waiter ( ) ;
55
+ myWaiter . resolve ( ) ;
56
+ await myWaiter ;
57
+ expect ( myWaiter . isFinished ) . toBe ( true ) ;
58
+ expect ( myWaiter . isRejected ) . toBe ( false ) ;
59
+ expect ( myWaiter . isResolved ) . toBe ( true ) ;
60
+ } ) ;
61
+
62
+ test ( 'waiter is resolved with value' , async ( ) => {
63
+ const myWaiter = waiter < string > ( ) ;
64
+ const value = 'my resolve result' ;
65
+ myWaiter . resolve ( value ) ;
66
+ const result = await myWaiter ;
67
+ expect ( result ) . toBe ( value ) ;
68
+ expect ( myWaiter . isFinished ) . toBe ( true ) ;
69
+ expect ( myWaiter . isRejected ) . toBe ( false ) ;
70
+ expect ( myWaiter . isResolved ) . toBe ( true ) ;
71
+ } ) ;
72
+
73
+ test ( 'waiter is finished (ensure finish alias works)' , async ( ) => {
54
74
const myWaiter = waiter ( ) ;
55
75
myWaiter . finish ( ) ;
56
76
await myWaiter ;
57
77
expect ( myWaiter . isFinished ) . toBe ( true ) ;
78
+ expect ( myWaiter . isRejected ) . toBe ( false ) ;
79
+ expect ( myWaiter . isResolved ) . toBe ( true ) ;
80
+ } ) ;
81
+
82
+ test ( 'waiter is rejected' , async ( ) => {
83
+ const myWaiter = waiter ( ) ;
84
+ const error = new Error ( 'Waiter was rejected' ) ;
85
+ myWaiter . reject ( error ) ;
86
+ await expect ( myWaiter ) . rejects . toThrow ( error ) ;
87
+ expect ( myWaiter . isFinished ) . toBe ( true ) ;
88
+ expect ( myWaiter . isRejected ) . toBe ( true ) ;
89
+ expect ( myWaiter . isResolved ) . toBe ( false ) ;
90
+ } ) ;
91
+
92
+ test ( 'waiter is rejected with error type' , async ( ) => {
93
+ class MyError extends Error {
94
+ readonly name = 'MyError' ;
95
+ }
96
+ const myWaiter = waiter < void , MyError > ( ) ;
97
+ const error = new MyError ( 'MyError test instance' ) ;
98
+ myWaiter . reject ( error ) ;
99
+ await expect ( myWaiter ) . rejects . toThrow ( error ) ;
100
+ expect ( myWaiter . isFinished ) . toBe ( true ) ;
101
+ expect ( myWaiter . isRejected ) . toBe ( true ) ;
102
+ expect ( myWaiter . isResolved ) . toBe ( false ) ;
103
+
104
+ // Expect other error types to cause a typescript error
105
+ class OtherError extends Error {
106
+ readonly name = 'OtherError' ;
107
+ }
108
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
109
+ // @ts -expect-error
110
+ myWaiter . reject ( new OtherError ( 'OtherError test instance' ) ) ;
58
111
} ) ;
59
112
} ) ;
0 commit comments