/
json-rpc.test.ts
91 lines (86 loc) · 2.37 KB
/
json-rpc.test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import { copy } from "https://deno.land/std@0.122.0/bytes/mod.ts";
import { assertEquals } from "https://deno.land/std@0.122.0/testing/asserts.ts";
import { BufReader } from "https://deno.land/std@0.122.0/io/buffer.ts";
import { createEventBuffer } from "../core/runtime/async/event-buffer.ts";
import { defer } from "../core/runtime/async/observer.ts";
import { createJsonRpcConnection } from "./json-rpc.ts";
function createBuffer(): Deno.Reader & Deno.Writer {
const eventBuffer = createEventBuffer<Uint8Array>();
const asyncGenerator = eventBuffer.drain();
const reader: Deno.Reader = {
async read(p) {
const result = await asyncGenerator.next();
if (!result) return null;
return copy(result.value, p, 0);
},
};
const bufReader = new BufReader(reader);
return {
read(p) {
return bufReader.read(p);
},
async write(p) {
eventBuffer.push(p);
return await Promise.resolve(p.length);
},
};
}
Deno.test("json-rpc/sendRequest: Handling request properly", async () => {
let result: string | undefined;
const buffer1 = createBuffer();
const buffer2 = createBuffer();
const sender = createJsonRpcConnection({
reader: buffer1,
writer: buffer2,
requestHandlers: {},
notificationHandlers: {},
});
createJsonRpcConnection({
reader: buffer2,
writer: buffer1,
requestHandlers: {
test(params) {
result = params[0];
return Promise.resolve(result);
},
},
notificationHandlers: {},
});
const response = await sender.sendRequest({
method: "test",
params: ["hello"],
});
assertEquals(response, {
id: 0,
jsonrpc: "2.0",
result: "hello",
});
assertEquals(result, "hello");
});
Deno.test("json-rpc/sendNotification: Handling notification properly", async () => {
let result = defer<string>();
const buffer1 = createBuffer();
const buffer2 = createBuffer();
const sender = createJsonRpcConnection({
reader: buffer1,
writer: buffer2,
requestHandlers: {},
notificationHandlers: {},
});
createJsonRpcConnection({
reader: buffer2,
writer: buffer1,
requestHandlers: {},
notificationHandlers: {
test(params) {
result.resolve(params[0]);
return Promise.resolve();
},
},
});
sender.sendNotification({
method: "test",
params: ["hello"],
});
assertEquals(await result, "hello");
});