mirror of
https://github.com/claude-code-best/claude-code.git
synced 2026-06-22 16:25:51 +00:00
feat: add VS Code IDE bridge extension
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
import { EventEmitter } from 'node:events'
|
||||
import { describe, expect, test } from 'bun:test'
|
||||
import { ServerWebSocketTransport } from '../src/server/serverWebSocketTransport.js'
|
||||
|
||||
class FakeWebSocket extends EventEmitter {
|
||||
readyState = 1
|
||||
sent: string[] = []
|
||||
closed = false
|
||||
|
||||
send(data: string, callback?: (error?: Error) => void) {
|
||||
this.sent.push(data)
|
||||
callback?.()
|
||||
}
|
||||
|
||||
close() {
|
||||
this.closed = true
|
||||
this.emit('close')
|
||||
}
|
||||
}
|
||||
|
||||
describe('server web socket transport', () => {
|
||||
test('forwards incoming JSON-RPC messages to the MCP server', async () => {
|
||||
const socket = new FakeWebSocket()
|
||||
const transport = new ServerWebSocketTransport(socket)
|
||||
const messages: unknown[] = []
|
||||
|
||||
transport.onmessage = message => {
|
||||
messages.push(message)
|
||||
}
|
||||
|
||||
await transport.start()
|
||||
socket.emit(
|
||||
'message',
|
||||
Buffer.from(
|
||||
JSON.stringify({
|
||||
jsonrpc: '2.0',
|
||||
id: 1,
|
||||
method: 'ping',
|
||||
params: {},
|
||||
}),
|
||||
),
|
||||
)
|
||||
|
||||
expect(messages).toHaveLength(1)
|
||||
expect(messages[0]).toEqual({
|
||||
jsonrpc: '2.0',
|
||||
id: 1,
|
||||
method: 'ping',
|
||||
params: {},
|
||||
})
|
||||
})
|
||||
|
||||
test('serializes outgoing JSON-RPC messages back to the websocket', async () => {
|
||||
const socket = new FakeWebSocket()
|
||||
const transport = new ServerWebSocketTransport(socket)
|
||||
|
||||
await transport.start()
|
||||
await transport.send({
|
||||
jsonrpc: '2.0',
|
||||
id: 2,
|
||||
result: {},
|
||||
})
|
||||
|
||||
expect(socket.sent).toHaveLength(1)
|
||||
expect(JSON.parse(socket.sent[0] ?? 'null')).toEqual({
|
||||
jsonrpc: '2.0',
|
||||
id: 2,
|
||||
result: {},
|
||||
})
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user