@@ -96,10 +96,43 @@ describe("InMemoryTransport", () => {
9696 } ) ;
9797
9898 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
100114 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+ } ) ,
102120 ) . 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" ) ;
103136 } ) ;
104137
105138 test ( "should queue messages sent before start" , async ( ) => {
@@ -118,4 +151,65 @@ describe("InMemoryTransport", () => {
118151 await serverTransport . start ( ) ;
119152 expect ( receivedMessage ) . toEqual ( message ) ;
120153 } ) ;
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+ } ) ;
121215} ) ;
0 commit comments