summaryrefslogtreecommitdiff
path: root/internal/lsp/transport_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/lsp/transport_test.go')
-rw-r--r--internal/lsp/transport_test.go71
1 files changed, 44 insertions, 27 deletions
diff --git a/internal/lsp/transport_test.go b/internal/lsp/transport_test.go
index c00b405..7ea47c4 100644
--- a/internal/lsp/transport_test.go
+++ b/internal/lsp/transport_test.go
@@ -1,40 +1,57 @@
package lsp
import (
- "bufio"
- "bytes"
- "testing"
+ "bufio"
+ "bytes"
+ "testing"
)
func TestReadMessage_ParsesContentLength(t *testing.T) {
- body := []byte(`{"jsonrpc":"2.0","id":1,"method":"initialize"}`)
- frame := []byte("Content-Length: ")
- frame = append(frame, []byte(stringInt(len(body)))...)
- frame = append(frame, []byte("\r\n\r\n")...)
- frame = append(frame, body...)
- s := &Server{in: bufio.NewReader(bytes.NewReader(frame))}
- got, err := s.readMessage()
- if err != nil || string(got) != string(body) { t.Fatalf("readMessage failed: %v %q", err, string(got)) }
+ body := []byte(`{"jsonrpc":"2.0","id":1,"method":"initialize"}`)
+ frame := []byte("Content-Length: ")
+ frame = append(frame, []byte(stringInt(len(body)))...)
+ frame = append(frame, []byte("\r\n\r\n")...)
+ frame = append(frame, body...)
+ s := &Server{in: bufio.NewReader(bytes.NewReader(frame))}
+ got, err := s.readMessage()
+ if err != nil || string(got) != string(body) {
+ t.Fatalf("readMessage failed: %v %q", err, string(got))
+ }
}
func TestWriteMessage_FramesJSON(t *testing.T) {
- var out bytes.Buffer
- s := &Server{out: &out}
- payload := struct{ JSONRPC string `json:"jsonrpc"`; Ping string `json:"ping"` }{JSONRPC: "2.0", Ping: "pong"}
- s.writeMessage(payload)
- got := out.String()
- if !bytes.HasPrefix([]byte(got), []byte("Content-Length: ")) { t.Fatalf("missing Content-Length header: %q", got) }
- // Header/body delimiter must be present
- idx := bytes.Index([]byte(got), []byte("\r\n\r\n"))
- if idx < 0 { t.Fatalf("missing CRLFCRLF delimiter: %q", got) }
- body := got[idx+4:]
- if body == "" || body[0] != '{' || body[len(body)-1] != '}' { t.Fatalf("body not JSON: %q", body) }
+ var out bytes.Buffer
+ s := &Server{out: &out}
+ payload := struct {
+ JSONRPC string `json:"jsonrpc"`
+ Ping string `json:"ping"`
+ }{JSONRPC: "2.0", Ping: "pong"}
+ s.writeMessage(payload)
+ got := out.String()
+ if !bytes.HasPrefix([]byte(got), []byte("Content-Length: ")) {
+ t.Fatalf("missing Content-Length header: %q", got)
+ }
+ // Header/body delimiter must be present
+ idx := bytes.Index([]byte(got), []byte("\r\n\r\n"))
+ if idx < 0 {
+ t.Fatalf("missing CRLFCRLF delimiter: %q", got)
+ }
+ body := got[idx+4:]
+ if body == "" || body[0] != '{' || body[len(body)-1] != '}' {
+ t.Fatalf("body not JSON: %q", body)
+ }
}
func stringInt(n int) string {
- if n == 0 { return "0" }
- var b [20]byte
- i := len(b)
- for n > 0 { i--; b[i] = byte('0' + n%10); n /= 10 }
- return string(b[i:])
+ if n == 0 {
+ return "0"
+ }
+ var b [20]byte
+ i := len(b)
+ for n > 0 {
+ i--
+ b[i] = byte('0' + n%10)
+ n /= 10
+ }
+ return string(b[i:])
}