mirror of
https://gitea.toothfairyai.com/ToothFairyAI/tf_code.git
synced 2026-03-30 13:54:01 +00:00
- Rename packages/opencode → packages/tfcode (directory only) - Rename bin/opencode → bin/tfcode (CLI binary) - Rename .opencode → .tfcode (config directory) - Update package.json name and bin field - Update config directory path references (.tfcode) - Keep internal code references as 'opencode' for easy upstream sync - Keep @opencode-ai/* workspace package names This minimal branding approach allows clean merges from upstream opencode repository while providing tfcode branding for users.
96 lines
2.5 KiB
TypeScript
96 lines
2.5 KiB
TypeScript
import { describe, expect, test, beforeEach } from "bun:test"
|
|
import path from "path"
|
|
import { LSPClient } from "../../src/lsp/client"
|
|
import { LSPServer } from "../../src/lsp/server"
|
|
import { Instance } from "../../src/project/instance"
|
|
import { Log } from "../../src/util/log"
|
|
|
|
// Minimal fake LSP server that speaks JSON-RPC over stdio
|
|
function spawnFakeServer() {
|
|
const { spawn } = require("child_process")
|
|
const serverPath = path.join(__dirname, "../fixture/lsp/fake-lsp-server.js")
|
|
return {
|
|
process: spawn(process.execPath, [serverPath], {
|
|
stdio: "pipe",
|
|
}),
|
|
}
|
|
}
|
|
|
|
describe("LSPClient interop", () => {
|
|
beforeEach(async () => {
|
|
await Log.init({ print: true })
|
|
})
|
|
|
|
test("handles workspace/workspaceFolders request", async () => {
|
|
const handle = spawnFakeServer() as any
|
|
|
|
const client = await Instance.provide({
|
|
directory: process.cwd(),
|
|
fn: () =>
|
|
LSPClient.create({
|
|
serverID: "fake",
|
|
server: handle as unknown as LSPServer.Handle,
|
|
root: process.cwd(),
|
|
}),
|
|
})
|
|
|
|
await client.connection.sendNotification("test/trigger", {
|
|
method: "workspace/workspaceFolders",
|
|
})
|
|
|
|
await new Promise((r) => setTimeout(r, 100))
|
|
|
|
expect(client.connection).toBeDefined()
|
|
|
|
await client.shutdown()
|
|
})
|
|
|
|
test("handles client/registerCapability request", async () => {
|
|
const handle = spawnFakeServer() as any
|
|
|
|
const client = await Instance.provide({
|
|
directory: process.cwd(),
|
|
fn: () =>
|
|
LSPClient.create({
|
|
serverID: "fake",
|
|
server: handle as unknown as LSPServer.Handle,
|
|
root: process.cwd(),
|
|
}),
|
|
})
|
|
|
|
await client.connection.sendNotification("test/trigger", {
|
|
method: "client/registerCapability",
|
|
})
|
|
|
|
await new Promise((r) => setTimeout(r, 100))
|
|
|
|
expect(client.connection).toBeDefined()
|
|
|
|
await client.shutdown()
|
|
})
|
|
|
|
test("handles client/unregisterCapability request", async () => {
|
|
const handle = spawnFakeServer() as any
|
|
|
|
const client = await Instance.provide({
|
|
directory: process.cwd(),
|
|
fn: () =>
|
|
LSPClient.create({
|
|
serverID: "fake",
|
|
server: handle as unknown as LSPServer.Handle,
|
|
root: process.cwd(),
|
|
}),
|
|
})
|
|
|
|
await client.connection.sendNotification("test/trigger", {
|
|
method: "client/unregisterCapability",
|
|
})
|
|
|
|
await new Promise((r) => setTimeout(r, 100))
|
|
|
|
expect(client.connection).toBeDefined()
|
|
|
|
await client.shutdown()
|
|
})
|
|
})
|