@@ -30,26 +30,44 @@ Deno.test('JSONRPCClient/JSONRPCServer', async () => {
3030 assertObjectMatch (
3131 await client . request (
3232 'plus' ,
33- { $ : 'not an array, so it should throw' } as any ,
33+ { error_test : 'not an array, so it should throw' } as any ,
3434 ) . catch ( ( e ) => e ) ,
3535 {
3636 code : - 32603 ,
3737 message : 'Internal error' ,
3838 } ,
3939 )
4040
41+ assertObjectMatch (
42+ await client . request (
43+ 'no_such_method' as any ,
44+ ) . catch ( ( e ) => e ) ,
45+ {
46+ code : - 32601 ,
47+ message : 'Method not found' ,
48+ } ,
49+ )
50+
4151 assertEquals (
4252 await client . batch (
4353 client . createRequest ( 'upper' , 'nihao' ) ,
44- client . createNotifaction ( 'upper ' , 'anything' ) ,
54+ client . createNotifaction ( 'lower ' , 'anything' ) ,
4555 client . createRequest ( 'upper' , 'shijie' ) ,
56+ client . createRequest ( 'plus' , [ 1 , 2 ] ) ,
57+ client . createRequest ( 'minus' , [ 1 , 2 ] ) ,
4658 ) ,
4759 [ {
4860 status : 'fulfilled' ,
4961 value : 'NIHAO' ,
5062 } , {
5163 status : 'fulfilled' ,
5264 value : 'SHIJIE' ,
65+ } , {
66+ status : 'fulfilled' ,
67+ value : 3 ,
68+ } , {
69+ status : 'fulfilled' ,
70+ value : - 1 ,
5371 } ] ,
5472 )
5573} )
@@ -61,6 +79,14 @@ Deno.test({
6179 . state !==
6280 'granted' ,
6381 fn : async ( ) => {
82+ const ok = await fetch ( 'http://localhost:6800/jsonrpc' , {
83+ signal : AbortSignal . timeout ( 500 ) ,
84+ } ) . then ( ( res ) => res . ok ) . catch ( ( ) => false )
85+ if ( ! ok ) {
86+ // skip when no aria2c jsonrpc is running
87+ return
88+ }
89+
6490 const client = new JSONRPCClient ( ( json ) =>
6591 fetch ( 'http://localhost:6800/jsonrpc' , {
6692 method : 'POST' ,
@@ -81,3 +107,46 @@ Deno.test({
81107 assertObjectMatch ( r2 , { status : 'fulfilled' } )
82108 } ,
83109} )
110+
111+ Deno . test ( {
112+ name : 'JSONRPCServer/Deno.serve()' ,
113+ ignore : Deno . permissions . querySync ( { name : 'net' } )
114+ . state !==
115+ 'granted' ,
116+ fn : async ( ) => {
117+ const server = new JSONRPCServer ( )
118+
119+ server . setMethod ( 'trim' , ( str : string ) => str . trim ( ) )
120+ server . setMethod ( 'trimStart' , ( str : string ) => str . trimStart ( ) )
121+ server . setMethod ( 'trimEnd' , ( str : string ) => str . trimEnd ( ) )
122+
123+ const httpServer = Deno . serve (
124+ { port : 8888 , onListen ( ) { } } ,
125+ async ( request ) => {
126+ const url = new URL ( request . url )
127+ if ( url . pathname === '/jsonrpc' ) {
128+ return new Response (
129+ await server . process ( await request . text ( ) ) ,
130+ {
131+ headers : { 'content-type' : 'application/json' } ,
132+ } ,
133+ )
134+ }
135+ return new Response ( '404' , { status : 404 } )
136+ } ,
137+ )
138+
139+ const client = new JSONRPCClient ( ( json ) =>
140+ fetch ( 'http://localhost:8888/jsonrpc' , {
141+ method : 'POST' ,
142+ body : json ,
143+ } ) . then ( ( res ) => res . text ( ) )
144+ )
145+
146+ assertEquals ( await client . request ( 'trim' , ' trim ' ) , 'trim' )
147+ assertEquals ( await client . request ( 'trimStart' , ' trim ' ) , 'trim ' )
148+ assertEquals ( await client . request ( 'trimEnd' , ' trim ' ) , ' trim' )
149+
150+ await httpServer . shutdown ( )
151+ } ,
152+ } )
0 commit comments