@@ -50,10 +50,63 @@ describe('Helper tests', () => {
5050 expect ( countListeners ( ) ) . toBe ( 0 ) ;
5151 } ) ;
5252
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 ( ) => {
5474 const myWaiter = waiter ( ) ;
5575 myWaiter . finish ( ) ;
5676 await myWaiter ;
5777 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' ) ) ;
58111 } ) ;
59112} ) ;
0 commit comments