| import { describe, expect, it } from "vitest"; |
| import { isAcpJsonRpcMessage, isJsonRpcId, normalizeJsonRpcId } from "./jsonrpc.js"; |
|
|
| describe("jsonrpc helpers", () => { |
| it("validates json-rpc ids", () => { |
| expect(isJsonRpcId(null)).toBe(true); |
| expect(isJsonRpcId("abc")).toBe(true); |
| expect(isJsonRpcId(12)).toBe(true); |
| expect(isJsonRpcId(Number.NaN)).toBe(false); |
| expect(isJsonRpcId({})).toBe(false); |
| }); |
|
|
| it("normalizes json-rpc ids", () => { |
| expect(normalizeJsonRpcId("abc")).toBe("abc"); |
| expect(normalizeJsonRpcId(12)).toBe("12"); |
| expect(normalizeJsonRpcId(null)).toBeNull(); |
| expect(normalizeJsonRpcId(undefined)).toBeNull(); |
| }); |
|
|
| it("accepts request, response, and notification shapes", () => { |
| expect( |
| isAcpJsonRpcMessage({ |
| jsonrpc: "2.0", |
| method: "session/prompt", |
| id: 1, |
| }), |
| ).toBe(true); |
|
|
| expect( |
| isAcpJsonRpcMessage({ |
| jsonrpc: "2.0", |
| id: 1, |
| result: { |
| stopReason: "end_turn", |
| }, |
| }), |
| ).toBe(true); |
|
|
| expect( |
| isAcpJsonRpcMessage({ |
| jsonrpc: "2.0", |
| method: "session/update", |
| }), |
| ).toBe(true); |
| }); |
|
|
| it("rejects malformed result/error response shapes", () => { |
| expect( |
| isAcpJsonRpcMessage({ |
| jsonrpc: "2.0", |
| id: 1, |
| }), |
| ).toBe(false); |
|
|
| expect( |
| isAcpJsonRpcMessage({ |
| jsonrpc: "2.0", |
| id: 1, |
| result: {}, |
| error: { |
| code: -1, |
| message: "bad", |
| }, |
| }), |
| ).toBe(false); |
| }); |
| }); |
|
|