|
1 | 1 | import { DeferredPromise } from "../src"; |
2 | | -import { IllegalStateError } from "../src/IllegalStateError"; |
3 | | - |
4 | | -function extractError<ErrorType extends Error>(fn: () => void): ErrorType { |
5 | | - try { |
6 | | - fn(); |
7 | | - } catch (error) { |
8 | | - return error as ErrorType; |
9 | | - } |
10 | | -} |
11 | 2 |
|
12 | 3 | describe("Promise-compliance", () => { |
13 | 4 | it('can be listened to with ".then()"', (done) => { |
@@ -108,44 +99,29 @@ describe("resolve()", () => { |
108 | 99 | expect(promise.result).toBe(123); |
109 | 100 | }); |
110 | 101 |
|
111 | | - it("throws when resolving an already resolved promise", async () => { |
| 102 | + it("does nothing when resolving an already resolved promise", async () => { |
112 | 103 | const promise = new DeferredPromise<number>(); |
113 | 104 | expect(promise.state).toBe("pending"); |
114 | 105 |
|
115 | 106 | promise.resolve(123); |
116 | 107 | expect(promise.state).toBe("resolved"); |
| 108 | + expect(promise.result).toBe(123); |
117 | 109 |
|
118 | | - const stateError = extractError<IllegalStateError>(() => { |
119 | | - promise.resolve(456); |
120 | | - }); |
121 | | - |
122 | | - // Throws an illegal state error. |
123 | | - expect(stateError).toBeInstanceOf(IllegalStateError); |
124 | | - expect(stateError.message).toBe( |
125 | | - "Cannot resolve a DeferredPromise: illegal state" |
126 | | - ); |
127 | | - expect(stateError.state).toBe("resolved"); |
128 | | - |
129 | | - // The state remains resolved. |
| 110 | + // Resolving an already resolved Promise does nothing. |
| 111 | + promise.resolve(456); |
130 | 112 | expect(promise.state).toBe("resolved"); |
| 113 | + expect(promise.result).toBe(123); |
131 | 114 | }); |
132 | 115 |
|
133 | 116 | it("throws when resolving an already rejected promise", () => { |
134 | 117 | const promise = new DeferredPromise<number>().catch(() => {}); |
135 | 118 | expect(promise.state).toBe("pending"); |
136 | 119 | promise.reject("first reason"); |
137 | 120 |
|
138 | | - const stateError = extractError<IllegalStateError>(() => { |
139 | | - promise.reject("second reason"); |
140 | | - }); |
141 | | - |
142 | | - expect(stateError).toBeInstanceOf(IllegalStateError); |
143 | | - expect(stateError.message).toBe( |
144 | | - "Cannot reject a DeferredPromise: illegal state" |
145 | | - ); |
146 | | - expect(stateError.state).toBe("rejected"); |
| 121 | + expect(promise.state).toBe("rejected"); |
| 122 | + expect(promise.rejectionReason).toBe("first reason"); |
147 | 123 |
|
148 | | - // The state remains rejected. |
| 124 | + promise.reject("second reason"); |
149 | 125 | expect(promise.state).toBe("rejected"); |
150 | 126 | expect(promise.rejectionReason).toBe("first reason"); |
151 | 127 | }); |
|
0 commit comments