@@ -96,10 +96,43 @@ describe("InMemoryTransport", () => {
96
96
} ) ;
97
97
98
98
test ( "should throw error when sending after close" , async ( ) => {
99
- await clientTransport . close ( ) ;
99
+ const [ client , server ] = InMemoryTransport . createLinkedPair ( ) ;
100
+ let clientError : Error | undefined ;
101
+ let serverError : Error | undefined ;
102
+
103
+ client . onerror = ( err ) => {
104
+ clientError = err ;
105
+ } ;
106
+
107
+ server . onerror = ( err ) => {
108
+ serverError = err ;
109
+ } ;
110
+
111
+ await client . close ( ) ;
112
+
113
+ // Attempt to send message from client
100
114
await expect (
101
- clientTransport . send ( { jsonrpc : "2.0" , method : "test" , id : 1 } ) ,
115
+ client . send ( {
116
+ jsonrpc : "2.0" ,
117
+ method : "test" ,
118
+ id : 1 ,
119
+ } ) ,
102
120
) . rejects . toThrow ( "Not connected" ) ;
121
+
122
+ // Attempt to send message from server
123
+ await expect (
124
+ server . send ( {
125
+ jsonrpc : "2.0" ,
126
+ method : "test" ,
127
+ id : 2 ,
128
+ } ) ,
129
+ ) . rejects . toThrow ( "Not connected" ) ;
130
+
131
+ // Verify that both sides received errors
132
+ expect ( clientError ) . toBeDefined ( ) ;
133
+ expect ( clientError ?. message ) . toBe ( "Not connected" ) ;
134
+ expect ( serverError ) . toBeDefined ( ) ;
135
+ expect ( serverError ?. message ) . toBe ( "Not connected" ) ;
103
136
} ) ;
104
137
105
138
test ( "should queue messages sent before start" , async ( ) => {
@@ -118,4 +151,65 @@ describe("InMemoryTransport", () => {
118
151
await serverTransport . start ( ) ;
119
152
expect ( receivedMessage ) . toEqual ( message ) ;
120
153
} ) ;
154
+
155
+ describe ( "error handling" , ( ) => {
156
+ test ( "should trigger onerror when sending without connection" , async ( ) => {
157
+ const transport = new InMemoryTransport ( ) ;
158
+ let error : Error | undefined ;
159
+
160
+ transport . onerror = ( err ) => {
161
+ error = err ;
162
+ } ;
163
+
164
+ await expect (
165
+ transport . send ( {
166
+ jsonrpc : "2.0" ,
167
+ method : "test" ,
168
+ id : 1 ,
169
+ } ) ,
170
+ ) . rejects . toThrow ( "Not connected" ) ;
171
+
172
+ expect ( error ) . toBeDefined ( ) ;
173
+ expect ( error ?. message ) . toBe ( "Not connected" ) ;
174
+ } ) ;
175
+
176
+ test ( "should trigger onerror when sending after close" , async ( ) => {
177
+ const [ client , server ] = InMemoryTransport . createLinkedPair ( ) ;
178
+ let clientError : Error | undefined ;
179
+ let serverError : Error | undefined ;
180
+
181
+ client . onerror = ( err ) => {
182
+ clientError = err ;
183
+ } ;
184
+
185
+ server . onerror = ( err ) => {
186
+ serverError = err ;
187
+ } ;
188
+
189
+ await client . close ( ) ;
190
+
191
+ // Attempt to send message from client
192
+ await expect (
193
+ client . send ( {
194
+ jsonrpc : "2.0" ,
195
+ method : "test" ,
196
+ id : 1 ,
197
+ } ) ,
198
+ ) . rejects . toThrow ( "Not connected" ) ;
199
+
200
+ // Attempt to send message from server
201
+ await expect (
202
+ server . send ( {
203
+ jsonrpc : "2.0" ,
204
+ method : "test" ,
205
+ id : 2 ,
206
+ } ) ,
207
+ ) . rejects . toThrow ( "Not connected" ) ;
208
+
209
+ // Verify that both sides received errors
210
+ expect ( clientError ?. message ) . toBe ( "Not connected" ) ;
211
+ expect ( serverError ) . toBeDefined ( ) ;
212
+ expect ( serverError ?. message ) . toBe ( "Not connected" ) ;
213
+ } ) ;
214
+ } ) ;
121
215
} ) ;
0 commit comments