mirror of
https://github.com/laravel-ls/protocol.git
synced 2026-06-16 03:54:56 +02:00
add tests
This commit is contained in:
parent
5049160990
commit
be37cd5a53
20 changed files with 755 additions and 1 deletions
95
capabilities_server_test.go
Normal file
95
capabilities_server_test.go
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
package protocol_test
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"testing"
|
||||
|
||||
"github.com/laravel-ls/protocol"
|
||||
)
|
||||
|
||||
func Test_CapabilitiesServer_UnmarshalValidJSON(t *testing.T) {
|
||||
data := []byte(`{
|
||||
"positionEncoding": "utf-16",
|
||||
"textDocumentSync": 2,
|
||||
"completionProvider": {
|
||||
"triggerCharacters": [".", ":"],
|
||||
"resolveProvider": true,
|
||||
"completionItem": {
|
||||
"labelDetailsSupport": true
|
||||
}
|
||||
},
|
||||
"hoverProvider": true,
|
||||
"definitionProvider": true,
|
||||
"codeActionProvider": true,
|
||||
"signatureHelpProvider": {
|
||||
"triggerCharacters": ["(", ","],
|
||||
"retriggerCharacters": [")"]
|
||||
},
|
||||
"diagnosticProvider": {
|
||||
"interFileDependencies": true,
|
||||
"workspaceDiagnostics": true
|
||||
}
|
||||
}`)
|
||||
|
||||
var decoded protocol.ServerCapabilities
|
||||
if err := json.Unmarshal(data, &decoded); err != nil {
|
||||
t.Fatalf("unmarshal failed: %v", err)
|
||||
}
|
||||
|
||||
positionEncoding := protocol.PositionEncodingKindUTF16
|
||||
if decoded.PositionEncoding == nil || *decoded.PositionEncoding != positionEncoding {
|
||||
t.Fatalf("expected positionEncoding=%q, got %+v", positionEncoding, decoded.PositionEncoding)
|
||||
}
|
||||
|
||||
if decoded.CompletionProvider == nil {
|
||||
t.Fatalf("expected completionProvider to be present")
|
||||
}
|
||||
|
||||
if decoded.CompletionProvider.ResolveProvider == nil || !*decoded.CompletionProvider.ResolveProvider {
|
||||
t.Fatalf("expected completionProvider.resolveProvider=true")
|
||||
}
|
||||
|
||||
if decoded.CompletionProvider.CompletionItem == nil {
|
||||
t.Fatalf("expected completionProvider.completionItem to be present")
|
||||
}
|
||||
|
||||
if decoded.CompletionProvider.CompletionItem.LabelDetailsSupport == nil || !*decoded.CompletionProvider.CompletionItem.LabelDetailsSupport {
|
||||
t.Fatalf("expected completionProvider.completionItem.labelDetailsSupport=true")
|
||||
}
|
||||
|
||||
textDocumentSync, ok := decoded.TextDocumentSync.(float64)
|
||||
if !ok || int(textDocumentSync) != int(protocol.TextDocumentSyncKindIncremental) {
|
||||
t.Fatalf("expected textDocumentSync=%d, got %#v", protocol.TextDocumentSyncKindIncremental, decoded.TextDocumentSync)
|
||||
}
|
||||
|
||||
diagnosticProvider, ok := decoded.DiagnosticProvider.(map[string]any)
|
||||
if !ok {
|
||||
t.Fatalf("expected diagnosticProvider object, got %#v", decoded.DiagnosticProvider)
|
||||
}
|
||||
|
||||
if inter, ok := diagnosticProvider["interFileDependencies"].(bool); !ok || !inter {
|
||||
t.Fatalf("expected diagnosticProvider.interFileDependencies=true, got %#v", diagnosticProvider["interFileDependencies"])
|
||||
}
|
||||
|
||||
if ws, ok := diagnosticProvider["workspaceDiagnostics"].(bool); !ok || !ws {
|
||||
t.Fatalf("expected diagnosticProvider.workspaceDiagnostics=true, got %#v", diagnosticProvider["workspaceDiagnostics"])
|
||||
}
|
||||
}
|
||||
|
||||
func Test_CapabilitiesServer_MarshalOmitEmptyFields(t *testing.T) {
|
||||
original := protocol.ServerCapabilities{}
|
||||
|
||||
data, err := json.Marshal(original)
|
||||
if err != nil {
|
||||
t.Fatalf("marshal failed: %v", err)
|
||||
}
|
||||
|
||||
var payload map[string]any
|
||||
if err := json.Unmarshal(data, &payload); err != nil {
|
||||
t.Fatalf("unmarshal failed: %v", err)
|
||||
}
|
||||
|
||||
if len(payload) != 0 {
|
||||
t.Fatalf("expected empty JSON object from zero-value capabilities, got: %s", string(data))
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue