Files
2026-06-02 23:14:41 +08:00

68 lines
1.4 KiB
Go

package acp
import (
"bufio"
"context"
"encoding/json"
"fmt"
"io"
"testing"
)
func TestTransportCallRoundTrip(t *testing.T) {
rResp, wMockResp := io.Pipe()
rReq, wTrOut := io.Pipe()
tr := newTransport(rResp, wTrOut, nil, nil)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
go tr.readLoop(ctx)
go func() {
defer wMockResp.Close()
sc := bufio.NewScanner(rReq)
for sc.Scan() {
var req map[string]any
if err := json.Unmarshal(sc.Bytes(), &req); err != nil {
continue
}
id := req["id"]
line := fmt.Sprintf(`{"jsonrpc":"2.0","id":%v,"result":{"protocolVersion":1}}`+"\n", id)
if _, err := io.WriteString(wMockResp, line); err != nil {
return
}
}
}()
res, err := tr.call(ctx, "initialize", map[string]any{"protocolVersion": 1})
if err != nil {
t.Fatal(err)
}
var got struct {
ProtocolVersion int `json:"protocolVersion"`
}
if err := json.Unmarshal(res, &got); err != nil {
t.Fatal(err)
}
if got.ProtocolVersion != 1 {
t.Fatalf("protocolVersion = %d", got.ProtocolVersion)
}
cancel()
_ = wTrOut.Close()
}
func TestJSONIDKey(t *testing.T) {
if jsonIDKey(json.RawMessage(`42`)) != "42" {
t.Fatalf("numeric id")
}
if jsonIDKey(json.RawMessage(`"x"`)) != "x" {
t.Fatalf("string id")
}
if !isJSONRPCIDNullOrAbsent(json.RawMessage(`null`)) {
t.Fatalf("null id")
}
if !isJSONRPCIDNullOrAbsent(json.RawMessage(nil)) {
t.Fatalf("absent id")
}
}