mirror of
https://github.com/aljazceru/opencode.git
synced 2026-02-05 16:14:33 +01:00
113 lines
2.7 KiB
TypeScript
113 lines
2.7 KiB
TypeScript
import { describe, expect, test } from "bun:test"
|
|
import { spawn } from "child_process"
|
|
|
|
describe("ACP Server", () => {
|
|
test("initialize and shutdown", async () => {
|
|
const proc = spawn("bun", ["run", "dev", "acp"], {
|
|
cwd: process.cwd(),
|
|
stdio: ["pipe", "pipe", "pipe"],
|
|
env: { ...process.env, OPENCODE: "1" },
|
|
})
|
|
|
|
const encoder = new TextEncoder()
|
|
const decoder = new TextDecoder()
|
|
|
|
let initResponse: any = null
|
|
|
|
proc.stdout.on("data", (chunk: Buffer) => {
|
|
const lines = decoder.decode(chunk).split("\n")
|
|
for (const line of lines) {
|
|
const trimmed = line.trim()
|
|
if (!trimmed) continue
|
|
|
|
try {
|
|
const msg = JSON.parse(trimmed)
|
|
if (msg.id === 1) initResponse = msg
|
|
} catch (e) {}
|
|
}
|
|
})
|
|
|
|
// Wait for server to be ready
|
|
await new Promise((resolve) => setTimeout(resolve, 500))
|
|
|
|
proc.stdin.write(
|
|
encoder.encode(
|
|
JSON.stringify({
|
|
jsonrpc: "2.0",
|
|
id: 1,
|
|
method: "initialize",
|
|
params: { protocolVersion: 1 },
|
|
}) + "\n",
|
|
),
|
|
)
|
|
|
|
await new Promise((resolve) => setTimeout(resolve, 500))
|
|
|
|
expect(initResponse).toBeTruthy()
|
|
expect(initResponse.result.protocolVersion).toBe(1)
|
|
expect(initResponse.result.agentCapabilities).toBeTruthy()
|
|
|
|
proc.kill()
|
|
}, 10000)
|
|
|
|
test("create session", async () => {
|
|
const proc = spawn("bun", ["run", "dev", "acp"], {
|
|
cwd: process.cwd(),
|
|
stdio: ["pipe", "pipe", "pipe"],
|
|
env: { ...process.env, OPENCODE: "1" },
|
|
})
|
|
|
|
const encoder = new TextEncoder()
|
|
const decoder = new TextDecoder()
|
|
|
|
let sessionResponse: any = null
|
|
|
|
proc.stdout.on("data", (chunk: Buffer) => {
|
|
const lines = decoder.decode(chunk).split("\n")
|
|
for (const line of lines) {
|
|
const trimmed = line.trim()
|
|
if (!trimmed) continue
|
|
|
|
try {
|
|
const msg = JSON.parse(trimmed)
|
|
if (msg.id === 2) sessionResponse = msg
|
|
} catch (e) {}
|
|
}
|
|
})
|
|
|
|
proc.stdin.write(
|
|
encoder.encode(
|
|
JSON.stringify({
|
|
jsonrpc: "2.0",
|
|
id: 1,
|
|
method: "initialize",
|
|
params: { protocolVersion: 1 },
|
|
}) + "\n",
|
|
),
|
|
)
|
|
|
|
await new Promise((resolve) => setTimeout(resolve, 500))
|
|
|
|
proc.stdin.write(
|
|
encoder.encode(
|
|
JSON.stringify({
|
|
jsonrpc: "2.0",
|
|
id: 2,
|
|
method: "session/new",
|
|
params: {
|
|
cwd: process.cwd(),
|
|
mcpServers: [],
|
|
},
|
|
}) + "\n",
|
|
),
|
|
)
|
|
|
|
await new Promise((resolve) => setTimeout(resolve, 1000))
|
|
|
|
expect(sessionResponse).toBeTruthy()
|
|
expect(sessionResponse.result.sessionId).toBeTruthy()
|
|
|
|
proc.kill()
|
|
}, 10000)
|
|
})
|